目录

Docker-Docker-Compose容器编排

Docker–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:
      - mynetwork

networks:  # 定义自定义网络
  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 文件对缩进非常敏感,因此请确保每个字段都正确缩进。
此外,根据实际需求,您可以添加更多配置选项或自定义服务、网络和卷。

详细参考官方文档:

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文件的配置。

详细参考官方文档:

Docker Compose 基本操作

创建一个目录并进入到该目录下:

mkdir -p /data/ahri/compose/base
cd /data/ahri/compose/base

创建一个yml文件

vi docker-compose.yml

编写配置文件,注意,格式一定要正确

name:test_compose
services:
	web:
		image: nginx:1.24.0
		environment:
		TEST: 1
		ports:
			- 8979:80
		networks:
			- 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: 10s
			timeout: 5s
			retries: 10
	 redis:
		 image: redis:7
		 networks:
		 	- mytestnet
		 healthcheck:
			 test: redis-cli ping
			 interval: 10s
			 timeout: 5s
			 retries: 10
	networks:
		mytestnet:

通过该命令查看配置文件是否出现错误:

docker compose config

创建首页目录,编辑首页内容:

mkdir -p ./mynginxhome
cd ./mynginxhome
echo "Test Docker Compose" > index.html

启动服务:

docker compose up -d

https://i-blog.csdnimg.cn/direct/e965d49f443f49069f590a1af148c450.png

docker exec  -it test_compose-web-1 bash

https://i-blog.csdnimg.cn/direct/b4a8ca53c3df4bb1bd600752b118c7f5.png

docker compose stop

https://i-blog.csdnimg.cn/direct/779d70a625e240a8890e9470643051e0.png

docker compose start

https://i-blog.csdnimg.cn/direct/3dce93995f9146beae844f036d20c08f.png
删除服务:

docker compose down

https://i-blog.csdnimg.cn/direct/6a46c985299f4291924e9c29b0a04569.png

配置文件解析

当前项目的命名:
https://i-blog.csdnimg.cn/direct/e484db30a1594ace898096552921e630.png
https://i-blog.csdnimg.cn/direct/22c25ac8768743a6a119969ba39cd3a0.png
设置镜像为nginx:1.23.4 ,环境变量为TEST,端口映射为8080,连接网络为mytestnet,映射卷为mynginxhome;
依赖关系分别是mysql和redis;condition可以设置满足依赖项条件;
mysql和redis启动前都会进行健康检查,只有健康了才满足该条件;
https://i-blog.csdnimg.cn/direct/6402705870924e9f93ee09f4fb64c06b.png
镜像为mysql:5.7 ,并设置密码;连接网络mytestnet;映射卷为varlib;
healthcheck就是健康检查:通过test进行测试,规定时间为10s;错误超时不过5s,重试次数为10 ;

redis也是跟mysql配置服务相同;
https://i-blog.csdnimg.cn/direct/2ff8a4041c9244f98b2dde85cb7f4e28.png
通过networks来创建一个docker network.

Docker部署WordPress

WordPress

WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。
WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客。

利用docker compose进行部署

1.编写yml配置文件
对项目进行命名:
https://i-blog.csdnimg.cn/direct/ea790c9582494804a63cec3f8bd99331.png
https://i-blog.csdnimg.cn/direct/5ca236eb4edd43e5b1aa39b497e658dd.png
服务db:创建镜像mysql 存储卷为db_data,设置环境变量,最后进行健康检查;
restart定义平台在容器终止时应用的策略。
always:该策略始终重新启动容器,直到将其删除。

https://i-blog.csdnimg.cn/direct/a91ce4645599459d8c8188b531b03b95.png

name: docker_WordPress

services:
  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

https://i-blog.csdnimg.cn/direct/38cb81796b354806b5e3b38d8911aa9b.png
可以看到,如果我们网络没有创建一个docker network,那么会自动配置一个默认的网络

通过浏览器访问ip:
https://i-blog.csdnimg.cn/direct/236648dfa16c46a7b8848823b46ce4a2.png
配置参数,点击安装.

进入容器,查看我们数据库存储的数据:

docker exec -it docker_wordpress-db-1 bash
mysql -u wordpress -p

https://i-blog.csdnimg.cn/direct/c57097a7d2ae45fdafe2c4fe53220258.png

use wordpress;

https://i-blog.csdnimg.cn/direct/042fe97c6d0648f0878b2bc03aec91a0.png
https://i-blog.csdnimg.cn/direct/a57be7873f1c4de3bf6ee85610052def.png
查看使用者:

select user_login from wp_users

可以看到我们数据是放到我们的数据库中了.

退出,并释放空间:

docker compose down