CMD

CMD指令用于指定一个容器启动时需要运行的命令。

RUN指令是容器被构建时需要运行的命令。



sudo docker run -d -p 80 --name static_web docker/nginx:web –c /bin/bash



同等与Dockerfile中的



CMD[“/bin/bash”,”-c”]



ENTRYPOINT

ENTRYPOINT指令和CMD指令类似,但是CMD指令会被覆盖,而ENTRYPOINT指令则不会。



ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”]



WORKDIR

WORKDIR用来从镜像创建一个新容器时,在容器内部设置一个工作目录

docker run 命令添加参数 –w /dir 会将Dockerfile中的工作目录覆盖掉

ENV

ENV指令用来在镜像构建过程中设置环境变量

也可以在命令行中 通过-e 来指定环境变量



sudo docker run –ti –e “WEB_PORT=8080” Ubuntu



USER

USER 指令用来指定该镜像会以什么样的用户去运行

如:USER nginx

可以通过docker run命令中 –u选项覆盖该指令指定的值

如果不知道USER用户 默认为root用户

VOLUME

VOLUME指令用来向基于镜像创建的容器添加卷。一个卷可以存在于一个或者多个容器内特定的目录,这个目录可以绕过联合文件系统,并提供如下共下数据或者对数据持久化的功能。

1、     卷可以在容器间共享和重用

2、     一个容器可以不是必须和其他容器共享卷

3、     对卷的修改是立时生效的

4、     对卷的修改不会对更新镜像产生影响

5、     卷会一直存在直到没有容器再使用它



VOLUME [“/opt/project”]



 

基于此镜像创建的任何容器一个名为/opt/project的挂载点

也可以一次创建多个卷



VOLUME [“/opt/project”,”/data”]



ADD

用来将构建环境下的文件和目录复制到镜像中。

如:



ADD software.lic /opt/application/software.lic



ADD指令指向源文件的位置参数可以是一个URL,或者构建上下文或者环境中文件名或者目录

在ADD文件时,Docker通过有无/判断是文件夹还是文件

如果ADD指令中源文件是一个压缩文件,ADD会自动将这个文件解压

COPY

类似于ADD指令,不同在于COPY只关心在构建上下文中复制本地文件,而不会做提取和解压文件。



COPY conf.d/ /etc/apache2



(将本地目录中的文件复制到/etc/apache2中)

文件源路径必须是一个与当前构建环境相对的文件或目录,本地文件都放到和Dockerfile一个目录下。不能复制该目录下的文件。

如果复制的目的位置不存在,Docker会自动创建该文件夹

ONBUILD

该指令能为镜像添加触发器。当一个镜像被用作其他镜像的基础镜像时,该镜像中的触发器会被执行。

触发器在构建过程中会插入新指令,触发器可以是任何构建指令



ONBUILD RUN cd /cpp/src && make



ONBUILD指令可以在镜像上运行 docker inspect 命令查看