Docker容器编排

docker-compose

compose安装

Compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址。运行以下命令以下载 Docker Compose 的当前稳定版本:

curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 v2.20.2。
将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

创建软链:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

docker-compose version

image.png

nginx示例

docker-compose.yml配置案例如下,官方文档

version: "3.8"
services:
  nginx-demo:
    image: nginx
    restart: always
    networks:
      - network_test
    volumes:
      - /Users/wandaren/develop/docker-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /Users/wandaren/develop/docker-nginx/log:/var/log/nginx
      - /Users/wandaren/develop/docker-nginx/html:/usr/share/nginx/html
    environment:
      APP_ENV: dev
    dns: 114.114.115.115
    ports: 
      - 80

networks:
  network_test:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 188.18.0.0/16

启动:

# 创建
docker-compose create nginx-demo
# 加载配置并启动
docker-compose up -d nginx-demo
# 重新读取配置内容
docker-compose up -d
# 启动
docker-compose start nginx-demo
# 停止
docker-compose stop nginx-demo
# 停止并删除
docker-compose down nginx-demo

image.png
动态扩容

docker-compose up -d --scale nginx-demo=2

image.png

Swarm(分布式)

简介

Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
支持的工具包括但不限于以下各项:

  • Dokku
  • Docker Compose
  • Docker Machine
  • Jenkins

原理

如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。

  • swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
  • work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。

image.png

使用

1、创建 swarm 集群管理节点(manager)

初始化 swarm 集群,进行初始化的这台机器,就是集群的管理节点。

# 172.16.156.158为虚拟机本机ip
docker swarm init --advertise-addr 172.16.156.158

image.png
以上输出,证明已经初始化成功。需要把以下这行复制出来,在增加工作节点时会用到:

docker swarm join --token SWMTKN-1-4dq96unmcsz9v0m99vapdtegt5y0kym3ths69r6enlgofbgja7-7ml2skxa3y5x5cjly8uxfwoae 172.16.156.158:2377

2、创建 swarm 集群工作节点(worker)

分别进入两个机器里,指定添加至上一步中创建的集群,这里会用到上一步复制的内容。
image.png
image.png

3、查看集群信息

进入管理节点,执行:docker info 可以查看当前集群的信息。

docker info

image.png
通过画红圈的地方,可以知道当前运行的集群中,有三个节点,其中有一个是管理节点。
进入管理节点,执行:docker node ls 查看集群信息:

docker node ls

image.png

4、部署服务到集群中

注意:跟集群管理有关的任何操作,都是在管理节点上操作的。
以下例子,在一个工作节点上创建一个名为 nginx_swarm 的nginx服务,这里是随机指派给一个工作节点:

docker service create --replicas 1 -p 80:80 --name nginx_swarm nginx

image.png
image.png

5、查看服务部署情况

查看 nginx_swarm 服务运行在哪个节点上,可以看到目前是在 wq 节点:

docker service ps nginx_swarm

image.png
查看 nginx_swarm 部署的具体信息:

docker service inspect --pretty nginx_swarm

image.png

6、扩展集群服务

调整节点个数

# docker service update --replicas <num> <service id/name>
docker service update --replicas 2 nginx_swarm

image.png
服务扩展

docker service scale nginx_swarm=3

image.png

7、滚动升级服务

以下实例,我们将介绍 redis 版本如何滚动升级至更高版本。
创建一个 3.0.6 版本的 redis。

docker service create --replicas 1 --name redis --update-delay 10s redis:3.0.6

滚动升级 redis

docker service update --image redis:3.0.7 redis

image.png

8、删除服务

docker service rm nginx_swarm

image.png

9、停止某个节点接收新的任务

停止节点001

docker node update --availability drain 001

image.png
注意:001 状态变为 Drain。不会影响到集群的服务,只是 001 节点不再接收新的任务,集群的负载能力有所下降。
可以通过以下命令重新激活节点:

docker node update --availability active 001

image.png

10、节点退出集群

docker swarm leave

image.png
image.png
删除退出集群的节点

docker node rm sysn25urcm4elywoiexiov431

image.png

portainer可视化

# 集群方式
docker service create -p 9000:9000 --name portainer --replicas 1 --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --mount type=volume,src=portainer_data,dst=/data portainer/portainer

# 单机方式
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

访问任意节点ip:端口即可打开管理面板

http://172.16.156.158:9000

image.png
image.png

posted @ 2023-08-10 23:31  花开重日  阅读(81)  评论(0编辑  收藏  举报