Docker-Dockerfile

204 阅读3分钟

Dockerfile是一个文本格式的配置文件。可以使用Dockerfile来快速创建自定义的镜像。

基本结构

使用#开头写注释。

Dockerfile分为四部分:基础镜像 + 维护者信息 + 镜像操作指令 + 容器启动时执行指令

指令说明

FROM 指定所创建镜像的基础镜像
MAINTAINER 指定维护者信息
RUN 运行命令
CMD 指定启动容器时默认执行的命令
LABEL 指定生成镜像的元数据标签信息
EXPOSE 声明镜像内服务所监听的端口
ENV 指定环境变量
ADD 复制指定的<src>路径下的内容到容器的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压的<dest>路径下
COPY 复制本地主机的<src>路径下的内容到镜像中的<dest>路径下;一般情况下推荐使用COPY,而不是ADD
ENTRYPOINT 指定镜像的默认入口
VOLUMN 创建数据卷挂载点
USER 指定运行容器时的用户名或UID
WORKDIR 配置工作目录
ARG 指定镜像内使用的参数(例如版本号信息)
ONBUILD 配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令
STOPSIGNAL 容器退出的信号值
HEALTHCHECK 如何进行健康检查
SHELL 指定使用shell时的默认的shell类型

FROM

指定所创建镜像的基础镜像。格式:

FROM<image>
or
FROM<image>:<tag>
or
FROM<image>@<digest>

eg:


同一个Dockerfile中可以多次使用FROM指令

RUN

RUN<command>
or
RUN["executable","param1","param2"]  <=此处必须为双引号
//可以使用 \ 来换行

eg:

RUN apt-get update \
    && apt-get install -y lib-dev \
    && rm -rf /var/cache/apt

CMD

CMD ["executable","param1","param2"]  exec执行 <=推荐写法
or
CMD command1 param1 param2 /bin/sh 中执行

每个Dockerfile只能有一条CMD命令,如果指定了多条命令,只有最后一条会被执行

EXPOSE

声明镜像内服务所监听的端口

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

eg:

EXPOSE 22 808443

注意:该指令只是起到声明的作用并不会自动完成端口映射。还是需要在启动容器docker run时加上-P或者-p参数

ADD

ADD 复制指定的<src>路径下的内容到容器的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压的<dest>路径下

ADD <src> <dest>
//src可以是URL,或者是绝对路径或者相对路径
//dest可以是镜像内的绝对路径,或者是相对于(WORKDIR)的相对路径

eg:

ADD ./src /app

COPY

COPY 复制本地主机的<src>路径下的内容到镜像中的<dest>路径下;目标路径不存在时,会自动创建。

COPY <src> <dest>

VOLUME

创建一个数据卷的挂载点

VOLUME["/data"]

创建镜像

编写好Dockerfile之后,可以使用docker build命令来创建镜像

docker build -t firstBuild ./config
//希望生成镜像标签为firstBuild的从./config目录下读取Dockerfile文件
-t 指定生成镜像的标签信息

好的实践

  • 精简镜像用途,让每一个的镜像用途比较集中,单一,避免造成大而复杂,多功能的镜像
  • 正确的使用版本。特别是基础镜像的版本

注意

  • 出于安全考虑,几乎所有的官方制作的镜像都没有SSH服务,无法使用用户名和密码直接登录