docker学习笔记(五): Dockerfile指令
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 命令查看