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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: docker compose容器编排1.compose简介前面我们使用docker的时候,定义dockerfile,每次只能启动一个容器,然后微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启动,那么效率会非常低使用docker compose可以轻松、高效的管理容器,可以一起运行多个容器

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

image.png

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.观察日志

image.png

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;
}

image.png

5.4.删除docker-compose scale增加的容器

可以用docker-compose scale增加也可以用docker-compose scale删除
一开始有10个,执行下面的命令就会把其他8个删掉
[root@docker03 wordpress]# docker-compose scale wordpress=2

image.png

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

image.png

7.设置容器开机自启的两种方法

1.使用--restart=always
2.在配置文件中增加
  "live-restore": true
目录
相关文章
|
3天前
|
资源调度 关系型数据库 MySQL
docker制作compose
本文介绍了Docker Compose的基本使用,包括安装、创建`docker-compose.yml`文件定义服务,以及如何使用环境变量和卷来配置多容器应用的步骤。
14 1
docker制作compose
|
2天前
|
存储 监控 Shell
docker的底层原理二:容器运行时环境
本文深入探讨了Docker容器运行时环境的关键技术,包括命名空间、控制组、联合文件系统、容器运行时以及分离的进程树,这些技术共同确保了容器的隔离性、资源控制和可移植性。
14 5
|
1天前
|
安全 Docker 容器
Docker中运行容器时Operation not permitted报错问题解决
【10月更文挑战第2天】Docker中运行容器时Operation not permitted报错问题解决
11 3
|
1天前
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
11 1
|
1天前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
13 0
|
1天前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
15 4
|
2天前
|
Ubuntu Linux 应用服务中间件
Docker容器入门实战
Docker容器入门实战
|
3天前
|
应用服务中间件 Shell nginx
Docker容器运行
Docker容器运行
15 0
|
22天前
|
Linux iOS开发 Docker
Docker:容器化技术的领航者 —— 从基础到实践的全面解析
在云计算与微服务架构日益盛行的今天,Docker作为容器化技术的佼佼者,正引领着一场软件开发与部署的革命。它不仅极大地提升了应用部署的灵活性与效率,还为持续集成/持续部署(CI/CD)提供了强有力的支撑。
204 69
|
9天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。