Docker - Compose
Docker - Compose
Section titled “Docker - Compose”Docker Compose 是一种用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以通过一个 YAML 文件(通常是 docker-compose.yml)来配置应用程序的服务、网络和卷。然后,只需一个命令,您就可以从配置中创建并启动所有服务。
Compose 非常适合开发、测试和预生产环境,以及简单的生产部署。它简化了由多个相互连接的容器(例如,Web 服务器、数据库、缓存层)组成的应用程序的管理。
Docker Compose 安装
Section titled “Docker Compose 安装”对于 Windows 和 macOS 用户,Docker Compose 已作为 Docker Desktop 的一部分包含在内,无需单独安装。
对于 Linux 用户,Compose V2 作为 Docker CLI 的插件安装。如果您按照推荐的方法安装了 Linux 上的 Docker Engine(使用 docker-compose-plugin),那么它应该已经安装好了。
要验证您的安装并检查版本,请运行:
docker compose version注意:较旧的安装版本可能使用独立的 docker-compose 命令(带连字符)。本教程使用现代的 docker compose(带空格)语法。
创建 docker-compose.yml 文件
Section titled “创建 docker-compose.yml 文件”让我们创建一个简单的示例应用程序,包含一个 Web 服务(使用 Nginx)和一个数据库服务(使用 MySQL)。
在您的项目目录下创建一个名为 docker-compose.yml 的文件:
version: '3.9' # 指定 Compose 文件版本(可选,用于最新特性)
services: web: image: nginx:stable-alpine ports: - "8080:80" # 将主机端口 8080 映射到容器端口 80 volumes: - ./html:/usr/share/nginx/html:ro # 挂载本地 html 目录(只读) depends_on: - db networks: - app-network
db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: examplepassword MYSQL_DATABASE: myappdb MYSQL_USER: myappuser MYSQL_PASSWORD: myapppassword volumes: - db-data:/var/lib/mysql # 使用命名卷实现数据持久化 networks: - app-network
networks: app-network: driver: bridge
volumes: db-data: # 定义命名卷说明:
version: '3.9': 指定 Compose 文件格式版本。services:: 定义构成应用程序的容器。web:和db:: 服务的名称。image:: 指定服务使用的 Docker 镜像。ports:: 在主机和容器之间映射端口 (HOST:CONTAINER)。volumes:: 挂载路径或命名卷 (HOST_PATH/VOLUME_NAME:CONTAINER_PATH)。这里,./html被绑定挂载用于 Nginx 内容,而命名卷db-data用于 MySQL 数据持久化。depends_on:: 指定服务之间的依赖关系(确保db在web之前启动,但不保证db已准备就绪)。environment:: 设置容器内的环境变量(此处用于 MySQL 设置)。networks:(服务下):将服务连接到指定的网络。networks:(顶层):定义应用程序使用的网络(此处为使用默认bridge驱动的app-network)。volumes:(顶层):定义应用程序使用的命名卷(此处为db-data)。
您还需要创建一个本地 ./html 目录并放入一些内容(例如一个 index.html 文件),供 Nginx 服务使用。
使用 Docker Compose 运行应用程序
Section titled “使用 Docker Compose 运行应用程序”在终端中导航到包含 docker-compose.yml 文件的目录,并使用以下命令:
# 在后台创建并启动容器 (-d)docker compose up -d
# 查看服务状态docker compose ps
# 查看所有服务日志(或指定服务)docker compose logsdocker compose logs web
# 停止并移除文件中定义的容器、网络、卷docker compose down
# 停止服务但不移除docker compose stop
# 启动已停止的服务docker compose start执行 docker compose up -d 后,Compose 将会:
- 如果本地不存在所需镜像(
nginx、mysql),则拉取。 - 创建
app-network网络。 - 创建
db-data卷。 - 创建并启动
db和web容器,将它们连接到网络并设置卷/端口。
然后,您应该能够通过 http://localhost:8080 访问 Nginx 服务器。web 服务可以使用主机名 db 连接到数据库。