一、Docker仓库
docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。
二、私有仓库搭建
1、载入镜像
docker load -i registry2.tar
docker volume ls
docker volume prune
2、生成key和CA证书并发送
mkdir /root/certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt
cp /root/certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
3、更改解析
vim /etc/hosts
4、创建镜像
docker tag nginx:latest reg.westos.org/nginx:latest
docker run -d --name registry -v /opt/registry/:/var/lib/opt/registry/ -p 443:443 -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key registry
-v /opt/registry:/var/lib/registry
-p 5000:5000
5、导入
docker push reg.westos.org/nginx
curl -k https://reg.westos.org/v2/_catalog
6、配置阿里云加速器 不是用镜像加速器,从网络上拉取镜像的速度很慢!
vim /etc/docker/daemon.json
\\\
{
"registry-mirrors": ["https://hfz3ac1q.mirror.aliyuncs.com"]
}
///
systemctl daemon-reload
systemctl restart docker
三、Docker网络
1、Docker原生网络
docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分。 docker安装后会自动创建3种网络:bridge、host、none docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。 1.bridge模式 bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。 容器通过宿主机的NAT规则后可以访问外网。 容器的ip与桥接接口在一个网段,并且ip地址以网桥ip为基础递增,以网桥ip为网关,开启容器的时候宿主机就能ping通容器
2.host网络模式
docker run -it --name vm1 --network host busybox
当配置完容器busybox使用host网络模式之后,在宿主机和容器里ipaddr的结果是完全一样的 3.none模式
2、自定义网络
- 一个bridge网络是Docker中最常用的网络类型。桥接网络类似于默认bridge网络,但添加一些新功能(例DNS)并删除一些旧的能力
docker network rm mynet1
docker network create -d bridge mynet1
docker network inspect mynet1
docker network create --subnet 1.2.3.0/24 --gateway 1.2.3.1 mynet1
docker network ls
docker run -it --name vm1 --network mynet1 --ip 1.2.3.100 busybox
同一网桥下的是可以ping通的:
- 桥接到不同网桥上的容器,彼此是不通信的
- docker在设计上就是要隔离不同network的
那么如何使两个不同网桥的容器通信呢:使用 docker network connect命令为vm1添加一块my_net2 的网卡
docker network create --subnet 2.3.4.0/24 --gateway 2.3.4.1 mynet2
docker run -it --name vm3 --network mynet2 --ip 2.3.4.100 busybox
docker network connect mynet2 vm1
docker start vm1
docker container attach vm1
发现也能ping同其他容器指定网段:
3、Docker容器通信
1.使用名称
- 容器之间除了使用ip通信外,还可以使用容器名称通信
- docker 1.10开始,内嵌了一个DNS server
- dns解析功能必须在自定义网络中使用
- 启动容器时使用 --name 参数指定容器名称
原理图:
2.container模式
- 在容器创建时使用–network=container:vm1指定。(vm1指定的是运行的容器名)
- 处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信
docker run -it -d --name vm4 --network container:vm1 busybox
可以看出使用这种模式后vm1的网络和vm4完全相同,使用这种模式可以实现在一个容器上访问localhost即可访问另一个容器 3.link模式
docker run -it --name vm6 --link testplus:web busybox
4、跨主机容器网络
1.在两个虚拟机上各添加一个网卡eth1,并且编辑网络配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-eth1
///
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
\\\
ifup eth1
ip link set eth1 promisc on
2.两台主机上各创建macvlan网络 server1:
root@server1 ~]
b124690d2cb5ff06c1f9042fea13674a5369fa406b1d37db183491ae4d1ccde7
[root@server1 ~]
/
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
140: eth0@if139: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:14:00:64 brd ff:ff:ff:ff:ff:ff
inet 172.20.0.100/24 brd 172.20.0.255 scope global eth0
valid_lft forever preferred_lft forever
/
server2:
f8dd912398e8cfb44b5d51c6af7b767ab739f068405bc6d530387994fb5c6bbe
[root@server2 docker]
/
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
5: eth0@if4: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:14:00:c8 brd ff:ff:ff:ff:ff:ff
inet 172.20.0.200/24 brd 172.20.0.255 scope global eth0
valid_lft forever preferred_lft forever
两个容器就可以通信了: busybox工作在同一macvlan下测试相互通信。为容器指定macvlan运行时需要手动指定ip:
- 需要注意的是,macvlan会独占主机网卡,但可以使用vlan子接口(即在一个网卡上创建多个ip)实现多macvlan网络。
- vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id 取值为1~4094。
eg:
[root@server1 ~]
301c217c6857ebf1f5be948ae5c2758f083964b040fa45c5bb1f3e2032597b3a
[root@server2 ~]
e1f9231ea8c7a2860afa9fe2387f5e08875f187633ebff255e2e262ca0c817f1
四、企业级仓库Harbor搭建
1、将docker-compose二进制文件放入/usr/local/bin目录下
mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2、解压
tar zxf harbor-offline-installer-v1.10.1.tgz
cd harbor/
docker-compose --version
3、生成密钥认证
mkdir /data
cp -r /root/certs/ /data/
4、改配置
cd /root/harbor
vim /root/harbor/harbor.yml
./install.sh
docker-compose down
5、地址解析
vim /etc/hosts
///
172.25.51.1 server1 reg.westos.org
\\\
6、测试登陆
docker login reg.westos.org
docker tag nginx:latest reg.westos.org/library/nginx:latest
docker push reg.westos.org/library/nginx:latest
firefox访问,在访问端需配置本地解析(真机)
|