Docker云计算详解(三)

7 篇文章 0 订阅
3 篇文章 0 订阅

9. Docker构建私有registry

add和copy的文件一定要放在dockerfile目录下。然后不能删除none的镜像,导出的时候相关联的镜像都是打包到一起的。
在这里插入图片描述之前用dockerfile做的镜像分发给别人后,别人还要build一下,不如直接弄好放到一个私人的registry里。

9.1 启动registry

–restart这个参数就是当docker整个服务启动时,所有的镜像都启动,看下面这条命令。

docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry  registry

9.2 修改配置文件

vim /etc/docker/demon.json
在这里插入图片描述

{
  "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
   "insecure-registries": ["10.0.0.100:5000"]
}

[root@docker docker]# systemctl  restart docker

9.3 制作本地镜像并push到

在这里插入图片描述 必须按照上图的命名规范(地址和端口)来对镜像命名,然后push到registry。

[root@docker ~]# docker tag nginx 10.0.0.100:5000/oldguo/nginx:v1
[root@docker ~]# docker images
[root@docker ~]# docker push 10.0.0.100:5000/oldguo/nginx:v1

9.4 异地进行pull镜像

[root@docker ~]# docker pull  10.0.0.100:5000/oldguo/nginx:v1

在这里插入图片描述

9.5 本地仓库加安全认证

生成密码:
yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd  -Bbn oldguo 123 > /opt/registry-auth/htpasswd

9.6 重新启动带有秘钥功能的registry容器

docker rm -f `docker ps -aq`
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry  --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry 

9.7 push镜像,需要进行login

在这里插入图片描述如上图不能直接push了。

[root@oldboy ~]# docker login 10.0.0.100:5000
Username: oldguo  
Password: 

在这里插入图片描述
pull是直接的。

10. 重启docker服务,容器全部退出的解决办法


方法一:docker run  --restart=always

方法二:"live-restore": true
docker server配置文件/etc/docker/daemon.json参考
{
.....
......
 "live-restore": true
}

11. habor实现图形化register

1. 安装:
第一步:安装docker和docker-compose
yum install -y docker-compose 
第二步:下载harbor-offline-installer-vxxx.tgz
第三步:上传到/opt,并解压
第四步:修改harbor.cfg配置文件
hostname = 10.0.0.100
harbor_admin_password = 123456
第五步:执行install.sh
用户名默认admin

在这里插入图片描述 安装完后如上所示。

2. 使用方法: 
vim /etc/docker/demon.json
修改各个节点的docker配置文件

{
  "registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
  "insecure-registries": ["10.0.0.100:5000","10.0.0.100"],
  "live-restore": true    //docker重启里面的容器也自动重启。
}
systemctl restart docker
  1. 在habor中添加项目
    这一步就是对应的打标签的/oldboy,权限设置为公开。
    在这里插入图片描述下图是push完后看到的镜像。
    在这里插入图片描述
5. 制作镜像并上传habor 
[root@docker harbor]# docker tag centos:6.9 10.0.0.100/oldguo/centos:v1
[root@docker harbor]# docker login 10.0.0.100
[root@docker harbor]# docker push 10.0.0.100/oldguo/centos:v1

6. 在节点中pull habor中的镜像
docker pull 10.0.0.100/oldguo/centos:v1

12. Docker本地网络类型

12.1查看支持网络类型

docker network ls

12.2 测试使用各类网络类型

如下host方式:
在这里插入图片描述在这里插入图片描述如上图,相当于直接穿透访问容器(host不常用)!
下图是container模式,当一号容器挂了的时候,启动二号容器,一号容器里面的服务直接由二号容器接管,也就是一二号容器共用一个ip和端口
在这里插入图片描述

docker run network=xxx
none : 无网络模式
bridge : 默认模式,相当于NAT,bridge只提供了容器访问外网的功能和容器之间的访问,并不能让外网直接到容器,外网进入容器是通过iptables进行端口映射,然后对于跨主机的容器访问比较麻烦。
host : 公用宿主机Network NameSapce(也就是容器和宿主机共用ip,主机名,端口号)可以访问外网,然后宿主机如果启了ssh,那么容器是启不了ssh的,这时可以改容器里面ssh的端口。然后主机内容器与容器之间访问通过端口号区分。
container:与其他容器公用Network Namespace

补充一条命令,退出状态的容器都删掉。
在这里插入图片描述

13. Docker跨主机网络介绍

macvlan
overlay

#14. Docker跨主机访问-macvlan实现
macvlan理解为一个虚拟的网络设备通道。

docker network create --driver macvlan --subnet=100.0.0.0/24 --gateway=100.0.0.254 -o parent=eth0 macvlan_1(不同的两台主机都要执行该命令,他们的通道名称为macvlan_1,地址段自设定)
ip link set eth0 promsic on (ubuntu或其他版本需要)

需将两台主机ipv4转发改成1
在这里插入图片描述然后两台主机启动容器
在这里插入图片描述如果两主机按照上述命令执行,ip是一样的,于是分别执行下面两条命令。

[root@docker ~]# docker run -it --network macvlan_1 --ip=100.0.0.11 oldguo/centos6.9-sshd:v1.0  /bin/bash
[root@docker ~]# docker run -it --network macvlan_1 --ip=100.0.0.12 centos:6.9  /bin/bash
ip要写刚刚通道的地址段地址。

macvlan这种方式只要通道名字是一样的,都可以互相访问,但只能是本圈子内,出了这个圈子就不行了,也不能访问外网。

#15. Docker 跨主机访问-overlay实现
macvlan的地址只能人工管理,很容易出现地址相同。
如下图所示overlap:
在这里插入图片描述每个容器两块网卡,一块负责与docker0联系,一块负责与另一台主机的容器网卡联系,然后还需要一个容器作为统一配置管理,专门管理ip地址配置,避免重复。

(1)启动 consul 服务,实现网络的统一配置管理,consul是个容器,也需要从网上下载
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

consul:kv类型的存储数据库(key:value)
docker01、02上:
 然后我们需要让各主机能访问到该consul

在这里插入图片描述

两边都要改
vim  /etc/docker/daemon.json
{
 "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
 "cluster-store": "consul://10.0.0.100:8500",
 "cluster-advertise": "10.0.0.100:2376"
}

vim  /etc/docker/daemon.json
{
 "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
 "cluster-store": "consul://10.0.0.100:8500",
 "cluster-advertise": "10.0.0.101:2376"
}


vim /etc/docker/daemon.json 
##vim /usr/lib/systemd/system/docker.service(新版本才改)
##systemctl daemon-reload 
systemctl restart docker

2)创建overlay网络(类似于macvlan,但是overlay只需要一边执行就行了)
docker network create -d overlay --subnet 172.116.0.0/24 --gateway 172.11.0.254  overlay

3)两边启动容器测试
docker run -it --network  overlay   busybox /bin/sh
每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
 新版本才改
 vim /usr/lib/systemd/system/docker.service
 ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store=consul://10.0.0.100:8500 --cluster-advertise=10.0.0.100:2376 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值