Docker 容器编排 - 最佳实践与技术指南

silverwq
2024-03-16 / 0 评论 / 59 阅读 / 正在检测是否收录...

概述

通过容器编排,可以实现以下这些功能:

  1. 依赖管理,当一个容器必须在另一个容器运行完成后,才能运行时,就需要进行依赖管理
  2. 副本数控制,容器有时候也需要集群,快的对容器集群进行版本弹性伸缩
  3. 配置共享,通过配置文件统一描述需要运行的服务相关信息,自动化的解析配置内容,并构建对应的服务

docker compose

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

只能单机环境的容器编排,在单机上部署多个容器会变的比较方便。

docker compose 是对docker操作的增强。

安装

安装的时候,需要注意compose 的版本和docker的版本要对应上,不能太低

# 用阿里云的,看了下1.21.2好像是最新的18年最新更新
# $(uname -s)-$(uname -m) 是获取系统和架构
sudo curl -L "http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

下载最新版本的话,用这个

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

将可执行权限应用于二进制文件:

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

创建软链:

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

测试是否安装成功:

docker-compose --version

compose.yml 编写

内容比较多,可以看官方文档:https://docs.docker.com/compose/compose-file/compose-file-v2/

compose.yml配置样例,yaml是个key value配置,value和冒号之间需要有空格。上下行之间有上下级关系的,如果下一行有缩进2个空格,则表示是上一行的子集。

version: "2.1"
services:
  # 相当于一个容器,nginx-demo是随便起的
  nginx-demo:
    image: "nginx"
    container_name: "nginx_compose"
    restart: "always"
    # - 的话相当于数组
    networks:
      - wolfcode_net
    volumes:
      - /usr/local/www:/usr/share/nginx/htm
    # 环境变量配置
    environment:
      APP_ENV: dev
    # 指定dns解析服务
    dns: 
      - 114.114.115.115
    # 端口映射
    ports:
      - 80:80
# 配置公共网卡
networks:
  wolfcode_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 188.18.0.0/16
          gateway: 188.18.0.1

服务services配置

需要运行的容器配置,可以理解为原先用docker run命令后面跟的一系列配置信息,都配在这个下面。

网络networks配置

docker-compose 公共自定义网络管理,配置好以后,可以直接在services中引用该网络配置,这个配置可以多个service使用,例如自定义网卡配置

数据卷volumes

docker-compose 下统一数据卷管理,可以给多个services用

compose 命令

配置检查

检查配置文件是否正确,会自动查找当前目录下是否有docker-compose.yml,并且检查是否正确

docker-compose config

create

创建服务,这个只是创建容器,默认是没有运行的

# 创建docker-compose.yml里的所有services
docker-compose create
# 只创建docker-compose.yml里的nginx_demo services
docker-compose create nginx-demo

up

如果要运行的话,这个是针对第一次,或者如果docker-compose.yml文件有更新,需要重新应用最新的配置内容的话,可以使用下面命令,会自动根据最新配置补齐内容。

如果是已经有的容器,启动的话还是得用start命令

# 运行docker-compose.yml所有服务
docker-compose up -d
# 只运行nginx-demo服务
docker-compose up -d nginx-demo

ps

查看运行中的容器

docker-compose ps

stop

停掉服务

docker-compose stop

down

停掉并且删除容器等资源,甚用

docker-compose down

start

启动服务

docker-compose start

restart

重新启动服务

docker-compose restart

scale 扩容缩容

快速启动多个服务,需要注意的是,这个时候不能指定容器名container_name: "nginx_compose",不能和主机绑定端口,不然会冲突,导致失败

services:
   # container_name: "nginx_compose"
   # 改为只暴露端口即可
    ports:
      - 80

然后执行

# 如果原来只有3个,会增加2个
docker-compose scale nginx-demo=5

# 如果原来是5个,会自动停止2个
docker-compose scale nginx-demo=3

查看日志

查看所有服务的日志

# 查看所有服务的日志
docker-compose logs

指定查看某个服务的日志

# 查看所有服务的日志
docker-compose logs -f nginx-demo

swarm 分布式

是在docker官方的,在k8s后面出来的。可以在多个机器上创建容器,可以微服务部署。在docker 1.12后,已经自带swarm了。

架构图如下所示,有个机器当做主节点,管理众多的从节点机器。

lttisa1e.png

有多个管理节点,每个管理节点管理了多个worker节点,如果管理节点都挂了,基于raft协议,从工作节点里选一个当做管理节点。

lttj0e7q.png

我们可以利用swarm,配置很多个服务services,然后把这个服务交给节点node创建,node节点以task的形式创建。

lttjbsdf.png

服务的生命周期

lttjejkj.png

集群搭建

集群创建

在master节点上创建管理节点,需要注意的是,管理节点也算是个工作节点

# 指定主节点的ip地址,这个地址是这台机器的地址
docker swarm init --advertise-addr 192.168.113.120

lttjmjpu.png

去对应的工作节点上执行上述命令即可加入集群。最好先把防火墙关闭了,不然有可能没法访问。

如何查看有几个节点呢

# master 节点上执行
docker node ls

服务创建

每个节点都创建2个nginx

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

如果有问题题话,可以删除重新创建,注意防火墙网络问题

docker service ls
docker service rm 服务名称

这样就可以用相关的命令在master节点整个集群容器的数量。

拓展

最后可以用portainer来可视化管理

0

评论 (0)

取消