Docker仓库技术 第五节 --- 部署harbor企业级私有仓库;自定义网络;跨主机容器通信;Docker数据卷

张开发
2026/4/18 19:41:17 15 分钟阅读

分享文章

Docker仓库技术 第五节 --- 部署harbor企业级私有仓库;自定义网络;跨主机容器通信;Docker数据卷
一、Harbor 部署1.先清理旧 Registry解决冲突docker rm -f registry额外清理避免残留冲突# 清理 registry 相关镜像 docker rmi -f registry # 查看是否还有遗留容器 docker ps -a2.准备证书目录1创建数据目录mkdir -p /data2把证书文件复制过去cp -r certs /data3.解压并配置Harbor1解压离线安装包tar zxf harbor-offline-installer-v2.14.0.tgzcd harbor/2复制配置模板cp harbor.yml.tmpl harbor.yml3编辑配置vim harbor.yml域名确定正确证书与密钥的路径设置成自己的(我这里是直接在root下部署的按照本文流程下你们的应该在data下)重新设置账号密码4.一键部署 Harbor带 Trivy 漏洞扫描./install.sh --with-trivy5.部署后完成验证1查看容器会看到harbor-core、harbor-nginx、harbor-db、harbor-trivy 等docker ps(2)浏览器访问账号admin 密码编辑配置里自己设置的部分https://reg.westos.org3查看镜像docker compose images二、自定义网络(单主机多容器互联)实验目的验证 Docker 自定义网络的网络隔离特性以及容器多网卡跨网络通信的实现方式。让两个原本属于不同网络的容器通过 “给容器附加虚拟网卡” 的方式实现跨网络通信1.创建两个自定义桥接网络my_net1和my_net21my_net1 由 Docker 自动分配网段docker network create my_net1查看 Docker 自定义网络 my_net21的完整详细配置信息属于 Docker 网络管理的核心查询命令2my_net2 手动指定网段 10.0.0.0/24docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 my_net2查看 Docker 自定义网络 my_net2 的完整详细配置信息属于 Docker 网络管理的核心查询命令2.在 my_net1 中运行 nginx 容器 web1web1 仅接入 my_net1从该网络自动获取 IP。同一网络内的容器可通过 容器名 DNS 解析 互相访问docker run -d --name web1 --network my_net1 nginx3.在 my_net1 中运行 busybox 并测试连通性同一 bridge 网络内Docker 内置 DNS 服务器会将容器名解析为对应 IP。因此可以直接 ping web1 并连通docker run -it --rm --network my_net1 busybox4.在 my_net2 中运行 busybox 并测试连通性不同 bridge 网络之间默认隔离无法路由也无法解析对方容器名。结果ping: bad address ‘web1’连通失败。docker run -it --rm --network my_net2 busybox5.创建容器 demo 并仅加入 my_net2此时 demo 仅属于 my_net2仍然无法访问 my_net1 中的 web1docker run -it --rm --network my_net2 --name demo busybox6.将容器 demo 额外连接到 my_net1docker network connect 的作用是①为运行中的容器额外挂载一张虚拟网卡veth pair并将其接入指定网络。②执行后demo 同时属于 my_net1 和 my_net2拥有 双网卡、双 IP。③容器自动获得两个网络的 DNS 解析能力与路由docker network connect my_net1 demo7.再次进入demo测试连通性docker attach demoping web1成功三、跨主机容器通信实验前准备将VM中的两台centos克隆虚拟机的网络适配器改为自定义的仅主机模式实验目的实现 两台不同物理机上的 Docker 容器直接通过二层网络互通并且容器使用真实局域网 IP不需要 NAT、端口映射、隧道。关键技术Docker macvlan 网络sever1sever21.开启网卡混杂模式1查看本机网卡名称,除lo和docker0我能用的是ens33ip link show2macvlan要求物理网卡必须开启混杂模式否则网卡会拒绝转发不属于自己的MAC地址数据包ip link set ens33 promisc on ip link set up ens332.创建macvlan网络效果容器会直接“寄生”在ens33上获得真实局域网IPdocker network create \ -d macvlan \ --subnet 10.0.0.0/24 \ --gateway 10.0.0.1 \ -o parentens33 \ //指定绑定物理网卡eth1 macvlan1①sever1②sever2这里我在设置sever2时出了一个问题显示网段被占用查一下发现是my_net2占用了这个网段将它删掉重新创建网络成功3.创建容器并指定静态IP容器 IPserver1 容器10.0.0.11server2 容器10.0.0.12sever1docker run -it --rm --network macvlan1 --ip 10.0.0.11 busyboxsever2:docker run -it --rm --network macvlan1 --ip 10.0.0.12 busybox成功三、Docker数据卷这个实验我用一台物理机实验目的用 NFS 做共享存储让多台 Docker 主机都能访问同一个目录实现容器数据共享、跨主机持久化。1.整体架构①NFS 服务器提供一个共享目录 /mnt/nfs②Docker 主机挂载 NFS 目录让容器使用③数据卷目录共享 → 所有容器看到的内容完全一样2.步骤1NFS 服务器端配置共享存储把 /mnt/nfs 目录共享给所有主机可读写、同步、root 权限可用yum install -y nfs-utils # 安装 NFS 工具 mkdir /mnt/nfs # 创建共享目录 echo /mnt/nfs *(rw,sync,no_root_squash) /etc/exports # 配置共享 systemctl start nfs # 启动 NFS2Docker 客户端主机配置把远端 NFS 目录挂载到本地 /mnt/nfs。此时本地写文件NFS 服务器也能看到yum install -y nfs-utils # 必须装否则无法挂载 NFS mkdir /mnt/nfs # 本地挂载点 mount 192.168.36.154:/mnt/nfs /mnt/nfs # 挂载远端 NFS3创建测试文件echo www.westos.org /mnt/nfs/index.html4Docker 运行容器使用 NFS 目录作为数据卷docker run -d --name web1 \ -v /mnt/nfs:/usr/share/nginx/html:ro \ nginx

更多文章