CMD、ENTRYPOINT、ADD、COPY、VOLUME、WORKDIR、USER、ONBUILD、ENV
CMD指令用于指定一个容器启动时要运行的命令(类似于RUN)
docker run -it tlh/static_web /bin/true
CMD ["/bin/true"]
CMD ["/bin/bash","-l"]
要运行的命令要放在一个数组结构中,这将告诉docker按指定的原样来运行该命令。当然也可以不使用数组儿时指定CMD,这个时候docker 会在指定的命令前加上bin/sh -c
最后需要牢记docker run 命令会可以覆盖CMD指令。
ENTRYPOINT这个命令则不容易在启动容器时被覆盖,实际上docker run 命令行中指定的任何参数都会被当做参数再次传递给ENTRYPOINT指令中指定的命令。
WORKDIR 指令用来在从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT和或CMD指定的程序会在这个目录下执行
docker run -it -w /var/log ubuntu (-w可以指定运行时覆盖工作目录)
ENV 用来在镜像构建过程中设置环境变量。
ENV RVM_PATH /home/rvm/
USER指令用来指定该镜像会以什么样的用户去运行。
USER nginx我们还可以指定UID、GID
USER user
USER user:group
USER uid:gid
USER user:gid
USER uid:group
也可以在docker run 使用-u来指定运行的用户,默认是root用户
VOLUME 指令用来向基于镜像创建的容器添加卷。一个卷是可以存在于一个或者多个容器内的特定的目录,这个目录可以绕过联合文件系统,并提供如下共享数据或者对数据进行持久化的功能。
卷可以在容器间共享和重用
一个容器可以不是必须和其他容器共享卷
对卷的修改是立时生效的
对卷的修改不会对更新镜像产生影响
卷会一直存在直到没有任何容器使用它。
卷功能让我们可以将数据、数据库或者其他内容添加到镜像中而不是将这些内容提交到镜像中,并且运行我们在多个荣期间共享这些内容。
ADD指令用来构建环境下的文件和目录复制到镜像中。比如在安装一个应用程序时。ADD指令需要源文件位置和目的文件位置两个参数
指向源文件的位置参数可以是一个URL或者构建上下文或者环境中文件名或者目录。不能对构建目录或者上下文之外的文件进行ADD操作。
如果这个目的位置不存在,docker会给我们创建一个全路径,而且新增的文件和目录权限都是0755 并且UID和GID都是0
COPY 类型ADD,不同之处copy只关心在构建上下文复制本地文件,而不会去做文件提取和解压的工作。
源文件路径必须是在一个与当前构建环境相对的文件或者目录,本地文件都放在和Dockerfile同一个目录下。
ONBUILD 指令能为镜像添加触发器。当一个镜像被用作其他镜像的基础镜像时(比如你的镜像需要从某未准备好的位置添加源代码,或者你需要执行特定于构建镜像的环境的构建脚本)该镜像中的触发器将会被执行。
仅供参考