Skip to main content

Dockerdile指令

[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会被覆盖.

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

ENTRYPOINT

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

ADD

  • ADD <src>...<dest>
  • ADD ["<src>"..."<dest>"](适用于文件路径中有空格的情况)
  • ADD包含类似tar的解压功能

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>...

使用env查看

ARG

同ENV一样设置环境变量 如版本号

与ENV的不同之处在于,

  1. ARG只对镜像起作用, ENV可以在构建出来的容器中使用env 查看到设置的环境变量
  2. ARG 在构建镜像的时候可以使用 --build-arg VERSION=2.0.0(例子) 修改变量 ~~ 使用 ipinfo version 查看 ~~

USER

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

USER daemon

ONBUILD [INSTRUCTION]

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