docker compose容器编排
1.compose简介
前面我们使用docker的时候,定义dockerfile,每次只能启动一个容器,然后微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启动,那么效率会非常低
使用docker compose可以轻松、高效的管理容器,可以一起运行多个容器
2.安装docker compose
2.1.安装compose
[root@docker01 ~]# yum -y install python2-pip [root@docker01 ~]# pip install --upgrade pip [root@docker01 ~]# pip install subprocess32 --upgrade --ignore-installed subprocess32 [root@docker01 ~]# pip install -i https://pypi.tuna.tsing.edu.cn/simple docker-compose
2.2.安装docker compose遇到的问题
1)pip版本问题
此报错说明pip的版本太低了 解决方法: [root@docker02 ~]# pip install --upgrade pip
2)subprocess32安装问题
没有安装subprocess32 [root@docker02 ~]# pip install subprocess32 --upgrade --ignore-installed subprocess32
2.3.version问题
ERROR: Could not find a version that satisfies the requirement docker-compose (from versions: none) ERROR: No matching distribution found for docker-compose 解决方法 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install docker-compose 如果不行再执行下面的命令 pip install -i https://pypi.tuna.tsing.edu.cn/simple docker-compose
2.4.requests报错
pip install --ignore-installed requests
3.docker compose常用命令
执行docker compose命令时要在yaml文件的目录执行
当使用up的时候用–参数,up后直接用参数
**语法格式:**docker compose 参数
参数:
ps:列出所有容器
[root@docker03 wordpress]# docker-compose ps
logs:查看服务日志输出
[root@docker03 wordpress]# docker-compose logs
port:打印绑定的公共端口
[root@docker03 wordpress]# docker-compose port wordpress 80 0.0.0.0:32768 此命令用来查看某一个端口映射到容器的那个端口,要查端口时前面要跟上服务的名称
build:构建或重新构建服务
[root@docker03 wordpress]# docker-compose build
- tart:启动指定服务已存在的容器
[root@docker03 wordpress]# docker-compose start wordpress
- stop:停止已运行的服务的容器
[root@docker03 wordpress]# docker-compose stop wordpress
rm:删除指定服务的容器
[root@docker01 wordpress]# docker-compose rm wordpress Going to remove wordpress_wordpress_1 Are you sure? [yN] y Removing wordpress_wordpress_1 ... done
up:构建、启动容器
docker-compose up
kill:杀掉容器
docker-compose kill wordpress
- pull系在服务进行
- scale:指定服务器运行容器的个数
docker-compose scale wordpress=3
run运行
docker-compose run web bash
4.docker-compose.yaml属性
version:指定docker-compose.yaml的写法格式
services:多个容器的集合
build:配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象,用于指定 Dockerfile 参数
command:覆盖容器启动后默认执行的命令
dns:配置dns服务
dns_search:配置dns搜索域
environment:环境变量
env_file:从文件中获取环境变量
expose:端口
images:服务所使用的的镜像
network_mode:设置网络模式
ports:对端口的定义
links:容器别名、容器互连
volume:卷挂载路径
logs:日志输出
5.docker-compose安装wordpress
5.1.编写docker-compose.yaml
1.准备compose目录 [root@docker03 wordpress]# mkdir /data2/wordpress/ 2.编写yaml文件 [root@docker03 wordpress]# vim docker-compose.yaml #wordpress version: '3' #指定dockercompose的版本 services: #一个services表示启动一个容器 db: #容器的名称 image: mysql:5.7 #容器的版本 volumes: #定义数据卷 - db_data:/var/lib/mysql #使用数据卷 restart: always #开机自启 environment: #设置环境变量 MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: #容器的名称 depends_on: #与mysql容器关联起来 - db image: wordpress:latest #镜像的版本 volumes: #定义数据卷 - web_data:/var/www/html #使用数据卷 ports: #定义端口 - "80" #这里写一个端口表示这是一个随机端口,将本地的随机端口映射到容器的80 restart: always #开机自启 environment: #设置环境变量 WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress volumes: #创建卷组 db_data: web_data: 3.启动安装wordpress [root@docker03 wordpress]# docker-compose up -d
5.2.扩展:配置wordpress负载均衡
1)运行多个wordpress容器
[root@docker03 wordpress]# docker-compose scale wordpress=3 WARNING: The scale command is deprecated. Use the up command with the --scale flag instead. Starting wordpress_wordpress_1 ... done Creating wordpress_wordpress_2 ... done Creating wordpress_wordpress_3 ... done scale默认会算上之前启动过的,因此后来启动了2个,在输出的时候秒级第一行done,过了一定时间后面两个才会启动成功 如果wordpress容器一开始没有启动则使用命令启动 [root@docker03 wordpress]# docker-compose up -d --scale wordpress=3
2)配置nginx负载均衡
在其他机器上做
1.编辑配置文件 [root@docker02 conf.d]# vim wordpress.conf upstream wordpress { server 192.168.81.230:32771; server 192.168.81.230:32772; server 192.168.81.230:32773; } server { listen 82; server_name localhost; location / { proxy_pass http://wordpress; proxy_set_header HOST $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 2.重载nginx [root@docker02 conf.d]# systemctl restart nginx 3.观察日志
5.3.增加几个容器并添加负载节点
docker操作 [root@docker03 wordpress]# docker-compose scale wordpress=5 负载均衡配置 增加后来的节点 upstream wordpress { server 192.168.81.230:32771; server 192.168.81.230:32772; server 192.168.81.230:32773; server 192.168.81.230:32775; server 192.168.81.230:32774; }
5.4.删除docker-compose scale增加的容器
可以用docker-compose scale增加也可以用docker-compose scale删除 一开始有10个,执行下面的命令就会把其他8个删掉 [root@docker03 wordpress]# docker-compose scale wordpress=2
6.docker-compose安装zabbix
6.1.编写compose文件
[root@docker03 zabbix]# vim docker-compose.yaml #zabbix version: '3' #版本 services: #一个容器一个services mysql-server: #容器名 image: mysql:5.7 #镜像的版本 volumes: #定义数据卷 - db_data:/var/lib/mysql #使用数据卷 restart: always #开机自启 environment: #设置环境变量 MYSQL_ROOT_PASSWORD: root_pwd MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_pwd command: --character-set-server=utf8 #命令参数 zabbix-java-gateway: image: zabbix/zabbix-java-gateway:latest restart: always zabbix-server: depends_on: - mysql-server - zabbix-java-gateway image: zabbix/zabbix-server-mysql:latest ports: - "10051:10051" restart: always environment: DB_SERVER_HOST: mysql-server MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_pwd MYSQL_ROOT_PASSWORD: root_pwd ZBX_JAVAGATEWAY: zabbix-java-gateway zabbix-web-nginx-mysql: depends_on: - mysql-server - zabbix-server image: zabbix/zabbix-web-nginx-mysql:latest ports: - "80:8080" restart: always environment: DB_SERVER_HOST: mysql-server MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_pwd MYSQL_ROOT_PASSWORD: root_pwd volumes: db_data:
6.2.运行docker-compose zabbix容器
[root@docker03 zabbix]# docker-compose up -d Creating zabbix_mysql-server_1 ... done Creating zabbix_zabbix-java-gateway_1 ... done Creating zabbix_zabbix-server_1 ... done Creating zabbix_zabbix-web-nginx-mysql_1 ... done
7.设置容器开机自启的两种方法
1.使用--restart=always 2.在配置文件中增加 "live-restore": true