Docker--Docker Compose(容器编排)_docker compose是干什么的
什么是 Docker Compose
Docker Compose是Docker官方的开源项目,是一个用于定义和运行多容器Docker应用程序的工具。
- 服务(Service):在Docker Compose中,一个服务实际上可以包括若干运行相同镜像的容器实例,代表一个应用的容器。例如,一个Web应用、数据库等都可以被视为一个服务。
- 项目(Project):由一组关联的应用容器组成的一个完整业务单元。在docker-compose.yml文件中定义,整个docker-compose.yml文件定义一个项目。Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。
核心功能
- 定义和运行多容器应用:通过docker-compose.yml文件,用户可以定义多个容器的配置信息,包括容器之间的依赖关系、网络配置、数据卷管理等。然后,只需一个命令(如docker-compose up),就可以创建并启动所有定义的容器。
- 容器编排:Docker Compose支持容器的编排,可以根据容器的依赖关系自动启动和停止容器,确保应用在运行时具有正确的环境。
- 网络配置:Docker Compose支持自定义网络配置,使得容器之间的通信更加灵活和可靠。服务之间可以通过网络通信,Compose会自动创建网络。
- 数据卷管理:Docker Compose支持数据卷的挂载和管理,可以轻松地共享和持久化容器数据。
docker-compose.yml文件
docker-compose.yml 文件是 Docker Compose 的核心配置文件,用于定义和运行多容器 Docker 应用程序。
这个文件遵循 YAML格式,包含了一系列关于服务、网络、卷等配置的信息。
以下是一个基本的 docker-compose.yml 文件示例,以及一些关键字段的解释:
version: \'3.8\' # 指定 Compose 文件的格式版本services: # 定义服务(容器)的列表 web: image: nginx:latest # 指定容器使用的镜像 ports: - \"80:80\" # 将主机的80端口映射到容器的80端口 volumes: - ./html:/usr/share/nginx/html # 将主机的./html目录挂载到容器的/usr/share/nginx/html目录 networks: - mynetwork # 指定容器使用的网络 db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example # 设置环境变量 volumes: - db_data:/var/lib/mysql # 使用命名卷存储数据库数据 networks: - mynetworknetworks: # 定义自定义网络 mynetwork: driver: bridge # 使用桥接网络模式volumes: # 定义命名卷 db_data:
在这个示例中:
- version 字段指定了 Compose 文件的版本。不同版本的 Compose 文件支持不同的配置选项。(最新版本使用的是name,version已经被舍弃)
- services 字段下定义了一个或多个服务(容器)。在这个例子中,定义了两个服务:web 和 db。
- image 字段指定了容器使用的 Docker 镜像。
- ports 字段定义了端口映射。
- volumes 字段用于数据持久化或数据共享,可以挂载主机目录到容器目录,或使用命名卷。
- environment 字段用于设置环境变量。
- networks 字段指定了容器使用的网络。
- networks 字段定义了一个或多个自定义网络。在这个例子中,定义了一个名为 mynetwork 的桥接网络。
- volumes 字段定义了一个或多个命名卷。在这个例子中,定义了一个名为 db_data 的卷,用于存储 MySQL 数据库的数据。
注意,YAML 文件对缩进非常敏感,因此请确保每个字段都正确缩进。
此外,根据实际需求,您可以添加更多配置选项或自定义服务、网络和卷。
详细参考官方文档:https://docs.docker.com/reference/compose-file/version-and-name/
docker compose 常用命令
- docker-compose up:创建并启动容器。
- docker-compose down:停止并删除容器、网络和卷(如果使用–volumes选项)。
- docker-compose start:启动服务。
- docker-compose stop:停止服务。
- docker-compose restart:重启服务。
- docker-compose logs:查看容器日志。
- docker-compose ps:列出所有容器。
- docker-compose config:检查docker-compose.yml文件的配置。
详细参考官方文档:https://docs.docker.com/reference/cli/docker/compose/
Docker Compose 基本操作
创建一个目录并进入到该目录下:
mkdir -p /data/ahri/compose/basecd /data/ahri/compose/base
创建一个yml文件
vi docker-compose.yml
编写配置文件,注意,格式一定要正确
name:test_composeservices:web:image: nginx:1.24.0environment:TEST: 1ports:- 8979:80networks:- mytestnet volumes: - ./mynginxhome:/usr/share/nginx/html depends_on: mysql: condition: service_healthy redis: condition: service_healthy mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: \"bit@123\" networks: - mytestnet volumes: - /data/maxhou/mysqldata/varlib/:/var/lib/mysql healthcheck:test: mysql --user=root --password=\'bit@123\' -e \"SELECT 1;\"interval: 10stimeout: 5sretries: 10 redis: image: redis:7 networks: - mytestnet healthcheck: test: redis-cli ping interval: 10s timeout: 5s retries: 10networks:mytestnet:
通过该命令查看配置文件是否出现错误:
docker compose config
创建首页目录,编辑首页内容:
mkdir -p ./mynginxhomecd ./mynginxhomeecho \"Test Docker Compose\" > index.html
启动服务:
docker compose up -d

查看运行的容器:

通过浏览器测试访问:

进入nginx容器查看环境变量TEST:
docker exec -it test_compose-web-1 bash

停止服务:
docker compose stop

启动服务:
docker compose start

删除服务:
docker compose down

配置文件解析
当前项目的命名:


设置镜像为nginx:1.23.4 ,环境变量为TEST,端口映射为8080,连接网络为mytestnet,映射卷为mynginxhome;
依赖关系分别是mysql和redis;condition可以设置满足依赖项条件;
mysql和redis启动前都会进行健康检查,只有健康了才满足该条件;

镜像为mysql:5.7 ,并设置密码;连接网络mytestnet;映射卷为varlib;
healthcheck就是健康检查:通过test进行测试,规定时间为10s;错误超时不过5s,重试次数为10 ;
redis也是跟mysql配置服务相同;

通过networks来创建一个docker network.
Docker部署WordPress
WordPress
WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。
WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客。
利用docker compose进行部署
1.编写yml配置文件
对项目进行命名:


服务db:创建镜像mysql 存储卷为db_data,设置环境变量,最后进行健康检查;
restart定义平台在容器终止时应用的策略。
always:该策略始终重新启动容器,直到将其删除。

name: docker_WordPressservices: db: image: mysql:5.7 volumes: - ./db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: mywordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress healthcheck: test: mysql --user=root --password=\'mywordpress\' -e \"SELECT 1;\" interval: 10s timeout: 5s retries: 10 wordpress: depends_on: db: condition: service_healthy image: wordpress:latest ports: - \"8081:80\" restart: always volumes: - ./wordpress:/var/www/html environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress
通过该命令对配置文件进行自动检查,直到没有报错:
docker compose config

可以看到,如果我们网络没有创建一个docker network,那么会自动配置一个默认的网络
通过浏览器访问ip:

配置参数,点击安装.
进入容器,查看我们数据库存储的数据:
docker exec -it docker_wordpress-db-1 bashmysql -u wordpress -p

use wordpress;


查看使用者:
select user_login from wp_users;
可以看到我们数据是放到我们的数据库中了.
退出,并释放空间:
docker compose down


