#9. Docker构建私有registry
## 9.1 启动registry
```
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
--restart=always docker重启时服务自动拉起
```
## 9.2 修改配置文件
```
vim /etc/docker/daemon.json 不存在时需要创建
{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100:5000"]
}
[root@docker docker]# systemctl restart docker
```
## 9.3 制作本地镜像并push到
```
[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镜像
配置: vim /etc/docker/daemon.json 和私有registry相同,也需要启动
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
systemctl restart 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
```
[root@oldboy ~]# docker login 10.0.0.100:5000
Username: oldguo
Password:
```
## 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
https://github.com/goharbor/harbor/tags 选择1.7.5以上的版本
第三步:上传到/opt,并解压
第四步:修改harbor.yml配置文件
hostname = 10.0.0.100
harbor_admin_password = 123456
第五步:执行install.sh
2. 使用方法:
修改各个节点的docker配置文件
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100:5000","10.0.0.100"],
"live-restore": true
}
systemctl restart docker
3. habor配置不启用https需要注释掉https
重启服务进行登录
# docker-compose down
# ./prepare:
# docker-compose up –d
4. 制作镜像并上传habor
[root@docker harbor]# docker tag nginx 10.0.0.100/old/nginx:v1
[root@docker harbor]# docker login 10.0.0.100
[root@docker harbor]# docker push 10.0.0.100/old/nginx:v1doc
5. 在节点中pull habor中的镜像
vim /etc/docker/daemon.json配置文件也需要修改
docker pull 10.0.0.100/oldguo/centos:v1
#12. Docker本地网络类型
## 12.1查看支持网络类型
```
docker network ls
```
## 12.2 测试使用各类网络类型
```
docker run network=xxx
none : 无网络模式
bridge : 默认模式,相当于NAT
host : 公用宿主机Network NameSapce
container:与其他容器公用Network Namespace,共用主机名 ip地址 端口号
```
# 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
ip link set eth0 promsic on (ubuntu或其他版本需要)
[root@docker ~]# docker run -it --network macvlan_1 --ip=10.0.0.11 oldguo/centos6.9-sshd:v1.0 /bin/bash
[root@docker ~]# docker run -it --network macvlan_1 --ip=10.0.0.12 centos:6.9 /bin/bash
```
#15. Docker 跨主机访问-overlay实现
```
(1)启动 consul 服务,实现网络的统一配置管理
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
consul:kv类型的存储数据库(key:value)
docker01、02上:
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网络
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