docker 学习(5)—— 私有仓库构建、图形化界面 harbor

720 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

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 为例:

  1. 首先我们给 nginx:latest 打一个 tag。tag 标准格式:仓库地址:端口号/项目名/镜像名:版本号

docker tag nginx:latest 82.156.85.205:5000/wys/nginx:v1

  1. 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

  1. 安装 docker 和 docker-compose

yum install -y docker-compose

  1. 下载 harbor-offline-installer-vxxx.tgz

  2. 上传到 /opt 目录下,并解压。


tar -zxvf harbor-offline-installer-v1.7.7.tgz

  1. 修改 host

cd harbor/

vim harbor.cfg

hostname = 82.156.85.205

harbor_admin_password = 123456

  1. 安装 harbor(注意,harbor 会占用机器 80 端口,如果有容器已经占用了宿主机 80 端口,则有可能启动失败,需要关掉该容器)

./install.sh

  1. 查看安装是否成功。

安装成功之后,会提示如下信息。前往访问即可


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

  1. 测试访问,在浏览器上访问 http://82.156.85.205

harbor login

  1. 进去之后我们就可以访问了。

  2. 修改 docker 配置文件


{

"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"],

"insecure-registries": ["82.156.85.205:5000","82.156.85.205"],

"live-restore": true

}

  1. 重启 docker

systemctl restart docker

  1. 测试推送镜像