Dockerfile 简介
构建Docker镜像有两种方法:
- 一种是利用Dockerfile编译构建,命令格式为
docker build --pull -t $(REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG) .
[docker-build官指]https://docs.docker.com/engine/reference/commandline/build/ - 一种是用正在运行的容器commit为目标镜像,命令格式为
docker commit $(DockerID) $(REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)
[docker-commit官指]https://docs.docker.com/engine/reference/commandline/commit/#commit-a-container
第一种方法有迹可循,是推荐的方法。第二种方法适用于对Docker命令不熟悉的亲,对运行的容器配置完成后,进行打包成新的镜像。
这里介绍利用Dockerfile构建镜像,喜欢看官方文档的亲请点这里[官方Dockerfile用法说明]https://docs.docker.com/engine/reference/builder/。
Dockerfile是一个Docker镜像的描述文件,我们可以理解成火箭发射的A、B、C、D…的步骤。Dockerfile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
一个Dockerfile示例如下:
# 基于debian镜像,版本号为jessie
FROM debian:jessie
# 创建目录
RUN mkdir /var/log -p
# 拷贝kubemark到容器内,如果是压缩文件则会解压
COPY kubemark /kubemark
COPY voyage-agent /voyage-agent
# 拷贝文件到容器内,如果没有该目录会自动创建该目录
ADD voyage-cni /opt/cni/bin/
ADD loopback /opt/cni/bin/
ADD 1-voyage.conf /etc/cni/net.d/
#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#当启动容器时执行的脚本文件, 只能有一条CMD,如果有多条,则只有第一条生效. CMD和RUN执行的时机不同,CMD是在容器启动之后执行的。
CMD ["/run.sh"]
由上可知,Dockerfile结构大致分为四个部分:
(1)基础镜像信息
(2)维护者信息
(3)镜像操作指令
(4)容器启动时执行指令
Dockerfile每行支持一条指令,每条指令可带多个参数,支持使用以#号开头的注释。