# Dockerfile
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 first-build ./config
//希望生成镜像标签为firstBuild的从./config目录下读取Dockerfile文件
-t 指定生成镜像的标签信息
# 好的实践
- 精简镜像用途,让每一个的镜像用途比较集中,单一,避免造成大而复杂,多功能的镜像
- 正确的使用版本。特别是基础镜像的版本
# 注意
- 出于安全考虑,几乎所有的官方制作的镜像都没有SSH服务,无法使用用户名和密码直接登录