dockerfile指令汇总
1.cmd
指定一个容器启动时可用的指令或指令和参数。
cmd ["/bin/true"]
cmd["/bin/bash","-l"]
注意:docker run会覆盖cmd命令;深刻理解cmd和entrypoint之间的相互作用也是十分重要的;容器里只能指定一条cmd指令,如果需要启动容器的时候运行多个进程或者命令,考虑使用supervisor服务管理工具。
2.entrypoint
docker run执行的指令不会覆盖,且docker run命令行中的参数会被当做参数再次传递给entrypoint指令。
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
CMD ["-H"]
注意:docker run --entrypoint标志覆盖ENTRYPONIT指令
3.WORKDIR
从镜像中创建一个容器,在容器内部设置一个工作目录,ENTRYPOINT,CMD指令会在这个目录下执行。
WORKDIR /opt/apps/db
RUN bundle install
注意:可以使用 docker run -w /workdir 覆盖工作目录
4.ENV
用来在构建过程中设置环境变量
ENV RVM_PATH /home/rvm/
ENV TARGET_DIR /opt/app
WORDIR $TARGET_DIR
docker -e 标志可以传递环境变量,这些变量将只会在运行时有效
5.user
指定启动容器的用户,uid,user或者和gid,group组合。
docker run -u可以覆盖改指令
6.VOLUME
向容器添加卷。一个卷可以存在一个或者多个容器内的特定目录中。
卷的特点:
卷可以在容器之间共享和重用
一个容器可以自私地占用某个卷
卷的修改是即时生效
对卷的修改不会对更新镜像产生影响
卷会一直存在直到没有容器使用它
VOLUME ["/opt/project","/data"]
提示:docker cp是和volume指令相关并且也是很实用的命令。该命令可以从容器中复制文件,也可以复制文件到容器上。
7.add
add指令用来将构建环境下的文件和目录复制到镜像中。
ADD software.lic /opt/application/software.lib
将构建目录下的software.lic文件复制到容器/opt/application/software.lic
构建的源文件可以是url或者是构建上下文或环境中文名或者目录
目的地址以"/"字符来判断文件源是目录还是文件
ADD latest.tar.gz /var/www/wordprss/
如果源端存在压缩文件,会自动压缩到目的端
注意:ADD指令会使得构建缓存变得无效。
8.COPY
COPY只关心构建上下文中复制本地文件,而不去做提取和解压工作。
本地文件都放到与Dockerfile同一个目录下,不能放在改目录的之外的仁和目录。
目标目录必须是绝对路径
COPY conf.d/ /etc/apache2/
在这个例子中源文件是以"/"结尾,所以docker会认为它是目录,并将它复制到目的目录中。,如果目的目录不存在,docker会创建所需要的目录结构。
9.LABEL
label指令用于为docker镜像添加元数据。元数据一键值对的形式展现。
LABEL version="1.0"
LABEL location="Los Angeles" type="Date Center" role="Web Server"
10.STOPSIGNAL
stopsignal指令用来设置停止容器时发送什么系统调用信号给容器。这个信号必须是内核系统调用表中合法的值。
11.ARG
arg指令用来docker build命令运行时传递参数,我们只需要在构建时使用--build-arg标志即可。但是有个前提条件,用户在构建过程中只能使用在dockerfile定义过的参数。
ARG build
ARG webapp_user=nginx
docker build --build-arg build=1234 huwho/webapp
12.ONBUILD
onbuild指令能为镜像添加触发器。当一个镜像被用作其他镜像的基础镜像时(比如用户镜像需要从某未准备好的位置添加源代码,或者用户需要执行特定于构建镜像的环境的构建脚本),改镜像中的触发器将会被执行。
触发器会在构建过程中添加指令。
ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make
原文地址:http://blog.51cto.com/huwho/2135125
时间: 2024-12-11 23:20:19