Docker仓库技术 第五节 --- 部署harbor企业级私有仓库;自定义网络;跨主机容器通信;Docker数据卷
一、Harbor 部署
1.先清理旧 Registry(解决冲突)
docker rm -f registry
额外清理(避免残留冲突)
# 清理 registry 相关镜像
docker rmi -f registry
# 查看是否还有遗留容器
docker ps -a
2.准备证书目录
(1)创建数据目录
mkdir -p /data
(2)把证书文件复制过去
cp -r certs /data
3.解压并配置Harbor
(1)解压离线安装包
tar zxf harbor-offline-installer-v2.14.0.tgz

cd harbor/

(2)复制配置模板
cp harbor.yml.tmpl harbor.yml

(3)编辑配置
vim harbor.yml

域名确定正确

证书与密钥的路径设置成自己的(我这里是直接在root下部署的,按照本文流程下你们的应该在data下)

重新设置账号密码

4.一键部署 Harbor(带 Trivy 漏洞扫描)
./install.sh --with-trivy


5.部署后完成验证
(1)查看容器
会看到:harbor-core、harbor-nginx、harbor-db、harbor-trivy 等
docker ps
(2)浏览器访问
账号:admin 密码:编辑配置里自己设置的部分
https://reg.westos.org

(3)查看镜像
docker compose images

二、自定义网络(单主机多容器互联)
实验目的:
验证 Docker 自定义网络的网络隔离特性,以及容器多网卡跨网络通信的实现方式。(让两个原本属于不同网络的容器,通过 “给容器附加虚拟网卡” 的方式,实现跨网络通信)
1.创建两个自定义桥接网络my_net1和my_net2
(1)my_net1 由 Docker 自动分配网段
docker network create my_net1

查看 Docker 自定义网络 my_net21的完整详细配置信息,属于 Docker 网络管理的核心查询命令

(2)my_net2 手动指定网段 10.0.0.0/24
docker network create --subnet 10.0.0.0/24 --gateway 10.0.0.1 my_net2

查看 Docker 自定义网络 my_net2 的完整详细配置信息,属于 Docker 网络管理的核心查询命令

2.在 my_net1 中运行 nginx 容器 web1
web1 仅接入 my_net1,从该网络自动获取 IP。
同一网络内的容器可通过 容器名 DNS 解析 互相访问
docker run -d --name web1 --network my_net1 nginx

3.在 my_net1 中运行 busybox 并测试连通性
同一 bridge 网络内,Docker 内置 DNS 服务器会将容器名解析为对应 IP。
因此可以直接 ping web1 并连通
docker run -it --rm --network my_net1 busybox

4.在 my_net2 中运行 busybox 并测试连通性
不同 bridge 网络之间默认隔离,无法路由,也无法解析对方容器名。
结果:ping: bad address ‘web1’,连通失败。
docker run -it --rm --network my_net2 busybox

5.创建容器 demo 并仅加入 my_net2
此时 demo 仅属于 my_net2,仍然无法访问 my_net1 中的 web1
docker run -it --rm --network my_net2 --name demo busybox
6.将容器 demo 额外连接到 my_net1
docker network connect 的作用是:
①为运行中的容器额外挂载一张虚拟网卡(veth pair),并将其接入指定网络。
②执行后,demo 同时属于 my_net1 和 my_net2,拥有 双网卡、双 IP。
③容器自动获得两个网络的 DNS 解析能力与路由
docker network connect my_net1 demo

7.再次进入demo测试连通性
docker attach demo
ping web1

成功!
三、跨主机容器通信
实验前准备:
将VM中的两台centos克隆虚拟机的网络适配器改为自定义的仅主机模式

实验目的:
实现 两台不同物理机上的 Docker 容器,直接通过二层网络互通,并且容器使用真实局域网 IP,不需要 NAT、端口映射、隧道。
关键技术:
Docker macvlan 网络
sever1,sever2
1.开启网卡混杂模式
(1)查看本机网卡名称,除lo和docker0我能用的是ens33
ip link show

(2)macvlan要求物理网卡必须开启混杂模式,否则网卡会拒绝转发不属于自己的MAC地址数据包
ip link set ens33 promisc on
ip link set up ens33


2.创建macvlan网络
效果:容器会直接“寄生”在ens33上,获得真实局域网IP
docker network create \
-d macvlan \
--subnet 10.0.0.0/24 \
--gateway 10.0.0.1 \
-o parent=ens33 \ //指定绑定物理网卡eth1
macvlan1
①sever1

②sever2
这里我在设置sever2时出了一个问题,显示网段被占用

查一下发现是my_net2占用了这个网段,将它删掉


重新创建网络,成功

3.创建容器并指定静态IP
容器 IP:
server1 容器:10.0.0.11
server2 容器:10.0.0.12
sever1:
docker run -it --rm --network macvlan1 --ip 10.0.0.11 busybox

sever2:
docker run -it --rm --network macvlan1 --ip 10.0.0.12 busybox
成功!
三、Docker数据卷
这个实验我用一台物理机
实验目的:
用 NFS 做共享存储,让多台 Docker 主机都能访问同一个目录,实现容器数据共享、跨主机持久化。
1.整体架构
①NFS 服务器:提供一个共享目录 /mnt/nfs
②Docker 主机:挂载 NFS 目录,让容器使用
③数据卷:目录共享 → 所有容器看到的内容完全一样
2.步骤
(1)NFS 服务器端配置(共享存储)
把 /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 # 启动 NFS

(2)Docker 客户端主机配置
把远端 NFS 目录,挂载到本地 /mnt/nfs。此时本地写文件,NFS 服务器也能看到
yum install -y nfs-utils # 必须装,否则无法挂载 NFS
mkdir /mnt/nfs # 本地挂载点
mount 192.168.36.154:/mnt/nfs /mnt/nfs # 挂载远端 NFS


(3)创建测试文件
echo www.westos.org > /mnt/nfs/index.html

(4)Docker 运行容器,使用 NFS 目录作为数据卷
docker run -d --name web1 \
-v /mnt/nfs:/usr/share/nginx/html:ro \
nginx
更多推荐


所有评论(0)