Docker构建私有registry(仓库)
#1 启动registry
[root@docker ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
# --restart=always 不管是docker服务重启还是服务器重启,只要docker服务起来,就帮我把这个容器启动
#2 修改配置文件
[root@docker lamp]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://yown2gka.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100:5000"]
}
[root@docker docker]# systemctl restart docker
#3 制作本地镜像并push到registry
# 必须要先打标记,才能push
[root@docker ~]# docker tag nginx 10.0.0.100:5000/alnk/nginx:v1.0
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.100:5000/alnk/nginx v1.0 f7bb5701a33c 11 days ago 126MB
nginx latest f7bb5701a33c 11 days ago 126MB
[root@docker ~]# docker push 10.0.0.100:5000/alnk/nginx:v1.0
#4 异地进行pull镜像(另外一台主机测试)
[root@docker02 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://yown2gka.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100:5000"]
}
[root@docker02 ~]# systemctl restart docker
[root@docker02 ~]# docker pull 10.0.0.100:5000/alnk/nginx:v1.0
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.100:5000/alnk/nginx v1.0 f7bb5701a33c 11 days ago 126MB
#5 本地仓库加安全认证
#在安装registry的那台服务器进行
#生成密码:
[root@docker ~]# yum install httpd-tools -y
[root@docker ~]# mkdir /opt/registry-auth/ -p
[root@docker ~]# htpasswd -Bbn alnk 123 > /opt/registry-auth/htpasswd
[root@docker ~]# cat /opt/registry-auth/htpasswd
alnk:$2y$05$CuUlxfhJOnu4ymeIMY3l0.VWTWirqOZ8fVklpy43CFxii1Aup/0TK
#6 重新启动带有秘钥功能的registry容器
[root@docker ~]# docker container ls -a |grep registry
24055607a16f registry "/entrypoint.sh /etc…" 9 minutes ago Up 8 minutes 0.0.0.0:5000->5000/tcp registry
[root@docker ~]# docker container stop 24055607a16f
24055607a16f
[root@docker ~]# docker container rm 24055607a16f
24055607a16f
[root@docker ~]# docker container ls -a |grep registry
[root@docker ~]#
[root@docker ~]# 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
#7 push镜像,需要进行login
[root@docker ~]# docker tag nginx 10.0.0.100:5000/alnk/nginx:v2.0
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.100:5000/alnk/nginx v2.0 f7bb5701a33c 11 days ago 126MB
[root@docker ~]# docker push 10.0.0.100:5000/alnk/nginx:v2.0
The push refers to repository [10.0.0.100:5000/alnk/nginx]
75248c0d5438: Preparing
49434cc20e95: Preparing
556c5fb0d91b: Preparing
no basic auth credentials
[root@docker ~]# docker login 10.0.0.100:5000
Username: alnk
Password:
Login Succeeded
[root@docker ~]# docker push 10.0.0.100:5000/alnk/nginx:v2.0
v2.0: digest: sha256:36b77d8bb27ffca25c7f6f53cadd059aca2747d46fb6ef34064e31727325784e size: 948
[root@docker ~]#
#8 然后测试pull,也需要进行验证(这里网上说不用密码,暂时还没弄清楚)
[root@docker02 ~]# docker pull 10.0.0.100:5000/alnk/nginx:v2.0
Error response from daemon: Get http://10.0.0.100:5000/v2/alnk/nginx/manifests/v2.0: no basic auth credentials
[root@docker02 ~]# docker login 10.0.0.100:5000
Username: alnk
Password:
Login Succeeded
[root@docker02 ~]# docker pull 10.0.0.100:5000/alnk/nginx:v2.0
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.0.100:5000/alnk/nginx v2.0 f7bb5701a33c 11 days ago 126MB
重启docker服务,容器全部退出的解决办法
#方法一:在启动容器的时候加上 --restart=always 参数
docker run --restart=always xxxxxxx
#方法二:docker server配置文件 /etc/docker/daemon.json 加入这个参数
{
"live-restore": true
}
habor实现图形化register(仓库)
系统版本:centos7.6
docker版本:Docker version 17.06.2-ce, build cec0b72
docker-compse版本:docker-compose version 1.18.0, build 8dd22a9
harbor版本:harbor-offline-installer-v1.8.0.tgz
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的
Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能
1 安装
1 安装docker和docker-compose
前面已经安装好docker了,具体可以看 01-docker容器1 中的安装步骤
https://www.cnblogs.com/lichengguo/p/15152993.html
安装docker-compose
[root@docker ~]# yum install -y docker-compose
2 下载harbor-offline-installer-vxxx.tgz
github地址:https://goharbor.io/
https://github.com/goharbor/harbor/releases/tag/v1.8.0
3 上传到/opt 并解压
[root@docker opt]# ll
-rw-r--r-- 1 root root 552897681 Jan 9 10:36 harbor-offline-installer-v1.8.0.tgz
[root@docker opt]# tar -zxvf harbor-offline-installer-v1.8.0.tgz -C /usr/local/
4 修改harbor.cfg配置文件
[root@docker opt]#cd /usr/local/harbor
[root@docker harbor]# vim harbor.yml
5 执行install.sh
注意:需要在安装目录下执行命令
[root@docker harbor]# ./prepare
[root@docker harbor]# ./install.sh
[root@docker harbor]# docker-compose ps
2 使用方法 (配置免https)
[root@docker harbor]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100"],
}
重启docker服务
[root@docker harbor]# systemctl daemon-reload
[root@docker harbor]# systemctl restart docker
3 重启harbor服务
# cd 到 harbor的安装目录
[root@docker harbor]# cd /usr/local/harbor
[root@docker harbor]# docker-compose stop
[root@docker harbor]# docker-compose up -d
4 在habor中添加项目
注意:用谷歌浏览器打开
账号:admin 密码:123456
5 制作镜像并上传habor
[root@docker harbor]# docker images |grep -v goharbor|grep nginx
nginx latest f7bb5701a33c 11 days ago 126MB
# 注意 这里的alnk是上面web界面建立的项目
[root@docker harbor]# docker tag nginx 10.0.0.100/alnk/nginx:v1.0
[root@docker harbor]# docker images |grep -v goharbor|grep nginx
10.0.0.100/alnk/nginx v1.0 f7bb5701a33c 11 days ago 126MB
nginx latest f7bb5701a33c 11 days ago 126MB
[root@docker harbor]# docker push 10.0.0.100/alnk/nginx:v1.0
没有认证,不能push
[root@docker harbor]# docker login 10.0.0.100
[root@docker harbor]# docker push 10.0.0.100/alnk/nginx:v1.0
在web界面查看
6 在10.0.0.101节点中pull habor中的镜像
1 先要安装docker基础环境
略
2 修改docker配置文件
[root@docker02 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
"insecure-registries": ["10.0.0.100"]
}
重启docker服务
[root@docker02 ~]# systemctl daemon-reload
[root@docker02 ~]# systemctl restart docker
3 拉取habor中的镜像
[root@docker02 ~]# docker pull 10.0.0.100/alnk/nginx:v1.0
Docker本地网络类型
1查看支持网络类型
[root@docker opt]# docker network ls
2 四种网络
1 none
none : 无网络模式,这种没有ip,可以在容器里随便玩,没有多大意义
[root@docker02 ~]# docker run -it --network=none centos:6.9 /bin/bash
2 container(k8s常用)
与其他容器公用Network Namespace
要注意的是这种公用container类型的端口是谁先用某个端口,谁就占了,后来的没法使用这个端口
这里可以看出起了2个centos6.9的容器,他们的IP是一样的,网络共享了
3 host : 公用宿主机Network NameSapce
这种就是和宿主机共用端口,谁先占谁用,但是性能最高,所以我们在构建镜像的时候使用了这个参数,就是为了统一网络类型,提高构建镜像的效率
4 bridge : 默认模式,相当于NAT(容器默认使用的模式)
Docker跨主机网络介绍
这里只介绍 macvlan、overlay 这两种。跨主机容器网络方案有很多种
1 Docker跨主机访问-macvlan实现(不能访问外网)
10.0.0.100 和 10.0.0.101 两台虚拟机都要执行
[root@docker opt]# 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或其他版本需要)
10.0.0.100 上执行
注意:这里用centos6.9基础镜像启动容器,然后在容器中安装了一个ping命令,然后在把容器commit为镜像,在启动容器的
[root@docker opt]# docker run -it --network macvlan_1 --ip=100.0.0.11 contos6.9_ssh_v1.0 /bin/bash
10.0.0.101 上执行
[root@docker02 ~]# docker run -it --network macvlan_1 --ip=100.0.0.12 centos:6.9 /bin/bash
测试。在10.0.0.100 上的容器ping 10.0.0.101上的容器
2 Docker 跨主机访问-overlay实现
1 启动 consul 服务,实现网络的统一配置管理(在10.0.0.100 这台机器上执行)
[root@docker ~]# docker run -d --restart=always -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
#consul:kv类型的存储数据库(key:value)
docker01(10.0.0.100)
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"
}
systemctl daemon-reload
systemctl restart docker
docker02(10.0.0.101)
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"
}
systemctl daemon-reload
systemctl restart docker
2 创建overlay网络(在10.0.0.100 这台机器上执行)
[root@docker ~]# docker network create -d overlay --subnet 172.16.0.0/24 --gateway 172.16.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