惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - zzzp0755

Docker安装和应用 linux常用命令 SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为:010f28a5,但实际为:0xcaf47a0c)。 ABP vNext学习 及问题记录 winform datagridview 勾选复选框 和点击单元格事件区分 Vol.NET 开发步骤 .net6.0 新知识学习 英语2025-02 FLOAT:浮点数值数据的大致数值数据类型 Dev 案例 css 积累 20240423 JSON.NET JObject键比较不区分大小写 jsfiddle.net js在线调试 sql 时间日期函数 ele admin plus 添加dev插件 .NET Core Web API 实现图形验证码 DataGridView 保存编辑的行 .net webapi 返回类型
Docker集群 + 运维 + 镜像仓库
zzzp0755 · 2026-03-10 · via 博客园 - zzzp0755

结构:主从集群机构,一个主节点leader,多个worker节点

好处:防止docker单点故障

目的:保障高可用,及应用的高并发

Docker-Swarm

要求:多个linux服务器版本要一致

 开始搭建
1、搭建leader点:docker swarm init  创建完成后,会产生加入命令:docker swarm join --token SWMTKN-1-0nzhefc1l4joaexccqkbqbm5yds39ycxvt3fpkfcxagcgncbqd-4vlxwagonftqtcgjryj2sb2v3 192.168.40.168:2377
2、搭建worker节点:使用上边的加入命令

Docker node

操作Docker集群

Docker Service

在docker集群上部署项目

leader:分配任务和执行

worker:执行


开始部署:

1、所有节点都创建nginx镜像

下载nginx:

wget  http://nginx.org/download/nginx-1.15.2.tar.gz

创建Dockerfile

FROM quay.io/centos/centos:stream9
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
WORKDIR /nginx
COPY nginx-1.15.2.tar.gz /nginx
RUN tar -zxvf  nginx-1.15.2.tar.gz
RUN cd nginx-1.15.2 && ./configure && make && make install
EXPOSE 80
COPY nginx.sh /nginx.sh
RUN chmod 755 /nginx.sh
CMD ["/nginx.sh"]

Nginx脚本文件nginx.sh

#!/bin/sh
/usr/local/nginx/sbin/nginx
/bin/bash -c 'while true; do sleep 200; done'

构建镜像:docker build -t xzpnginx .

使用docker service部署 

docker service create --name xzpnginx --publish 8090:80 xzpngin 

service 和 容器的映射关系

 http://192.168.40.169:8090/ --->docker service leader 内网ip(10.0.0.4:80) ----负载均衡--> nginx容器 ------> nginx项目 --index.html

技术:overlay网络【集群】

Docker Stack 集群服务编排
应用:一次性的部署整个项目

1、基本使用

docker stack deploy -c docker-compose.yaml xzp_system_312
docker stack deploy -c docker-compose.yaml xzp_system_312

#查看
docker service ls

docker-compose.yaml

version: '3.7'
services:
  nginx:
    image: xzpnginx
    ports:
     - 8001:80
    deploy:
      mode:
       replicated
      replicas: 2
  webapi:
    image: dockertest
    ports:
     - 8002:80
    deploy:
      mode:
       replicated
      replicas: 2

  2、service之间的通信

    目标:使用nginx反向代理webapi 

    本质:使用service名称 访问 :nginx和webapi

    1、方法一(太过麻烦状态容易丢失):修改容器内部配置

    2、方法二:使用config挂载

version: '3.7'
services:
  nginx:
    image: xzpnginx
    ports:
     - 8001:80
    deploy:
      mode:
       replicated
      replicas: 2
    configs: 
     - source: xzpnginx_config
       target: /usr/local/nginx/conf/nginx.conf
  webapi:
    image: dockertest
    ports:
     - 8002:80
    deploy:
      mode:
       replicated
      replicas: 2
configs:
 xzpnginx_config:
  file: /root/docker-stack/nginx.conf

  linux 对 nginx代理端口 不太稳定,需手动添加信任端口 

sudo firewall-cmd --zone=public --add-port=8001/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8002/tcp --permanent
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
再不行,关闭防火墙
sudo systemctl stop firewalld
sudo systemctl start firewalld

Docker 运维

删除未使用的容器 docker container prune

删除指定镜像:1、 docker images  2、docker rmi a7d31c48bea0

创建镜像:docker build -t docker1 .

运行镜像:docker run -p5001:80 docker1 (每运行一次就会产生一个容器,通过docker ps -a查看)

查看当前集群:docker service ls  集群删除:

查看当前运行的容器:docker ps

删除容器:1、docker stop 3c11476e79d2  2、 docker container rm 3c11476e79d2

进入容器:docker exec -it 7573f63da9e7 /bin/bash  修改nignx.config的反向代理为service名称(webapi) 然后到(/usr/local/nginx/sbin  执行: ./nginx -s reload)重启网络

遗留问题

nginx反向代理webapi的时候,偶尔会访问不了,可能原因是:两台主机使用http://webapi:80的访问异常 或者未设置network

An error occurred.
Sorry, the page you are looking for is currently unavailable.
Please try again later.

If you are the system administrator of this resource then you should check the error log for details.

Faithfully yours, nginx.

五、 镜像仓库
1、私有仓库Harbor 
含义:管理Docker中所有镜像,作用:提升镜像管理效率

  1、安装Harbor ,前提独立主机 

    过程:下载和安装Docker、Docker-Compose,下载Harbor压缩包,然后安装install.sh >创建配置文件(修改Ip、端口、密码)>  创建 data文件夹 >继续安装install.sh > 完成:浏览器可访问端口即可

  下载地址:wget https://github.com/goharbor/harbor/releases/download/v2.14.0/harbor-offline-installer-v2.14.0.tgz

   教程:https://blog.csdn.net/weixin_45049740/article/details/157512203  

创建配置文件:cp harbor.yml{.tmpl,}

配置文件调整:

hostname: 192.168.40.168调整为本机Ip或域名

     账号密码:

# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Harbor12345
database:
password: root123

使用Harbor:
上传镜像:
    打开harbor网页 > 项目:新建 一个私有项目 > 进入项目复制推送命令:192.168.40.168:8050/harborzhrj/harborwebpi:latest

修改本机Host的/etc/docker/daemon.json 》 添加 "insecure-registries":["192.168.40.168:8050"]

之后本机上执行如下命令

[root@localhost data]# systemctl daemon-reload
[root@localhost data]# systemctl restart docker

问题:重启了docker后 harbor网页版就登录不了了,原因: harbor默认的配置依赖项未加入到Docker-compose.ymal的volume中,所有harbor容器启动会失败  https://blog.51cto.com/u_16213317/11718648
  
下载镜像:
在harbor仓库中复制镜像地址:
docker pull 192.168.40.168:8050/harborzhrj/harborwebpi@sha256:d626de4fc674621ab16f5c4b8165520a4f7305de6edf0b67495570a7f68dc0a8 > 修改为
docker pull 192.168.40.168:8050/harborzhrj/harborwebpi:latest

  运行镜像:

docker run --name harborwebapi -p8051:80 192.168.40.168:8050/harborzhrj/harborwebpi:latest

2、可视化portainer.io

下载:docker  pull portainer/portainer-ce:latest

运行:

docker service create \
  --name portainer \
  --publish 9000:9000 \
  --constraint 'node.role == manager' \
  --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  --mount type=volume,src=portainer_data,dst=/data \
  portainer/portainer-ce:latest

  打开网站:192.168.40.168:9000  >账号密码:admin admin1234567

     1、配置私有harbor仓库:Registries  >  add

   2、可通过container运行运行项目

     3、构建镜像、运行Service等