本文已参加 [新人创作礼] 活动,一起开启掘金创作之旅。 本篇继续介绍dockerfile常用指令。
指令详解
(7)ARG
构建镜像时指定的参数,在构建镜像时可以外部传参。
ARG <参数名>[=<默认值>]
构建容器时:build -arg=参数名=参数值
(8)VOLUME
定义匿名的数据卷,防止你在启动容器时没有挂载数据卷,会自动挂载到数据卷中,
防止容器内部的重要数据丢失。
1. VOLUME ["路径一","路径二"]
2. VOLUME <路径>
(9) EXPOSE
映射内外部端口。
EXPOSE [端口一]
build 使用 -P
(10) WORKDIR
指定工作目录,指定的目录必须时提前创建好的。
WORKDIR <工作目录路径>
(11) USER
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户
(用户和用户组必须提前已经存在)。
USER <用户名>[:<用户组>]
(12) HEALTHCHECK
用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
(13) ONBUILD
用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构
建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建
的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build
的 Dockerfile 里的 ONBUILD 指定的命令。
ONBUILD <其它指令>
(14)LABEL
LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:
LABEL <key>=<value> <key>=<value> <key>=<value>
根据刚才的常用指令,创建简单的dockerfile
## 构建centos 镜像
Dockerfile
FROM centos:7
MAINTAINER guaner <guaner@gmail.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim net-tools
EXPOSE 80
CMD /bin/bash
逐行解释该Dockerfile文件的指令:
FROM centos:7 该image文件继承官方的centos7
ENV MYPATH /usr/local:设置环境变量MYPATH
WORKDIR $MYPATH:直接使用上面设置的环境变量,指定/usr/local为工作目录
RUN yum -y install vim && net-tools:在/usr/local目录下,
运行yum -y install vim和yum -y install net-tools命令安装工具,
注意安装后的所有依赖和工具都会打包到image文件中
EXPOSE 80:将容器80端口暴露出来,允许外部连接这个端口
CMD:指定容器启动的时候运行命令
使用build指定dockerfile生成我们的镜像
docker build -t centostest:0.1
.....