Skip to main content

构建镜像

[TOC] 构建镜像有两种方式

一、使用 commit 构建镜像

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
-a, --author string Author (e.g., "John Hannibal Smith
<hannibal@a-team.com>")
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Commit message
-p, --pause Pause container during commit (default true)

-a 指定镜像的作者 -m 记录镜像的信息 -p 使用容器构建镜像时,是否暂停容器。

二、使用 dockerfike 构建镜像

构建镜像

docker build -t="指定镜像名"

查看镜像的构建过程

docker history [image]

Dockerdile指令

FROM<image>

FROM <image>:<tag>

必须是已经存在的镜像 必须是第一条非注释指令

MAINTAINER <name>

指定镜像的作者信息,包含进行的所有者和联系信息

LABEL

功能是为镜像指定标签

RUN

指定当前镜像中运行的命令

RUN <command> (Shell模式)
/bin/sh -c command
RUN [ "executable" , "param1" , "param2" ] ( exec模式 )
RUN ["/bin/bash" , "-c" , "echo hello" ]

EXPOSE <port> [<port>...]

指定运行该镜像的容器使用的端口

只是告诉 docker 运行的时候需要哪些端口,容器运行的时候还需要 -p 命令指定端口映射

CMD

容器运行时默认运行的命令。

CMD command param1 param2  (Shell模式)
CMD[ "executable" , "param1" , "param2" ] ( exec模式 )
CMD[ "param1" , "param2" ] (作为ENTERYPOINT指令的默认参数)

ENTRYPOINT

CMD 命令类似,区别是 ENTRYPOINT 命令不会被 docker run 命令后的指令覆盖,CMD会被覆盖。

ADD

COPY

  • COPY <src>...<dest>
  • COPY"<src>"..."<dest>"
  • 如果单纯的复制文件,Docker推荐使用COPY

COPY的<src>只能是本地文件,其他用法一致

VOLUME

设置数据卷

VOLUME ["/data"]
  • WORKDIR /path/to/workdir 设置工作目录

ENV

设置环境变量

ENV<key><value>
ENV<key>=<value>...

USER

指定为 什么样的用户去运行

USER daemon

ONBUILD [INSTRUCTION]

镜像触发器 当一个镜像被其他镜像作为基础镜像时执行 会在构建过程中插入指令 (PS:假设当前为镜像A,镜像B把镜像A设为基础镜像,在镜像B中构建镜像A中的ONBUILD命令执行才会生效)