古道长亭

Contact me with ixiaoqiang0011@gmail.com


  • 首页

  • 归档

  • 分类

  • 关于

  • Book

  • 搜索

Docker 运维管理

时间: 2023-07-19   |   分类: Docker   | 字数: 4471 字 | 阅读约: 9分钟 | 阅读次数:

Docker 运维管理

1.常见软件安装

mysql主从、主主,elasticsearch, fastDFS, gitlab……………….感兴趣可以通过dockerfile练习

2. Swarm集群管理

compose、machine 和 swarm 是docker 原生提供的三大编排工具。简称docker三剑客。

准备3台服务器,分别安装docker

当前应用状态:

容器化部署=大麻烦

怎么保证数据完整性
怎么保护客户隐私数据
怎么去调度容器
怎么去监控追踪容器
怎么去更新容器而不影响客户的业务
如果容器down掉了。怎么自动恢复
怎么去管很多微服容器
怎么根据客户业务需求,快速方便的扩展容器

2.1 安装docker swarm

2.1.1 概述

官方文档: https://docs.docker.com/engine/swarm/

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,可以将组成某个应用的多个docker容器编排在一起,同时管理。

而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口(docker stack)统一管理这些Docker主机上的各种Docker资源

stack 是构成特定环境中的 service 集合, 它是自动部署多个相互关联的服务的简便方法,而无需单独定义每个服务。

stack file 是一种 yaml 格式的文件,类似于 docker-compose.yml 文件,它定义了一个或多个服务,并定义了服务的环境变量、部署标签、容器数量以及相关的环境特定配置等。

Docker Swarm由两部分组成:

  • Docker集群:将一个或多个Docker节点组织起来,用户就能以集群的方式进行管理;

  • 应用编排:有一套API用来部署和管理容器

2.1.2 配置私有仓库

私有仓库不是集群必备的组件。集群的每个节点都需要安装镜像,如果不搭建私有仓库,下载镜像速度比较耗时

vim /etc/docker/daemon.json 

"insecure-registries":["192.168.198.101:5000"]

systemctl daemon-reload
systemctl restart docker

2.1.3 初始化第一个管理节点

关于advertise-addr和listen-addr这两个参数:

前者用来指定其他节点连接manager0时的地址
后者指定承载swarm流量的IP和端口
会在本地新建docker网络
docker swarm init --advertise-addr 192.168.0.87:2377 --listen-addr 192.168.0.87:2377

docker node ls 
docker network ls

2.1.4 如何加入新的节点

Docker Swarm的新节点加入策略是从管理节点获取一长串命令,被称为join token,任何想加入集群的机器只要自己执行这个join token即可加入Swarm集群;

如果有新的管理节点需要加入,在manager 0执行命令docker swarm join-token manager即可得到管理manager节点的join token

如果有新的work节点需要加入,在manager 0执行命令docker swarm join-token worker即可得到管理work节点的join token

在manager节点执行。可以作为manager节点加入集群 
docker swarm join-token manager

在manager节点执行。可以作为worker节点加入集群 
docker swarm join-token worker

docker node ls

2.1.5 manager节点说明

MANAGER STATUS列说明:

  • Leader 意味着该节点是使得群的所有群管理和编排决策的主要管理器节点。

  • Reachable 意味着节点是管理者节点正在参与Raft共识。如果领导节点不可用,则该节点有资格被选为新领导者。

  • Unavailable 意味着节点是不能与其他管理器通信的管理器。如果管理器节点不可用,您应该将新的管理器节点加入群集,或者将工作器节点升级为管理器。

AVAILABILITY列说明:

  • Active 意味着调度程序可以将任务分配给节点。

  • Pause 意味着调度程序不会将新任务分配给节点,但现有任务仍在运行。

  • Drain 意味着调度程序不会向节点分配新任务。调度程序关闭所有现有任务并在可用节点上调度它们。

2.1.6 验证节点

master节点:
docker info 

work节点:
docker info

2.1.7 节点权限提升/降低

#将worker 提升为manager, 在manager 节点执行如下命令
docker node promote [node name]
docker node ls

#将manager 降低为worker, 在manager 节点执行如下命令
docker node demote [node name]
docker node ls

2.1.8 脱离集群

# 在worker 节点使用命令: 
docker swarm leave

2.1.9 删除脱离集群的节点

# 先使用命令
docker node demote [node name],将一个节点降为worker后, 再删除

# 使用命令
docker node rm [node name|id]

# manager节点只能强制退出。命令:docker swarm leave --force。manager退出后意味着整个swarm 不复存在。

2.2 图形界面

官网: https://hub.docker.com/r/dockersamples/visualizer

# 基础镜像
docker pull dockersamples/visualizer:latest

# 备份镜像 (不是必要步骤)
docker save dockersamples/visualizer:latest -o dockersamples.visualizer.tar 

#还原镜像 (不是必要步骤)
docker load -i dockersamples.visualizer.tar

# 运行镜像
docker run -itd --name visualizer -p 8099:8080 -e HOST=192.168.198.105 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer:latest

docker service create \ 
--name=viz \ 
--publish=8080:8080/tcp \ 
--constraint=node.role==manager \ --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \ dockersamples/visualizer

# 测试连接
http://ip:8099

2.3 swarm 命令

命令描述
docker swarm init初始化一个 swarm 群集
docker swarm join加入群集作为节点或管理器
docker swarm join-token管理用于加入群集的令牌
docker swarm leave离开 swarm 群集
docker swarm unlock解锁 swarm 群集
docker swarm unlock-key管理解锁钥匙
docker swarm update更新 swarm 群集

2.4 node 命令

命令描述
docker node demote从 swarm 群集管理器中降级一个或多个节点
docker node inspect显示一个或多个节点的详细信息
docker node ls列出 swarm 群集中的节点
docker node promote将一个或多个节点推入到群集管理器中
docker node ps列出在一个或多个节点上运行的任务,默认为当前节点
docker node rm从 swarm 群集删除一个或多个节点
docker node update更新一个节点

2.5 service 命令

命令描述
docker service create创建服务
docker service inspect显示一个或多个服务的详细信息
docker service logs获取服务的日志
docker service ls列出服务
docker service rm删除一个或多个服务
docker service scale设置服务的实例数量
docker service update更新服务
docker service rollback恢复服务至update之前的配置

例 :

  • 基础镜像

    #3台机器都准备基础镜像
    docker pull nginx:1.18.0-alpine 
    docker pull nginx:1.19.3-alpine
    
  • 部署nginx

    #在manager节点中创建overlay网络:
    docker network create -d overlay nginx-net
    
    #创建5个nginx:alpines容器的集群:
    docker service create --name nginx --network nginx-net -p 80:80 --replicas 5 nginx:1.18.0-alpine
    
    #在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看:
    docker service ls
    
    #在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况:
    docker ps
    
    #manager节点只用于管理集群,不希望部署服务。
    docker node update --availability drain master-01[此处为manager name]
    
    #使用docker service scale nginx=2命令将服务缩减为2个容器:
    docker service scale nginx=2
    
  • 升级nginx版本

    #进入其中一个容器查看nginx的版本信息: 注意事项:因nginx是alpine的linux版本。不能使用/bin/bash指令。
    docker exec -it 503fe639bb89 sh
    nginx -v
    
    #1.更新镜像:
    docker service update --image nginx:1.19.3-alpine nginx
    
    #2.添加或者更新一个对外端口:
    docker service update --publish-add 8090:80 nginx
    
  • 删除服务

    docker service rm nginx
    docker network rm nginx-net
    

2.6 stack命令

命令描述
docker stack deploy部署新的堆栈或更新现有堆栈
docker stack ls列出现有堆栈
docker stack ps列出堆栈中的任务
docker stack rm删除一个或多个堆栈
docker stack services列出堆栈中的服务
  • 部署nginx

    version: "3"
    services: 
    	nginx-web: 
    		image: nginx:1.19.3-alpine 
    		container_name: nginx 
    		networks: 
    			- nginx-net
             restart: always
             ports: 
             	- 80:80
             deploy: 
             	replicas: 5 
    networks: 
    	nginx-net: 
    		driver: overlay
    
  • 运行nginx

    #在manager节点中创建docker-compose.yml文件。执行如下命令:
    docker stack deploy nginx-stack --compose-file=docker-compose.yml 
    或者是 
    docker stack deploy nginx-stack -c docker-compose.yml
    
    #查看stack服务运行情况。执行如下命令: 
    docker stack services nginx-stack
    
    #查看5个容器运行在哪个节点中。执行如下命令:
    docker service ls 查看到NAME中的服务名为:nginx-stack_nginx-web 
    docker service ps nginx-stack_nginx-web
    
    #删除stack服务。执行如下命令: 
    docker stack rm nginx-stack
    
  • 总结:
    networks中也可以不指定driver:overlay,因为docker swarm默认网络类型是overlay。
    整个networks都可以不用配置。stack部署时会默认创建网络。如果我们定义网络。在docker
    stack deploy时会先默认创建一个网络,在创建一个我们定义的网络。
    一定要把镜像先拉取到本地再执行
    
  • docker stack 和docker compose区别

    1.Docker stack会忽略了“构建”指令,无法使用stack命令构建新镜像,它是需要镜像是预先已经构建
    好的。 所以docker-compose更适合于开发场景;
    2.Docker Compose是一个Python项目,在内部,它使用Docker API规范来操作容器。所以需要安
    装Docker -compose,以便与Docker一起在您的计算机上使用;
    3.Docker Stack功能包含在Docker引擎中。你不需要安装额外的包来使用它,docker stacks 只是
    swarm mode的一部分。
    4.Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而
    Docker Compose对版本为2和3的 文件仍然可以处理;
    5.docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。同时,
    对于大多数用户来说,切换到使用docker stack既不困难,也不需要太多的开销。如果您是Docker
    新手,或正在选择用于新项目的技术,请使用docker stack。
    

3. harbor企业级部署

默认情况下,harbor不提供证书。可以在没有安全性的情况下部署harbor,就可以通过HTTP方式连接到harbor。但是,只有在没有连接到外部internet的测试环境或开发环境中才可以使用HTTP。在生产环境中,始终使用HTTPS。要配置HTTPS,必须创建SSL证书。可以使用由受信任的第三方CA签名的证书,也可以使用自签名证书。本节介绍如何使用OpenSSL创建CA,以及如何使用CA签署服务器证书和客户端证书。下面的过程假设harbor注册表的主机名是harbor.lagouedu.com,并且它的DNS记录指向运行harbor的主机。

官网https配置帮助文档: https://github.com/goharbor/harbor/blob/v1.9.4/docs/configure_https.md

  • 解压harbor

    在harbor中创建一个目录,用于存放证书

    echo "192.168.198.101 harbor.my.com" >> /etc/hosts
    cat /etc/hosts 
    
    cd /data 
    tar zxf harbor-offline-installer-v1.9.4.tgz
    
    cd harbor/ 
    mkdir -p ssl 
    
    cd ssl
    
  • 获得证书颁发机构

    在生产环境中,应该从CA官方获取证书。在测试或开发环境中,可以生成自己的CA。若要生成CA证书,请运行以下命令。

    cd /data/harbor/ssl 
    创建CA根证书 
    openssl genrsa -out ca.key 4096 
    
    openssl req -x509 -new -nodes -sha512 -days 3650 -subj 
    "/C=TW/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.my.com"
    -key ca.key -out ca.crt
    
  • 获取服务器证书

    证书通常包含**.crt**文件和.key文件,例如 harbor.my.com.crt 和 harbor.my.com.key。

    • 创建自己的私钥

      openssl genrsa -out harbor.my.com.key 4096
      
    • 生成证书签名请求

      调整-subj选项中的值以反映您的组织。如果使用域名方式连接harbor主机,则必须将其指定为
      common name(CN)属性,并在key和CSR文件名中使用它。
      openssl req -sha512 -new -subj 
      "/C=TW/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.my.com" 
      -key harbor.my.com.key -out harbor.my.com.csr
      
    • 生成注册表主机的证书

      无论是使用域名还是使用IP地址连接到您的Harbor主机,都必须创建此文件,以便您可以为harbor主机生成符合使用者替代名称(SAN)和x509 v3扩展要求的证书。替换DNS条目以反映harbor的域。

      cat > v3.ext <<-EOF
      authorityKeyIdentifier=keyid,issuer 
      basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
      extendedKeyUsage = serverAuth 
      subjectAltName = @alt_names
      [alt_names] DNS.1=harbor.my.com 
      EOF
      

      使用v3.ext文件为harbor主机生成证书。

      openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey 
      ca.key - CAcreateserial -in harbor.my.com.csr -out harbor.my.com.crt
      
  • 为docker配置服务器证书,密钥和CA

    生成ca.crt、harbor.my.com.crt和harbor.my.com.key文件后,必须将它们提供给Harbor和Docker,并重新配置Harbor以使用它们。

    将yourdomain.com.crt转换为yourdomain.com.cert,供Docker使用。

    Docker守护进程将.crt文件解释为CA证书,.cert文件解释为客户端证书。

    openssl x509 -inform PEM -in harbor.my.com.crt -out harbor.my.com.cert 
    
    mkdir -p /etc/docker/certs.d/harbor.my.com/ 
    cp harbor.my.com.cert /etc/docker/certs.d/harbor.my.com/ 
    cp harbor.my.com.key /etc/docker/certs.d/harbor.my.com/ 
    cp ca.crt /etc/docker/certs.d/harbor.my.com/ 
    
    重启docker服务: 
    systemctl daemon-reload
    systemctl restart docker
    
  • 修改harbor.yml文件

    hostname: harbor.my.com
    https: 
        port: 443 
        certificate: /data/harbor/ssl/harbor.my.com.crt 
        private_key: /data/harbor/ssl/harbor.my.com.key
    
  • 安装harbor

    docker pull goharbor/prepare:v1.9.4
    
    cd /data/harbor
    ./prepared
    ./install.sh
    
  • 访问

    #先在host文件配置ip与域名的映射
    https://harbor.my.com/
    
  • 上传镜像

    docker login harbor.my.com 
    admin 
    Harbor12345 
    
    docker load -i nginx.1.19.3.alpine.tar 
    docker tag nginx:1.19.3-alpine harbor.my.com/my/nginx:v1 
    docker push harbor.my..com/my./nginx:v1
    
#Docker# #容器#
QQ扫一扫交流

标题:Docker 运维管理

作者:古道长亭

声明: 欢迎加群交流!

如有帮助,欢迎多多交流 ^_^

微信打赏

支付宝打赏

Kubernetes 简介及快速实战
Docker 核心原理
  • 文章目录
  • 站点概览
古道长亭

古道长亭

Always remember that your present situation is not your final destination. The best is yet to come.

226 日志
57 分类
104 标签
GitHub Gitee
友情链接
  • 古道长亭的BOOK
  • JAVA学习
标签云
  • Mysql
  • 搜索引擎
  • Mybatis
  • 容器
  • 架构
  • 消息队列
  • Flink
  • Sharding sphere
  • 流处理
  • 缓存
  • 1.常见软件安装
  • 2. Swarm集群管理
    • 2.1 安装docker swarm
    • 2.2 图形界面
    • 2.3 swarm 命令
    • 2.4 node 命令
    • 2.5 service 命令
    • 2.6 stack命令
  • 3. harbor企业级部署
© 2019 - 2024 京ICP备19012088号-1
0%