Docker Compose 完全指南
不要再为每个服务手动运行 Docker 命令了。
如果你运行的是现代应用程序,你可能拥有前端、后端、数据库和缓存。逐个运行这些服务既慢又容易出错。
Docker Compose 解决了这个问题。你可以在一个 YAML 文件中定义整个技术栈,并使用一条命令启动所有内容。
基础知识
- 不使用 Compose:你需要为四个容器运行四个独立的命令。
- 使用 Compose:你只需运行
docker compose up,一切就会启动。
重要概念
• 服务 (Services):每个服务代表一个容器。你可以使用 build 来构建自己的代码,或者使用 image 来使用预构建的工具,例如 PostgreSQL 或 Redis。
• 端口映射 (Port Mapping):使用 HOST:CONTAINER 格式。这会将你计算机的端口映射到容器端口。
• 环境变量 (Environment Variables):使用 environment 处理简单值,或使用 env_file 将敏感信息保存在单独的 .env 文件中。
• 数据卷 (Volumes):使用 volumes 来保护你的数据安全。如果没有 volumes,当容器停止时,你的数据库数据将会丢失。
• 网络 (Networks):Compose 会自动创建一个网络。容器之间通过服务名称(而不是 localhost)进行通信。
• 依赖关系 (Depends_on):这用于设置启动顺序。它告诉 Docker 在启动后端之前先启动数据库。请注意,它并不会等待数据库完全就绪。
面试技巧
- 何时使用
buildvsimage?对于自定义应用程序,使用build。对于来自 Docker Hub 的现有工具,使用image。 - 容器之间如何通信?它们在 Docker 网络中使用服务名称作为主机名。
- 如何避免数据丢失?务必为数据库使用具名数据卷 (named volumes)。
- 如何处理敏感信息?永远不要硬编码它们。请使用
.env文件。
应避免的常见错误
- 使用
latest标签:这会导致意外的更新。请使用具体的版本号,例如postgres:16。 - 使用
localhost:容器无法通过localhost相互访问。请使用服务名称。 - 缺少健康检查 (Healthchecks):使用 healthchecks 来监控你的服务是否真正准备好工作。
来源:https://dev.to/adityaguptareal/docker-compose-complete-guide-1gac