What is Docker Compose? | Docker Docs
Docker Compose入门
什么是Docker Compose
Docker Compose 是docker生态中的一个组件,用来编排(定义和运行等)多个容器组成的应用,总而言之,由Compose管理的是一个项目(project),该项目是由一组关联的应用容器组成。它允许用户通过一个单独的 docker-compose.yaml 声明式的模板文件 来定义一组相关容器的项目(project)。
主要功能
- 多容器环境管理:允许您在一个文件中定义多个容器,并通过一个命令启动或停止这些容器。
- 服务依赖管理:支持定义容器之间的依赖关系,确保它们按正确的顺序启动。
- 独立的运行环境:为每个项目创建独立的容器环境,避免不同项目之间的相互影响。
- 简化的环境配置:通过一个简单的 YAML 文件配置所有服务,便于版本控制和团队协作。
项目概念
- 项目(project):由一组关联的应用容器组成的一个完整的业务应用
- 服务(services):一个抽象的概念,表示项目中的某个服务
- 容器(container):指服务的副本,每个服务可以由多个容器组成
我们可以理解为 docker-compose 针对的对象是 项目;在项目中编排管理 服务,而容器是服务的副本。
Docker compose和Dockerfile
Dockerfile提供了构建容器镜像的指令,而Compose文件定义了正在运行的容器。通常,Compose文件会引用Dockerfile来构建用于特定服务的映像。
使用Docker Compose的基本步骤:
- 使用 Dockerfile 定义应用程序的镜像
- 使用 Docker Compose 声明式的配置文件 定义组成应用程序的服务,容器的配置
- 执行 docker-compose up 命令 启动整个项目
- 执行 docker-compose down 命令 停止 整个项目
安装Docker-compose环境
1.从 Docker Compose 的官方 GitHub 仓库下载最新版本的 Docker Compose 二进制文件。
[root@localhost ~]# curl -L https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
2.下载完成后,为二进制文件添加执行权限。
[root@localhost ~]# chmod a+x /usr/local/bin/docker-compose
3.运行以下命令以验证 Docker Compose 是否正确安装。
[root@localhost ~]# docker-compose --version
Docker Compose version v2.26.1
编写Docker compose文件
YAML文件格式:
YAML是一种数据序列化格式,YAML语法具有以下特点:
- 大小写敏感;
- 使用缩进表示层级关系;
- 缩进只能使用空格,不能使用Tab键,不要求空格个数,但相同层级应当左对齐(一般为2个或4个空格)
- 使用符号#表示注释,YAML只有行注释;
- 字符串可以不用引号标注;
- 每个冒号与它后面所跟的参数之间都需要有一个空格;
Docker compose文件结构:
示例:
version: '3' # 定义 Docker Compose 文件的版本
services: # 定义应用的服务
web: # 服务名称
image: nginx:latest # 使用的镜像
ports: # 端口映射
- "80:80"
volumes: # 卷挂载
- ./html:/usr/share/nginx/html
networks: # 网络配置
- frontend
app:
build: ./app # 使用 Dockerfile 构建镜像
ports:
- "8000:8000"
depends_on: # 服务依赖
- db
environment: # 环境变量
- FLASK_ENV=development
networks:
- frontend
- backend
db:
image: mysql:5.7 # 使用的镜像
environment: # 环境变量
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: example_db
volumes: # 卷挂载
- db_data:/var/lib/mysql
networks:
- backend
networks: # 定义网络
frontend:
backend:
volumes: # 定义卷
db_data:
详细说明:
版本定义:
version: '3'
定义 Docker Compose 文件的版本。不同版本支持的功能可能不同,常用的版本包括 '2' 和 '3'。
服务定义:
services:
service_name:
...
通过 services 字段定义多个服务,每个服务包含镜像、端口、环境变量、依赖等配置。
镜像与构建:
image: nginx:latest
build: ./path_to_dockerfile_directory
image:指定使用的 Docker 镜像,可以是本地镜像或从 Docker Hub 拉取。
build:指定使用 Dockerfile 构建镜像,路径可以是相对路径或绝对路径。
端口映射:
ports:
- "宿主机端口:容器端口"
例如 - "80:80",将宿主机的 80 端口映射到容器的 80 端口。
卷挂载:
volumes:
- "宿主机路径:容器路径"
例如 - ./html:/usr/share/nginx/html,将宿主机的 ./html 目录挂载到容器的 /usr/share/nginx/html 目录。
环境变量:
environment:
- ENV_VAR_NAME=value
例如 - FLASK_ENV=development,设置环境变量 FLASK_ENV 的值为 development。
服务依赖:
depends_on:
- service_name
例如 depends_on: - db,表示该服务依赖 db 服务,db 服务会先启动。
网络配置:
networks:
- network_name
通过 networks 字段定义服务所属的网络。网络可以在文件底部统一定义。
卷定义:
volumes:
volume_name:
在文件底部统一定义卷,用于持久化存储。
Docker compose基本操作命令
启动服务
docker-compose up
该命令会读取当前目录下的 docker-compose.yml 文件,创建并启动所有定义的服务。所有容器的输出会显示在当前终端中。
如果希望在后台运行这些服务,可以使用 -d 选项:
docker-compose up -d
停止服务
docker-compose down
该命令会停止所有由当前配置文件创建的容器,并移除它们,同时也会移除网络和卷(除非使用了 --volumes 选项)。
查看服务状态
docker-compose ps
显示所有由 docker-compose.yml 文件定义的服务的当前状态。
查看服务日志
docker-compose logs
查看所有服务的日志输出。如果只希望查看某个特定服务的日志,可以指定服务名称:
docker-compose logs <service_name>
构建或重建服务
docker-compose build
根据 Dockerfile 重新构建服务镜像。如果配置文件或 Dockerfile 发生了变化,建议执行这个命令。
使用 --no-cache 选项可以在构建时不使用缓存:
docker-compose build --no-cache
启动或重启服务
启动已停止的服务:
docker-compose start
重启运行中的服务:
docker-compose restart
重启指定服务:
docker-compose restart <service_name>
停止服务
docker-compose stop
停止所有运行中的服务。
docker-compose stop
扩展服务
docker-compose up --scale <service_name>=<num>
例如,将 web 服务扩展为 3 个实例:
docker-compose up --scale web=3
删除停止的容器
docker-compose rm
删除所有停止的服务容器。如果希望强制删除而不提示确认,可以使用 -f 选项:
docker-compose rm -f
查看容器使用的资源
docker-compose top
查看 Docker Compose 版本
docker-compose --version
查看当前安装的 Docker Compose 版本。
使用Docker compose部署WordPress
1.创建项目目录;
[root@localhost ~]# mkdir -p /app/Docker-Compose/my_wordpress
2.编写 项目的 Docker Compose 声明式的配置文件;
[root@localhost ~]# cd /app/Docker-Compose/my_wordpress
[root@localhost my_wordpress]# vim docker-compose.yaml
# Docker Compose 指定版本格式
version: '3'
services:
# 服务1:db, db服务的容器配置
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
# 服务2:wordpress,wordpress服务的容器配置
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
# Docker Compose 使用数据卷的定义
volumes:
db_data: {}
3.使用 docker-compose 启动 声明式的容器编排配置文件;
[root@localhost my_wordpress]# docker-compose up -d
4.访问测试
5.使用 docker-compose 删除 资源(容器、网络、数据卷等);默认不删除数据卷资源;
[root@localhost my_wordpress]# docker-compose down -v