docker file 包含一系列命令行,docker通过该文件组织生成镜像,一个docker file文件主要包括四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
以一个dockerfile为例:
Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大
基本的命令内容
FORM:指定基础镜像,必须为第一个命令
1
2
3
4
5
6# 格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
# 例如:
FROM node:alpine同一个镜像可能有不同大小版本,不同的tag表示基于不同的base image(以python3.9.6 镜像为例)
完整版
alpine 基于alpine linux的docker镜像,特点就是容量小,适合作为基础镜像
- 缺少GNU C Library (glibc)
- 缺少的软件过多,构建时间长
Alpine 是众多 Linux 发行版中的一员,和 CentOS、Ubuntu、Archlinux之类一样,只是一个发行版的名字,号称小巧安全,有自己的包管理工具 apk
Debian Buster 基于Debian linux的docker镜像
slim 即瘦身版本,删去了部分通用包支持
- python:slim-buster是大多数Python用例的良好基础镜像
RUN: 构建镜像是执行的命令(支持两种执行方式)
1
2
3
4
5
6# shell执行
# 格式:
RUN <command>
# exec执行
# 格式:
RUN ["command", "param1", "param2"]ADD/COPY:将本地文件添加到docker镜像中
1
2
3ADD <src> <dest>
# 例如:
COPY . /dataWORKDIR:切换工作目录,即容器启动后的pwd,当前目录
1
2
3
4# 格式:
WORKDIR path
# 例如:
WORKDIR . /dataCMD: 在容器启动后执行相关命令
1
2
3# 格式:
CMD ["executable","param1","param2"]
CMD command param1 param2- 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
参数名和参数值相连,分别为列表中的两个不同项,以gunicorn为例
1
gunicorn MainWebApp:app -c gunicorn.conf.py -t 100
等价于
1
CMD ["gunicorn", "MainWebApp:app", "-c", "gunicorn.conf.py", ""-t", "100"]
列表中的参数和命令一定要使用双引号