Docker命令,docker


docker run

$ sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

docker run命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令。
正确的命令:

$ docker run learn/tutorial echo "hello word"
  • -d:containter将会运行在后台模式
  • –name:给container命名,对于一个container来说有个name会非常方便,因为你可以当你需要link其它容器时或者其他类似需要区分其它容器时,使用容器名称会简化操作
  • -P:container会开放部分端口到host,只要对方可以连接到host,就可以连接到container内部。当使用-P时,docker会查找一个未被占用的端口绑定到container。你可以使用docker port来查找这个随机绑定端口
docker run --name mongo_001 -d -P mongo
  • -p:指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort

映射所有接口地址

使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,可以执行

$ sudo docker run -d -p 5000:5000 training/webapp python app.py

此时默认会绑定本地所有接口上的所有地址。

映射到指定地址的指定端口

可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址,比如 localhost 地址
127.0.0.1

$ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

映射到指定地址的任意端口

使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。

$ sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py

还可以使用 udp 标记来指定 udp 端口

$ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

查看映射端口配置

使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址

$ docker port nostalgic_morse 5000
127.0.0.1:49155.


Dockerfile语法

VOLUME [“mountpoint”] 将本地文件夹或者其他container的文件夹挂载到container中

# Define mountable directories.
VOLUME ["/data/db"]

WORKDIR /path/to/workdir 切换目录用,可以多次切换(相当于cd命令)

# Define working directory.
WORKDIR /data

CMD [“executable”,”param1”,”param2”] container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD

# Define default command.
CMD ["mongod"]

EXPOSE port 把这个端口暴露在外,这样容器外可以看到这个端口并与其通信

# Expose ports.
#   - 27017: process
#   - 28017: http
EXPOSE 27017
EXPOSE 28017

ENV key value 设置环境变量

ENV APP_NAME app.js

示例(构建mongodb镜像的Dockerfile)

#
# MongoDB Dockerfile
#

# Pull base image
FROM       ubuntu:latest

MAINTAINER LIU Qiu Shan <qsliubj@cn.ibm.com>


# Install MongoDB
# The real logic
# Add 10gen official apt source to the sources list
RUN \
  apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 && \
  echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' > /etc/apt/sources.list.d/mongodb.list && \
  apt-get update && \
  apt-get install -y mongodb-org && \
  rm -rf /var/lib/apt/lists/*

# Define mountable directories
VOLUME ["/data/db"]

# Define working directory
WORKDIR /data

# Define default mongodb command
CMD ["mongod"]

# Expose the process port of mongodb
EXPOSE 27017

# Expose the http port of mongodb
#EXPOSE 28017

docker build

docker build -t="dockerfile/mongodb" .

在当前目录下有名为Dockerfile的文件,执行上述命令,构建名为dockerfile/mongodb的镜像。


镜像

查看所有镜像 $ docker images

删除指定镜像 $ docker rmi image_name


深入

”Docker有两方面的技术非常重要,第一是Linux容器方面的技术,第二是Docker镜像的技术。从技术本身来讲,两者的可复制性很强,不存在绝对的技术难点,然而Docker Hub由于存在大量的数据的原因,导致Docker Hub的可复制性几乎不存在,这需要一个生态的营造。“

Dockerfile 是软件的原材料,Docker 镜像是软件的交付品,而 Docker 容器则可以认为是软件的运行态。

Dockerfile中的四条命令 FROM, ADD, VOLUME, CMD, 这四条命令可以构建出一个镜像来,分别对应四个镜像层,见下图。

下图的出处是http://www.csdn.net/article/2015-08-21/2825511

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关内容