构建镜像
- 使用docker commit命令(不推荐)
- 使用docker build命令和 Dockerfile文件(通过dockerfile构建镜像具备重复性、透明性和幂等性)
docker build相关命令
-
保证构建过程不会使用缓存
docker build --no-cache -t="仓库名/镜像名" 。
Dockerfile指令
-
CMD 指令指定一个容器启动时要运行的命令,而 Dockerfile中 RUN指令用于指定镜像被构建时要运行的指令。CMD命令类似使用 docker run 启动容器时指定要运行的命令十分类似(docker run 命令会覆盖CMD指令)
CMD ["/bin/bash","-l"]
-
ENTRYPOINT 指令类似于CMD,区别在于CMD指令会被docker run指令覆盖,而ENTRYPOINT 不会。实际上,docker run命令行中指定的任何参数都会被当做参数再次传递给ENTRYPOINT 指令中的命令
ENTRYPOINT ["/usr/sbin/nginx"] 同时ENTRYPOINT 和 CMD 能够配合使用例如 ENTRYPOINT ["/usr/sbin/nginx"] CMD ["-h"] 1.我们可以指定-g "daemon off",那么CMD失效,NGINX会前台启动 2.如果docker run 不指定参数,那么cmd 的参数 -h 会传递给ENTRYPOINT 指令
-
WORKDIR 指令用于创建容器时,在容器内部设置一个工作目录,ENTRYPOINT 、CMD 指定的程序都会在该目录下执行
-
ENV 在镜像构建过程中设置环境变量
ENV RVM_PATH /home/rvm
-
USER 镜像以什么用户运行
-
VOLUME: 该指令用于向基于镜像创建的容器添加卷。一个卷是可以存在于一个或者多个容器内的特定目录。这个目录可以绕过联合文件系统,提供数据共享和数据进行持久化的能力
VOLUME ["/opt/project"]
-
ADD指令:用于将构建环境下的文件和目录复制到镜像中(还有归档文件解压功能)
ADD a.lic /opt/a.lic 将构建目录下的a 复制到 镜像中的/opt/a.lic
-
COPY 类似ADD,但没有文件提取和解压的功能
-
LABEL 用于为Docker镜像添加元数据
-
STOPSIGNAL 用于设置停止容器发送什么系统调用信号给容器
-
ARG 用于定义在 docker build命令是传递给构建运行的变量
ARG webapp_user=user ARG build docker build --build-age build=1234 .....
-
ONBUILD :未镜像添加触发器,当一个镜像被其他镜像当做基础镜像,该镜像中的触发器会被执行