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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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
目录
相关文章
|
1天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
7天前
|
Docker Python 容器
python检测docker compose文件是否正确
python检测docker compose文件是否正确
|
9天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
29 4
|
7天前
|
Kubernetes Linux 开发者
深入探索Docker容器化技术的奥秘
深入探索Docker容器化技术的奥秘
16 1
|
5天前
|
网络协议 安全 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基础知识,包括网络驱动、端口映射和命名等核心概念,并深入探讨了 Bridge、Host、Overlay 和 Macvlan 四种网络类型的特点及应用场景。此外,还提供了创建、连接、查看和删除自定义网络的命令示例,以及高级网络配置方法,如网络命名空间、DNS 解析和安全通信配置,帮助开发者构建更健壮的容器化应用。
|
6天前
|
Cloud Native 持续交付 Docker
深入解析Docker容器化技术及其在生产环境中的应用
深入解析Docker容器化技术及其在生产环境中的应用
10 0
|
7天前
|
存储 Kubernetes Docker
深入探索容器化技术:Docker 实战与 Kubernetes 管理
深入探索容器化技术:Docker 实战与 Kubernetes 管理
21 0
|
8天前
|
Docker 容器
docker容器内需要执行sudo hwclock --systohc吗
docker容器内需要执行sudo hwclock --systohc吗
|
8天前
|
Docker 容器
7-7|salt检测docker compose文件是否正常
7-7|salt检测docker compose文件是否正常
|
8天前
|
Docker 容器
6-16|docker怎么把容器内的文件传出来
6-16|docker怎么把容器内的文件传出来
下一篇
无影云桌面