一、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

更多推荐