docker-compose容器集群编排详解(十二)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天

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

猜你喜欢

转载自juejin.im/post/7111895817278980127