Dockerfile 构建镜像
Dockerfile 由一行行命令语句组成, 并且支持以#开头的注释行。一般而言, Dockerfile 主体内容分为四 部分:基础镜像信息、 维护者信息、 镜像操作指令和容器启动时执行指令。
Docker 以从上到下的顺序运行 Dockerfile 的指令。为了指定基本映像,第一条指令必须是 FROM。一个声明以#字符开头则被视为注释。可以在 Docker 文件中使用 RUN,CMD,FROM,EXPOSE,ENV 等指令

FROM:基础镜像
1 2 3 4 5 6 7
| 格式 FROM image FROM image:tag FROM image@digest eg: FROM mysql:5.6 ps: tag或digest是可选的,如果不使用这两个值,会使用latest版本的基础镜像
|
MAINTAINER:维护者信息
1 2 3 4
| 格式: MAINTAINER name eg: MAINTAINER SadnessPineapple
|
RUN
1 2 3 4 5 6
| RUN 用于在镜像容器中执行命令,有以下两种命令执行方式 格式: run command eg: RUN ["executable", "param1", "param2"] run echo "nameserver 114.114.114.114"
|
ADD
1 2 3 4 5
| 将本地文件添加到容器中(tar类型的文件会自动解压) 格式: ADD src dest eg: ADD hom* /mydir/ 将所有的文件添加到/mydir/下
|
COPY
1 2 3 4 5
| 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 格式: COPY src dest eg: dest 为镜像中的绝对路径或者相对于WORKDIR的路径
|
CMD
1 2 3 4 5
| 构建容器后调用,也就是在容器启动时才进行调用,只能有一个,多个的话会被覆盖 格式: CMD ["executable","param1","param2"] 示例: CMD ["/bin/bash"]
|
ENTRYPOINT
1 2 3 4 5
| 功能与CMD相似,但是不会被覆盖 格式: ENTRYPOINT ["executable","param1","param2"] 示例: ENTRYPOINT ["/bin/bash"]
|
LABEL
1 2 3 4 5
| 用于为镜像添加元数据 格式: LABEL <key>=<value> 示例: LABEL version="1.0" description="这是一个 Web 服务器" by="IT 笔录"
|
ENV
1 2 3 4 5
| 设置环境变量 格式: ENV <key> <value> 示例: ENV myName John Doe
|
EXPOSE
1 2 3 4 5
| 指定于外界交互的端口 格式: EXPOSE <port> 示例: EXPOSE 80 443
|
VOLUME
1 2 3 4 5 6 7 8 9 10 11
| Docker的数据持久化主要有两种方式: bind mount volume Docker的数据持久化即使数据不随着container的结束而结束,数据存在于host机器上——要么存在于host的某个指定目录中(使用bind mount),要么使用docker自己管理的volume(/var/lib/docker/volumes下)。 格式: VOLUME ["/path"] 示例: VOLUME ["/data"]
ps: 通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。
|
WORKDIR
1 2 3 4 5 6 7
| 工作目录,类似于 cd 命令 格式: WORKDIR /path/to/workdir 示例: WORKDIR /a (这时工作目录为/a) WORKDIR b (这时工作目录为/a/b) ps:通过 WORKDIR 设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都会在该目录下执行。在使用 docker run运行容器时,可以通过-w 参数覆盖构建时所设置的工作目录。
|
ARG
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 用于指定传递给构建运行时的变量 构建参数和ENV的效果一样,都是设置环境变量。所不同的是,ARG 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。但是不要因此就使用 ARG 保存密码之类的信息,因为 docker history还是可以看到所有值的。 Dockerfile中的ARG指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令docker build中用--build-arg<参数名>=<值>来覆盖。 灵活的使用ARG指令,能够在不修改Dockerfile的情况下,构建出不同的镜像。 ARG指令有生效范围,如果在FROM指令之前指定,那么只能用于FROM指令中 格式: ARG参数名=默认值 eg: ARG DOCKER_USERNAME=library
FROM ${DOCKER_USERNAME}/alpine
ARG DOCKER_USERNAME=library
RUN set -x ; echo ${DOCKER_USERNAME}
FROM ${DOCKER_USERNAME}/alpine
ARG DOCKER_USERNAME=library
RUN set -x ; echo ${DOCKER_USERNAME}
|
ONBUILD
1 2 3 4 5 6 7
| 格式: ONBUILD [INSTRUCTION] eg: ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build --dir /app/src
ps:当所构建的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发
|
使用dockerfile启动
1 2 3 4 5 6 7 8 9 10 11 12 13
| 在Dockerfile文件这个目录下执行命令 docker build -t myubuntu:v1 . docker:docker命令。
build:编译。
-t:镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag,参考docker build命令详解。
myubuntu:生成镜像的名称。
v1:生成镜像的版本号。
.:点符号“.”代表当前
|
1 2 3 4 5 6 7 8 9 10 11 12
| c_id from_clue="", up_regno="", regno="", file = False, report = False, release = "判断", remand = False, write=True, delete=True, finish=True
|