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"] |
💡 Tip:RUN是构建时执行,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_PASSWORD ≠ mysql_password |
⚠️ 值不要加引号 | MYSQL_PASSWORD=123456 ✅,MYSQL_PASSWORD="123456" ❌ |
⚠️ 需要重启容器 | 修改 .env 后需要 docker compose up -d 重启生效 |
四、常用命令速查
4.1 Dockerfile 相关
4.2 docker-compose 相关
4.3 区分 exec 和 run
命令 | 作用 | 适用场景 |
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安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- Author:迷途
- URL:http://blog.ortech.nyc.mn/%E7%9F%A5%E8%A1%8C%E5%90%88%E4%B8%80/docker2
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!





