Last edited time
Jul 12, 2026 06:54 AM
password
AI summary
type
Post
status
Published
date
Jul 12, 2026
slug
docker2
summary
tags
工具
开发
建站
Python
category
知行合一
icon
😀
前言: Dockerfile 与 docker-compose.yml详细介绍。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
 

📚 Docker 笔记:Dockerfile 与 docker-compose.yml

一、Dockerfile(镜像构建说明书)

1.1 什么是 Dockerfile?

Dockerfile 是一个文本文件,里面写了一系列指令,告诉 Docker 如何一步步构建出你的应用镜像。可以把它理解为“安装菜谱”

1.2 核心指令(必记 6 个)

指令
作用
示例
FROM
指定基础镜像(相当于操作系统)
FROM python:3.12-slim
WORKDIR
设置容器内的工作目录
WORKDIR /app
COPY
把文件从宿主机复制到镜像里
COPY . /app
RUN
构建镜像时执行的命令(装依赖)
RUN pip install -r requirements.txt
EXPOSE
声明容器监听的端口(文档作用)
EXPOSE 5000
CMD
容器启动时执行的命令(最后一行)
CMD ["python", "app.py"]
💡 TipRUN 是构建时执行,CMD 是启动时执行,不要搞混。

1.3 通用模板(Python 项目)

1.4 其他常用指令

指令
作用
示例
ENV
设置环境变量(写死在镜像里)
ENV TZ=Asia/Shanghai
ARG
构建时传参(不在镜像里保留)
ARG VERSION=1.0
ADD
增强版 COPY(支持解压压缩包)
ADD app.tar.gz /app/
ENTRYPOINT
固定命令,配合 CMD 使用
ENTRYPOINT ["python"]
USER
切换运行用户(安全相关)
USER nobody

1.5 .dockerignore 文件

.gitignore 一样,排除不需要打包进镜像的文件,加快构建速度、减小镜像体积

二、docker-compose.yml(多容器编排说明书)

2.1 什么是 docker-compose.yml?

一个 YAML 格式的文件,用来定义和运行多个 Docker 容器。把多个容器(如 Web 应用 + 数据库)作为一个项目统一管理。

2.2 核心结构(骨架)

2.3 通用模板(Python + MySQL)

2.4 常用配置项速查表

配置项
作用
示例
image:
使用现成镜像
image: mysql:8.0.45
build:
用 Dockerfile 构建
build: .
ports:
端口映射(宿主机:容器)
- "5000:5000"
volumes:
挂载目录(宿主机:容器)
- ./data:/app/data
environment:
环境变量
- MYSQL_ROOT_PASSWORD=123
depends_on:
启动顺序依赖
- mysql-db
restart:
重启策略
always / unless-stopped
networks:
加入哪个网络
- app-network
command:
覆盖默认启动命令
command: python manage.py run
healthcheck:
健康检查
见上面 MySQL 例子

2.5 固定写法 vs 自定义

类型
例子
固定写法
services:image:ports:volumes:environment:networks:depends_on:restart:healthcheck:driver: bridge
自定义
服务名、端口号、密码、数据库名、挂载路径、网络名

三、.env 文件(管理敏感信息)

3.1 什么是 .env 文件?

一个用来集中管理环境变量的文件,避免把密码、密钥等敏感信息写死在 docker-compose.yml 里。

3.2 文件格式

3.3 在 docker-compose.yml 中引用 .env

方式一:用 env_file 读取
方式二:用 ${} 引用单个变量
方式三:启动命令指定

3.4 完整示例(使用 .env 优化)

.env 文件:
docker-compose.yml 文件:

3.5 .env 文件注意事项

注意点
说明
⚠️ 不要提交到 Git
添加到 .gitignore,避免密码泄露
⚠️ 变量名区分大小写
MYSQL_PASSWORDmysql_password
⚠️ 值不要加引号
MYSQL_PASSWORD=123456 ✅,MYSQL_PASSWORD="123456"
⚠️ 需要重启容器
修改 .env 后需要 docker compose up -d 重启生效

四、常用命令速查

4.1 Dockerfile 相关

4.2 docker-compose 相关

4.3 区分 execrun

命令
作用
适用场景
docker compose exec python-app bash
进入正在运行的容器
日常调试、查看日志
docker compose run --rm python-app sh
临时新建容器执行命令
测试配置、排查启动失败

五、检查清单(写完后自查)

Dockerfile 检查清单

FROM 指定了正确的镜像
WORKDIR 设置了工作目录
COPY requirements.txt .COPY . . 之前(利用缓存)
RUN pip install 用了国内源加速
EXPOSE 声明了正确的端口
CMD 写了正确的启动命令
.dockerignore 文件排除不必要文件

docker-compose.yml 检查清单

缩进用 2 个空格,不是 Tab
所有服务名用中划线连接(如 my-app
MySQL 和 Python 的密码、数据库名一致
Python 的 MYSQL_HOST 填的是 MySQL 服务名
端口映射左边不冲突(如 5000:5000
数据卷路径在 Windows 下用 D:/xxx,Linux 下用 /xxx
生产环境用 .env 管理密码,并加入了 .gitignore

 

🤗 总结归纳

文件
作用
谁会用
Dockerfile
构建镜像的说明书
docker build
docker-compose.yml
运行容器的编排说明书
docker compose up
.env
存储敏感配置
docker-compose.yml 引用

这份笔记你随时可以翻看,以后写 Dockerfile 和 docker-compose.yml 就照着模板改就行了!😊
 
💡
有关Docker安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
 
📚 Docker 多技术栈模板大全Docker容器化部署与迁移
Loading...
迷途
迷途
OR的博客,用知识和技术创造未来!!!
Announcement
🎉OR科技,用心服务🎉
-- 分享知识,点亮生活 ---
保持热爱追逐远方
路虽远行则将至
事虽难不为不成
为之则易不为则难
👏欢迎您的来访👏
距离2026年春节仅有
-- 免责声明 ---
⚠️ 本站内容仅代表个人观点,可以转载,但请注明出处。 ⚠️ 本站分享内容仅供学习参考使用,请勿用于其他用途。