小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
9. Docker 构建私有 registry
9.1 启动 registry
启动一个容器作为 registry 服务。类似于 nginx 的一个服务。我们的镜像也是存在容器当中。
docker pull registry
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
--restart=always 参数作用:docker 服务或者服务器重启,所有的容器也都会重启。
另外一种方式是修改配置文件 /etc/docker/daemon.json,在配置文件中添加如下内容,也可以实现相同功能。所有容器都会重启。
"live-restore" : true
但是一般使用不多,因为有些临时容器我们可能不想让他重启。
9.2 修改配置文件
修改 /etc/docker/daemon.json 文件,添加 insecure-registries,配置仓库地址。
{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
"insecure-registries": ["82.156.85.205:5000"]
}
重启 docker:
systemctl restart docker
9.3 制作本地镜像并 push 到仓库
以 nginx 为例:
- 首先我们给 nginx:latest 打一个 tag。tag 标准格式:
仓库地址:端口号/项目名/镜像名:版本号
docker tag nginx:latest 82.156.85.205:5000/wys/nginx:v1
- push 镜像
docker push 82.156.85.205:5000/wys/nginx
9.4 另一台机器 pull 镜像
为了更加清晰的展示,我们可以把所有的容器、镜像删除了
docker container rm -f `docker container ls -a -q`
docker iamge rmi -f `docker image ls -a -q`
另一个镜像也要知道私有仓库的存在。需要修改配置文件:
{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
"insecure-registries": ["82.156.85.205:5000"]
}
pull 镜像
docker pull 82.156.85.205:5000/wys/nginx:v1
9.5 本地仓库加安全认证
生成用户名和密码:
yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd -Bbn wys 123 > /opt/registry-auth/htpasswd
9.6 重新启动带有秘钥功能的 registry 容器
docker container rm -f `docker container ls -a -q`
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
docker tag centos:6.9 82.156.85.205:5000/wys/centos:6.9
直接 push 会失败。
[root@VM-0-3-centos ~]# docker push 82.156.85.205:5000/wys/centos:6.9
The push refers to a repository [82.156.85.205:5000/wys/centos]
aaa5621d7c01: Preparing
no basic auth credentials
我们需要登录之后才可以 push。
[root@VM-0-3-centos ~]# docker login 82.156.85.205:5000
Username: wys
Password:
Login Succeeded
docker push 82.156.85.205:5000/wys/centos:6.9
10. 重启 docker 服务,容器全部退出的解决办法
方法一:docker run --restart=always
方法二:在 /etc/docker/daemon.json 配置文件中增加如下配置:
"live-restore": true
11. habor 实现图形化 register
- 安装 docker 和 docker-compose
yum install -y docker-compose
-
下载 harbor-offline-installer-vxxx.tgz
-
上传到 /opt 目录下,并解压。
tar -zxvf harbor-offline-installer-v1.7.7.tgz
- 修改 host
cd harbor/
vim harbor.cfg
hostname = 82.156.85.205
harbor_admin_password = 123456
- 安装 harbor(注意,harbor 会占用机器 80 端口,如果有容器已经占用了宿主机 80 端口,则有可能启动失败,需要关掉该容器)
./install.sh
- 查看安装是否成功。
安装成功之后,会提示如下信息。前往访问即可
Now you should be able to visit the admin portal at http://82.156.85.205.
For more details, please visit https://github.com/goharbor/harbor .
同时 harbor 会在服务器上启动一些容器,有的以 vmware 开头,有的以 goharbor 开头,应该是版本所致。
[root@VM-0-3-centos harbor]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19fbad763967 goharbor/nginx-photon:v1.7.7 "nginx -g 'daemon ..." 4 minutes ago Up 4 minutes (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
a818a71853e1 goharbor/harbor-jobservice:v1.7.7 "/harbor/start.sh" 4 minutes ago Restarting (1) About a minute ago harbor-jobservice
d3a54898f5dc goharbor/harbor-portal:v1.7.7 "nginx -g 'daemon ..." 4 minutes ago Up 4 minutes (healthy) 80/tcp harbor-portal
66c747a75195 goharbor/harbor-core:v1.7.7 "/harbor/start.sh" 4 minutes ago Restarting (1) About a minute ago harbor-core
8849b82b14b8 goharbor/harbor-db:v1.7.7 "/entrypoint.sh po..." 4 minutes ago Up 4 minutes (healthy) 5432/tcp harbor-db
d12304a1b055 goharbor/registry-photon:v2.6.2-v1.7.7 "/entrypoint.sh /e..." 4 minutes ago Restarting (1) About a minute ago registry
8a87f024c379 goharbor/harbor-adminserver:v1.7.7 "/harbor/start.sh" 4 minutes ago Restarting (1) About a minute ago harbor-adminserver
9a40573767ed goharbor/redis-photon:v1.7.7 "docker-entrypoint..." 4 minutes ago Restarting (1) About a minute ago redis
308fafcc467e goharbor/harbor-registryctl:v1.7.7 "/harbor/start.sh" 4 minutes ago Restarting (1) About a minute ago registryctl
15184592eca1 goharbor/harbor-log:v1.7.7 "/bin/sh -c /usr/l..." 4 minutes ago Up 4 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
- 测试访问,在浏览器上访问
http://82.156.85.205

-
进去之后我们就可以访问了。
-
修改 docker 配置文件
{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],
"insecure-registries": ["82.156.85.205:5000","82.156.85.205"],
"live-restore": true
}
- 重启 docker
systemctl restart docker
- 测试推送镜像