文章目录
- 1. 什么是Dockerfile
- 2. Dockerfile的基本结构
-
- 2.1 基础镜像(FROM)
- 2.2 维护者信息(MAINTAINER 或 LABEL)
- 2.3 工作目录(WORKDIR)
- 2.4 复制文件(COPY或ADD)
-
- 2.4.1 COPY指令
- 2.4.2 ADD指令
- 2.4.3 COPY指令和ADD指令的主要区别
- 2.4.4 优先使用COPY指令还是ADD指令
- 2.5 运行命令(RUN)
- 2.6 设置环境变量(ENV)
- 2.7 暴露端口(EXPOSE)
- 2.8 容器启动时默认执行的命令(CMD或ENTRYPOINT)
-
- 2.8.1 CMD指令
- 2.8.2 ENTRYPOINT指令
- 2.8.3 CMD指令和ENTRYPOINT指令的主要区别
- 2.8.4 docker run命令行指定参数时CMD指令和ENTRYPOINT指令的区别
-
- 2.8.4.1 CMD
- 2.8.4.2 ENTRYPOINT
- 3. 使用Dockerfile自定义镜像示例
-
- 3.1 创建Python文件
- 3.2 编写Dockerfile文件
- 3.3 构建镜像
- 3.4 启动容器
- 4. 主流编程语言和中间件的基础Docker镜像
-
- 4.1 编程语言
- 4.2 中间件
- 4.3 带有slim后缀的镜像与没有slim后缀的镜像的区别
- 5. 编写Dockerfile的最佳实践
-
- 5.1 选择合适的基础镜像
-
- 5.1.1 使用官方镜像
- 5.1.2 选择轻量级镜像
- 5.2 多阶段构建
- 5.3 减少镜像层数
- 5.4 优化镜像体积
-
- 5.4.1 清理缓存
- 5.4.2 合并指令
- 5.5 遵循单一职责原则
- 5.6 使用标签和环境变量
- 5.7 使用 .dockerignore文件
- 6. 构建镜像时可能遇到的问题
-
- 6.1 问题呈现
- 6.2 问题产生的原因
- 6.3 解决方法
1. 什么是Dockerfile
简单来说,Dockerfile 就是用来自定义镜像的
Dockerfile 是一个用于定义和构建 Docker 镜像的文本文件。Dockerfile 中包含一系列指令和参数,用于描述镜像的构建过程,包括基础镜像的选择、软件包的安装、文件的复制、环境变量的设置等
2. Dockerfile的基本结构
2.1 基础镜像(FROM)
每个 Dockerfile 的第一条指令必须是 FROM,用于指定构建新镜像所基于的基础镜像。例如:
FROM ubuntu:22.04
2.2 维护者信息(MAINTAINER 或 LABEL)
指定镜像的维护者信息。 MAINTAINER 指令已被弃用,推荐使用 LABEL 指令。例如:
LABEL maintainer="yourname@example.***"
2.3 工作目录(WORKDIR)
进入容器内部时默认的目录就是工作目录
设置容器内的工作目录,后续的 COPY、RUN 等指令都会在这个目录下执行。例如:
WORKDIR /app
- 可以在 Dockerfile 中多次使用
WORKDIR指令。每次使用都会更改当前的工作目录 - 如果指定的目录不存在,
WORKDIR会自动创建该目录
2.4 复制文件(COPY或ADD)
如果想复制多个文件到镜像中,可以使用多个 COPY 指令