6.Docker Compose简介和使用
Docker Compose简介
Docker Compose 是 Docker 官方提供的一个工具,用于定义和运行多容器的 Docker 应用。它允许你通过一个单独的文件(通常是 docker-compose.yml)来配置应用的服务、网络、卷等,并使用简单的命令启动、停止和管理多个 Docker 容器。
Docker Compose 主要特点
- 容器编排: Docker Compose 提供了容器编排的能力,可以通过一个文件定义应用的多个服务,使得这些服务可以协同工作。这包括容器的启动顺序、容器之间的通信、卷的共享等。
- 声明式配置: 使用 YAML 文件进行配置,以声明式的方式描述应用的服务、网络、卷等。这种声明式的配置方式使得应用的结构和依赖关系更加清晰,并且易于维护。
- 单一命令管理多容器应用: Docker Compose 提供了一组简单的命令,如
docker-compose up(启动应用)、docker-compose down(停止应用)、docker-compose ps(查看应用状态)等,使得管理多容器的应用变得简单。 - 可移植性: Docker Compose 配置文件可以轻松在不同环境中共享,团队成员或其他部署环境可以使用相同的配置文件来启动应用,确保在不同环境中的一致性。
- 本地开发和测试: Docker Compose 可以用于在本地开发和测试环境中部署整个应用,使得开发人员可以在本地模拟生产环境的多容器应用。
- 支持多环境变量: Docker Compose 支持使用环境变量来配置容器,可以在不同的环境中使用不同的配置值。
yml文件格式
文件简单示例:
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
app:
image: my-app:latest
environment:
- DATABASE_URL=postgres://user:password@db:5432/mydatabase
db:
image: postgres:latest
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydatabase
主要参数:
version: '3': 指定了 Docker Compose 文件的版本。版本 3 是当前稳定的版本,定义了一组支持多容器应用的配置。services: 这是一个包含所有服务定义的部分。web服务: 使用了 Nginx 镜像,将容器的 80 端口映射到主机的 8080 端口。
app服务: 使用了自定义的my-app镜像,设置了一个环境变量DATABASE_URL,用于指定连接到数据库的 URL。db服务: 使用了 PostgreSQL 镜像,设置了三个环境变量,分别指定 PostgreSQL 数据库的用户名、密码和数据库名。
版本(version)
version: '3' #版本
Docker Compose 文件的版本。不同版本的 Docker Compose 支持不同的特性和语法。常见的版本包括 '2' 和 '3',其中 '3' 是当前稳定版本。在配置文件的顶层,version 字段是必需的。
服务定义(services)
services:
web: #服务名
image: nginx:latest #定义运行的镜像名和版本(tag)
ports: #映射端口字段
- "8080:80" #映射80到8080
services 字段用于定义每个服务,每个服务都是应用中的一个组件。在示例中,定义了一个名为 web 的服务,使用了 Nginx 镜像,将容器的 80 端口映射到主机的 8080 端口。
镜像(image)
image: nginx:latest
image 字段指定了使用的 Docker 镜像,可以是官方仓库的镜像(如 nginx),也可以是自定义镜像。在示例中,使用了 Nginx 的最新版本。
端口映射(ports)
ports:
- "8080:80"
ports 字段定义了容器和主机之间的端口映射关系。在示例中,将容器的 80 端口映射到主机的 8080 端口。
环境变量(environment)
environment:
- DATABASE_URL=postgres://user:password@db:5432/mydatabase
environment 字段用于设置容器运行时的环境变量。在示例中,设置了一个名为 DATABASE_URL 的环境变量,用于指定连接到数据库的 URL。
工作目录(working directory)
working_dir: /app
working_dir 字段设置了容器的工作目录。在示例中,将容器的工作目录设置为 /app。
挂载卷(volumes)
volumes:
- /path/on/host:/path/in/container
volumes 字段用于定义卷的挂载关系,将主机的目录挂载到容器中。在示例中,将主机上的 /path/on/host 目录挂载到容器中的 /path/in/container 目录。