Docker Compose、私有镜像站和Swam集群

Docker Compose与Swarm集群实践

Docker Compose

单机容器编排,一键批量管理多个容器,使用yaml格式:docker-compose.yml

  • Docker Compose V1(docker-compose

    • 命名形式:命令为 docker-compose(带连字符)。

    • 开发语言:基于 Python 开发,是独立于 Docker 引擎的第三方工具。

    • 在配置文件中显式指定 version 字段)。

使用dockercompose部署wordpress(单机Docker环境)

 # 创建一个名为docker-compose.yml的文件
 vim docker-compose.yml
 ----------------------------------
 version: '3.8'
 services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root123
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: root123
       MYSQL_ROOT_HOST: '%'
     command: --default-authentication-plugin=mysql_native_password
 ​
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: root123
       WORDPRESS_DB_NAME: wordpress
     volumes:
       - wp_data:/var/www/html
 ​
 volumes:
   db_data:
   wp_data:
 --------------------------------------
 # 如果之前有下载过需要删除的(没有就省略)
 docker compose down -v
 # 启动服务
 docker compose up -d
 # 浏览器搜索192.168.221.21:8000


Docker私有镜像站-Harbor

私有镜像站,方便管理、下载部署内部的镜像;

 ## 下载Harbor
 cd /opt
 wget http://192.168.57.200/Software/harbor-offline-installer-v2.14.0.tgz

 ## 安装Harbor
 tar -xvf harbor-offline-installer-v2.14.0.tgz
 # 进入Harbor目录,后续都在这个目录里操作
 cd harbor/
 ./install.sh
 # 最后出现两行这个就说明正确了
 # prepare base dir is set to /opt/harbor
 # no config file: /opt/harbor/harbor.yml
 # 修改配置文件中的主机名为本机IP
 cp harbor.yml.tmpl harbor.yml
 vim harbor.yml
 第五行的hostname改为192.168.221.21
 
 ## 创建密钥
 # 1.进入证书目录
 mkdir ssl
 cd ssl/
 # 2.创建本地私有密钥
 openssl genrsa -out ssl.key 2048
 # 3.按提示输入即可
 openssl req -new -key ssl.key -out ssl.csr
 # 4.创建证书crt
 openssl x509 -req -days 1460 -in ssl.csr -signkey ssl.key -out ssl.crt
 # 5.创建证书pem
 openssl dhparam -out ssl.pem 2048
 # 后面就是一堆点了,等待......

 ## 修改配置文件
 vim harbor.yml
 第17行的certificate改成/opt/harbor/ssl/ssl.crt
 第18行的private_key改成/opt/harbor/ssl/ssl.key
 第47行的密码可以改成root123,不改的话登陆密码就是原来的
 ./install.sh
 # 最后出现✔ ----Harbor has been installed and started successfully.----
 docker compose up -d
 # 浏览器搜索IP就是Harbor的界面了
 ​
 vim /etc/docker/daemon.json
   "insecure-registries": [
 在这个后面加两行"http://192.168.57.200:8099",
     "http://192.168.221.21",
     "https://192.168.221.21"
    ]
 systemctl daemon-reload
 systemctl restart docker
 docker compose up -d
 docker login http://192.168.221.21
 docker login https://192.168.221.21
 # 最后都出现Login Succeeded就对了
 
# 在项目中标记镜像:
 docker tag SOURCE_IMAGE[:TAG] 192.168.221.21/library/REPOSITORY[:TAG]
 # 推送镜像到当前项目:
 docker push 192.168.221.21/library/REPOSITORY[:TAG]


Docker-Swarm

多主机容器集群管理工具;统一管理多台服务器上的Docker容器;

需要至少一个master节点:统一管理node节点和所有node节点上的容器;

相关命令

Docker Swarm命令:

 init        初始化一个Swarm。
 join        将Docker主机加入到Swarm作为工作节点或管理节点。
 leave       使节点离开Swarm。
 update      更新Swarm配置。

Docker Service命令:

 create      创建一个新的服务。
 inspect     检查一个或多个服务。
 update      更新一个服务。
 remove      移除一个或多个服务。
 tasks       列出一个或多个服务的任务。

Docker Node命令:

 accept      接受加入到Swarm的请求。
 promote     将节点提升为Swarm中的管理节点。
 demote      将管理节点降级为Swarm中的工作节点。
 inspect     检查一个或多个节点。
 update      更新一个节点。
 tasks       列出分配给一个或多个节点的任务。
 ls          列出Swarm中的节点。
 rm          从Swarm中移除一个或多个节点。

Docker Stack命令:

 config      输出最终的配置文件,在完成合并和插值后
 deploy      部署一个新的堆栈或更新现有的堆栈
 ls          列出堆栈
 ps          列出堆栈中的任务
 rm          移除一个或多个堆栈
 services    列出堆栈中的服务

swam集群部署

 - 192.168.221.21  Manager
 - 192.168.221.22  Node1
 - 192.168.221.23  Node2

 # 1.安装Docker
 apt update
 apt-get -y install ca-certificates curl gnupg lsb-release
 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
 add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
 apt-get -y install docker-ce docker-ce-cli containerd.io
 systemctl stop docker
 vim /etc/docker/daemon.json
 {
     "registry-mirrors": [
         "https://0c105db5188026850f80c001def654a0.mirror.swr.myhuaweicloud.com",
         "https://5tqw56kt.mirror.aliyuncs.com",
         "https://docker.1panel.live",
         "http://mirrors.ustc.edu.cn",
         "http://mirror.azure.cn",
         "https://hub.rat.dev",
         "https://docker.chenby.cn",
         "https://docker.hpcloud.cloud",
         "https://docker.m.daocloud.io",
         "https://docker.unsee.tech",
         "https://dockerpull.org",
         "https://dockerhub.icu",
         "https://proxy.1panel.live",
         "https://docker.1panel.top",
         "https://docker.1ms.run",
         "https://docker.ketches.cn"
     ],
     "insecure-registries": [
         "http://192.168.57.200:8099"
     ],
     "hosts": [
         "tcp://0.0.0.0:2375",
         "unix:///var/run/docker.sock"
     ]
 }
 sed -i 's/ExecStart=\/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock/ExecStart=\/usr\/bin\/dockerd --containerd=\/run\/containerd\/containerd.sock/' /lib/systemd/system/docker.service
 systemctl daemon-reload
 systemctl restart docker
 # 2.所有节点设置 hosts 解析
 cat >> /etc/hosts << EOF
 192.168.221.21 server01
 192.168.221.22 server02
 192.168.221.23 server03
 EOF
 ## 接下来分开操作
 ​
 # 在第一台manager机器上(192.168.221.21操作)
 # 3.初始化集群-init
 docker swarm init --advertise-addr 192.168.221.21
 # 保存第三行的命令与token令牌,用于添加工作节点;添加Manager节点到Swarm集群时,执行'docker swarm join-token manager'获取令牌
 # 4.添加worker(node工作节点)到swarm集群(在另外两台22和23节点上操作)
 # 复制你自己上一步中输出的完整命令到工作节点中。
 docker swarm join --token SWMTKN-1-5q4ztzm6zd0fzdnxw7tprido1d2p38jb650mdujddianpo812n-b51z5ij8vqzlmcr56mluk4irg 192.168.221.21:2377
 第三台机器同理
 最后出现这一行 This node joined a swarm as a worker.
 # 验证加入情况,确保三台机器都在(192.168.221.21操作)
 docker node ls
 ID                            HOSTNAME    STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
 ifo32t0qq63nl6c2t3a3kio2h *   server-21   Ready     Active         Leader           28.5.1
 shzi3kedbzdvn5lmy5ovgp59s     server-22   Ready     Active                          28.5.1
 lctl7rf6k96dnvqy4bmqiaxvs     server-23   Ready     Active                          28.5.1
 # 在Docker集群中运行容器((192.168.221.21操作)无需下载nginx镜像)
 # 1.在集群中创建overlay网络,让不同宿主上的容器可以在同一个网段内通信,方便搭建负载均衡
 docker network create -d overlay nginx_net
 docker network ls | grep nginx_net
 会出现一行drht1x02my05   nginx_net     overlay   swarm
 # 2.使用service创建相同容器的集群,replicas 3表示至少需要3个副本(三个都running则成功)
 docker service create --replicas 3 --network nginx_net --name my_nginx -p 80:80 nginx
 # 3.验证集群信息
 # 查看正在运行服务的列表
 docker service ls
 # 查询Swarm中服务的信息(-pretty 使命令输出格式化为可读的格式,不加 --pretty 可以输出更详细的信息)
 docker service inspect --pretty my_nginx
 # 4.查看容器ID
 docker ps
 docker exec -it 容器ID /bin/bash
 echo "nginx-1" > /usr/share/nginx/html/index.html
 # 5.查看浏览器(反复刷新)
 curl 192.168.221.21

扩容、缩容

scale是在Swarm中的动态扩展服务,它提供了容器复制的功能。 可以通过 docker service scale 命令来设置服务中容器的副本数。

 # 将上面的 my_nginx 容器动态扩展到6个
 docker service scale my_nginx=6
 # 将上面的 my_nginx 容器动态缩到2个
 docker service scale my_nginx=2

容器版本升级、回滚

 # 容器版本升级
 docker service update --image nginx:1.29 my_nginx
 # 回滚
 docker service update --image nginx:1.26 my_nginx
 # 查看版本可以加上参数-i
 curl -i 192.168.221.21

使用dockercompose部署wordpress(Docker Swarm集群)

 # 1)创建wordpress文件夹
 mkdir -p /data/wordpress
 cd /data/wordpress/
 # 2)编辑docker-compose.yml文件
 vim docker-compose.yml
 ---------------------------------
 version: "3"
 ​
 services:
   wordpress:
     image: wordpress
     ports:
       - 8090:80
     networks:
       - overlay
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: root123
     deploy:
       mode: replicated
       replicas: 3
 ​
   db:
     image: mysql:5.7
     networks:
        - overlay
     volumes:
       - db-data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD: root123
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: root123
     deploy:
       placement:
         constraints: [node.role == manager]
 ​
   visualizer:
     image: dockersamples/visualizer:stable
     ports:
       - "8080:8080"
     stop_grace_period: 1m30s
     volumes:
       - "/var/run/docker.sock:/var/run/docker.sock"
     deploy:
       placement:
         constraints: [node.role == manager]
 ​
 volumes:
   db-data:
 networks:
   overlay:
 # 3)部署服务
 docker stack deploy -c docker-compose.yml wordpress
 # 部署服务使用docker stack deploy命令
 # -c:指定compose文件名
 docker stack ls
 # 4)查看效果
 打开浏览器输入 任一节点IP:8080 即可看到各节点运行状态

所有数据仅供实验参考,开发环境不要设置这么简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值