依赖环境
安装docker及docker-compose
下载离线安装包
1
2
|
wget -c https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.0.tgz
tar zxvf harbor-offline-installer-v1.9.0.tgz
|
编辑配置文件
主要的配置文件是harbor.yml
**1)**配置hostname,这是必须的,如hostname: register.linkscue.com
**2)**配置https,若不配置,后续的docker login会出现登录不上以及pull不下来的镜像的问题
1
2
3
4
5
6
7
|
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /path/to/ssl/Nginx/1_register.linkscue.com_bundle.crt
private_key: /path/to/ssl/Nginx/2_register.linkscue.com.key
|
3)[可选]配置admin密码,如harbor_admin_password: Qs2Zp6aOxS
4)[可选]配置数据库密码
1
2
3
4
|
# Harbor DB configuration
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: 82YHndmCjh
|
PS:以上粘出来的密码,都是我随机生成的,并非我真实环境部署所使用的密码~
直接部署
部署也很简单,直接进入 harbor目录,执行 ./install.sh
即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
$ cd harbor
$ ./install.sh
[Step 0]: checking installation environment ...
Note: docker version: 19.03.2
Note: docker-compose version: 1.24.1
[Step 1]: loading Harbor images ...
# ...
[Step 2]: preparing environment ...
# ...
[Step 3]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registry ... done
Creating harbor-db ... done
Creating harbor-portal ... done
Creating redis ... done
Creating registryctl ... done
Creating harbor-core ... done
Creating nginx ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at https://register.linkscue.com.
For more details, please visit https://github.com/goharbor/harbor .
|
像这样子就表示已经部署成功了。
PS:限于篇幅,部分输出内容有省略。
配置supervisor自启、防误杀
一般情况下,docker启动的时候会把restart=always
的容器给启动起来,但还是会遇到有人不小心把docker容器给误杀docker rm
的情况,这波操作不是给自己的,是防止其他人把这里的程序给docker rm
造成不能正常拉取镜像的情况。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
cd /path/to/harbor
# 安装并启用supervisor
yum install -y supervisor
systemctl enable supervisord
systemctl start supervisord
systemctl status supervisord
# 编写配置文件
cat <<EOF > /etc/supervisord.d/harbor.ini
[program:harbor]
command=docker-compose up
directory=$PWD
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=7
stdout_logfile=$PWD/harbor.log
EOF
# 更新supervisor配置文件并运行进程
supervisorctl reread
supervisorctl update
supervisorctl status
|
这波操作下来,即使容器被docker rm
了,也会自觉的正常启动。奈斯~
可以自觉的测试一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
$ docker rm -f $(docker ps -a | grep goharbor | awk '{print $1}')
f13f92a997ab
d93f3a3c992e
6cb9ac09ca18
cfcf50607fe5
712e42f808e9
f74cb4f66e6d
c0257f40d975
321aa1f3440c
e167ca62da66
$ docker ps | grep goharbor
a128e7b11c8e goharbor/nginx-photon:v1.9.0 "nginx -g 'daemon of…" 9 seconds ago Up 8 seconds (health: starting) 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp nginx
e7186fcb7ab6 goharbor/harbor-jobservice:v1.9.0 "/harbor/harbor_jobs…" 9 seconds ago Up 8 seconds (health: starting) harbor-jobservice
5a7364ea9762 goharbor/harbor-core:v1.9.0 "/harbor/harbor_core" 10 seconds ago Up 9 seconds (health: starting) harbor-core
fe73da41210c goharbor/harbor-registryctl:v1.9.0 "/harbor/start.sh" 11 seconds ago Up 9 seconds (health: starting) registryctl
481cdad7c00c goharbor/harbor-db:v1.9.0 "/docker-entrypoint.…" 11 seconds ago Up 9 seconds (health: starting) 5432/tcp harbor-db
6a6ed86ab18f goharbor/redis-photon:v1.9.0 "redis-server /etc/r…" 11 seconds ago Up 9 seconds (health: starting) 6379/tcp redis
a4e4a24c7612 goharbor/harbor-portal:v1.9.0 "nginx -g 'daemon of…" 11 seconds ago Up 9 seconds (health: starting) 8080/tcp harbor-portal
309cdc31a637 goharbor/registry-photon:v2.7.1-patch-2819-v1.9.0 "/entrypoint.sh /etc…" 11 seconds ago Up 9 seconds (health: starting) 5000/tcp registry
479cdbc68266 goharbor/harbor-log:v1.9.0 "/bin/sh -c /usr/loc…" 14 seconds ago Up 10 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log
|
看,即使杀死了,还是自动的再次拉起来。
测试私有仓库部署情况
为了测试私有仓库是否搭建完成,显而易见的方式就是检查是否能docker login
,以及上传镜像、下载镜像。
为了配合这个事情,还需要做一些工作:
1. 管理员登录
打开 https://register.linkscue.com ,使用admin
账号和密码进行登录。
2. 创建项目Project
这个依据自身情况而定,一般对应用户名去创建即可,如scue
具体操作:项目→新建项目,创建项目时,可以选择把项目进行公开,或者是不公开,不公开就需要docker login之后才可以docker pull。
3. 创建用户User
依据自身情况而定,一般生产线大家都使用相同的名字,如scue
具体操作:系统管理→用户管理→创建用户
并且,在项目→scue→成员中,添加用户scue
作为项目管理员。
4. docker login
在此之前,使用刚刚创建账号进行登录:
1
2
3
4
5
6
7
8
|
$ docker login register.linkscue.com
Username: scue
Password:
WARNING! Your password will be stored unencrypted in /home/root1/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
|
5. docker push
我们可以尝试把 alpine:3.8
推送至私有仓库,可以这样子操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ docker pull alpine:3.8
3.8: Pulling from library/alpine
c87736221ed0: Pull complete
Digest: sha256:04696b491e0cc3c58a75bace8941c14c924b9f313b03ce5029ebbc040ed9dcd9
Status: Downloaded newer image for alpine:3.8
docker.io/library/alpine:3.8
$ docker tag alpine:3.8 register.linkscue.com/scue/alpine:3.8
$ docker push register.linkscue.com/scue/alpine:3.8
The push refers to repository [register.linkscue.com/scue/alpine]
d9ff549177a9: Pushed
3.8: digest: sha256:899a03e9816e5283edba63d71ea528cd83576b28a7586cf617ce78af5526f209 size: 528
|
这样子就可以看到,已经成功把镜像推送至私有仓库了。
6. docker pull
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$ docker rmi alpine:3.8
Untagged: alpine:3.8
Untagged: alpine@sha256:04696b491e0cc3c58a75bace8941c14c924b9f313b03ce5029ebbc040ed9dcd9
$ docker rmi register.linkscue.com/scue/alpine:3.8
Untagged: register.linkscue.com/scue/alpine:3.8
Untagged: register.linkscue.com/scue/alpine@sha256:899a03e9816e5283edba63d71ea528cd83576b28a7586cf617ce78af5526f209
Deleted: sha256:dac7051149965716b0acdcab16380b5f4ab6f2a1565c86ed5f651e954d1e615c
Deleted: sha256:d9ff549177a94a413c425ffe14ae1cc0aa254bc9c7df781add08e7d2fba25d27
$ docker pull register.linkscue.com/scue/alpine:3.8
3.8: Pulling from scue/alpine
c87736221ed0: Pull complete
Digest: sha256:899a03e9816e5283edba63d71ea528cd83576b28a7586cf617ce78af5526f209
Status: Downloaded newer image for register.linkscue.com/scue/alpine:3.8
register.linkscue.com/scue/alpine:3.8
|
可以看到,在把旧的镜像删除了之后,再通过docker pull
可以把我们刚刚push的镜像拉取下来了。
至此,测试完成~