在日常的工作中,常常需要制作自己的项目的镜像,一般通过以下两种方式制作镜像:Docker commit、Dockerfile。
Docker commit
Docker commit一般用做从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dockerfile来完成。
docker commit 容器名 新镜像名:tag
使用这种方式的缺点是:1.对外不可解释,不方便排查问题, 2.可维护性差、可阅读性差。
Dockerfile
Dockerfile 是由一系列指令和参数构成的脚本,一个 Dockerfile 里面包含了构建整个镜像的完整命令。Docker 通过docker build执行 Dockerfile 中的一系列指令自动构建镜像。以下是 Dockerfile 中一些常用字段的含义:
FROM:基础镜像,FROM 命令必须是 Dockerfile 的首个命令。
LABEL:为镜像生成元数据标签信息。原有指令 MAINTAINER 已经放弃使用,用 LABEL maintainer="hogwarts@testing-studio.com" 替代。
USER:指定运行容器时的用户名或 UID,后续 RUN 也会使用指定用户。
RUN:RUN 命令是 Dockerfile 执行命令的核心部分。它接受命令作为参数并用于创建镜像。每条 RUN 命令在当前基础镜像上执行,并且会提交一个新镜像。
VOLUME:定义匿名卷,容器运行时应该尽量保持容器存储层不发生写操作,为了防止运行