Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务,然后使用一个命令,就可以创建并启动所有服务。这对于开发、测试和部署分布式系统非常有用。
安装 Docker Compose
在 Linux 上安装
下载 Docker Compose 的二进制文件:
访问 Docker Compose release page 下载最新稳定版本的二进制文件。-
设置可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
-
验证安装:
docker-compose --version
在 macOS 和 Windows 上安装
对于 macOS,Docker Desktop for Mac 自带 Docker Compose。对于 Windows,Docker Desktop for Windows 同样内置了 Docker Compose。
Docker Compose 文件
Docker Compose 使用 YAML 文件来配置服务。这个文件默认命名为 docker-compose.yml
,并位于项目的根目录中。
基本结构
version: '3.8' # 指定 Compose 文件的版本
services: # 定义服务的列表
webapp: # 服务名称
image: nginx:latest # 使用的镜像
ports:
- "5000:80" # 端口映射
volumes:
- ./static:/usr/share/nginx/html # 卷挂载
常用指令
-
docker-compose up
:启动所有服务。 -
docker-compose down
:停止并移除所有容器、网络、镜像、卷(默认不删除卷)。 -
docker-compose ps
:列出所有运行中的容器。 -
docker-compose logs
:查看服务容器的输出。 -
docker-compose restart
:重启服务。
服务配置
镜像
- 使用 Docker Hub 或其他镜像仓库中的镜像。
- 也可以指定 Dockerfile 来构建镜像。
端口映射
将容器内的端口映射到宿主机上的端口,使得服务可以通过宿主机的端口访问。
卷(Volumes)
卷用于数据的持久化存储,并且可以在宿主机和容器之间共享。
依赖
使用 depends_on
来定义服务之间的依赖关系,确保服务启动的顺序。
环境变量
通过环境变量来配置服务,可以在 docker-compose.yml
文件中直接设置,也可以从外部文件导入。
网络
Docker Compose 会默认创建一个网络,使得服务之间可以互相通信。也可以自定义网络配置。
示例
一个简单的 Web 应用和数据库服务
version: '3.8'
services:
webapp:
image: nginx:latest
ports:
- "80:80"
depends_on:
- db
volumes:
- ./static:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
这个示例中,定义了两个服务:webapp
和 db
。webapp
依赖于 db
服务,并使用 Nginx 镜像来托管静态文件。db
服务使用 MySQL 镜像,并设置了一个环境变量来指定 root 用户的密码。同时,为 MySQL 设置了数据卷来持久化存储数据。