容器入门02-Harbor

如果Docker hub相当于github,那么Harbor就是gitlab,主要用于搭建私服,做内外网镜像的跳板使用。

0.官网

goharbor.io

1.部署

wget https://github.com/goharbor/harbor/releases/download/v1.10.0-rc2/harbor-offline-installer-v1.10.0-rc2.tgz
tar -zxvf harbor-offline-installer-v1.10.0-rc2.tgz		//解压后生成 harbor文件夹
mv harbor /usr/local/
cd /usr/local/harbor

编辑 harbor.yml 文件的主机名,并可看到默认UI登录的账号密码:admin Harbor12345

vi harbor.yml 

# Configuration file of Harbor

# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: master001
.....
# The path of cert and key files for nginx
certificate: /your/certificate/path
private_key: /your/private/key/path
.....

可以看出还需要配置 certificate 和 private_key 的路径

配置SSL

mkdir /usr/local/harbor/cert
cd cert

//创建CA证书
openssl genrsa -out ca.key 4096	

//创建签名证书	
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=master001" \
-key ca.key \
-out ca.crt

//生成服务器的私钥
openssl genrsa -out master001.key 4096

//CSR签名文件
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=master001" \
-key master001.key \
-out master001.csr

//生成服务器证书
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=master001
EOF

openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in master001.csr \
-out master001.crt
[root@master001 cert]# ll cert
total 28
-rw-r--r-- 1 root root 2029 Dec  8 14:27 ca.crt
-rw-r--r-- 1 root root 3243 Dec  8 14:25 ca.key
-rw-r--r-- 1 root root   17 Dec  8 14:31 ca.srl
-rw-r--r-- 1 root root 2061 Dec  8 14:31 master001.crt
-rw-r--r-- 1 root root 1704 Dec  8 14:29 master001.csr
-rw-r--r-- 1 root root 3243 Dec  8 14:28 master001.key
-rw-r--r-- 1 root root  231 Dec  8 14:30 v3.ext

继续配置 harbor.yml 文件的 certificate 和 private_key 路径:

certificate: /usr/local/harbor/cert/master001.crt
private_key: /usr/local/harbor/cert/master001.key

docker镜像文件编排:https://docs.docker.com/compose/install/

curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
systemctl start docker
sh /usr/local/harbor/install.sh 
# ……
# Harbor has been installed and started successfully.

Harbor启动成功后,会在当前目录生成 docker-compose.yml 文件。
这时可以登录Harbor的WebUI界面,直接输入IP地址就行。

注意:执行 docker-compose 命令时,当前目录下必须要有docker-compose.yml文件。

2.登录harbor

先配置本地的/etc/hosts文件

mkdir -p /etc/docker/certs.d/master001/
cd /usr/local/harbor/cert/
openssl x509 -inform PEM -in master001.crt -out master001.cert
cp master001.cert /etc/docker/certs.d/master001/
cp master001.key /etc/docker/certs.d/master001/
cp ca.crt /etc/docker/certs.d/master001/
systemctl restart docker
cd /usr/local/harbor
docker-compose up -d
docker login -u admin -p Harbor12345 master001
docker login -u admin -p Harbor12345 172.21.65.102	//此时用IP登录会报错
vi /etc/docker/daemon.json
{
"registry-mirrors":["https://master001"],
"insecure-registries":["172.21.65.102"]
}

systemctl restart docker
docker-compose up -d
docker login -u admin -p Harbor12345 172.21.65.102

当IP和主机名都能登录 harbor 私服后,查看如下文件,会根据是否登录而动态变化。

cat ~/.docker/config.json 
{
        "auths": {
                "172.21.65.102": {
                        "auth": "YWRtaW46SGFyYm9yMTIzNDU="
                },
                "master001": {
                        "auth": "YWRtaW46SGFyYm9yMTIzNDU="
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/19.03.5 (linux)"
        }
}

docker logout master001
cat ~/.docker/config.json 
{
        "auths": {
                "172.21.65.102": {
                        "auth": "YWRtaW46SGFyYm9yMTIzNDU="
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/19.03.5 (linux)"
        }
}

3.案例

在Harbor的UI页面点击创建项目 testdata 私有化项目,从docker hub官网拉去 hello-world 镜像,然后推到我们创建的 testdata 项目中。

docker pull hello-world
docker tag hello-world:latest 172.21.65.102/testdata/hello-world:v1
docker login -u admin -p Harbor12345 172.21.65.102		//登录私服后,即可推送
docker push 172.21.65.102/testdata/hello-world:v1

push成功后,我们尝试用当前机器从私服拉取镜像。

docker rmi 172.21.65.102/testdata/hello-world:v1		//先删除本地镜像
docker pull 172.21.65.102/testdata/hello-world:v1		//拉取
docker run 172.21.65.102/testdata/hello-world:v1		//运行

注意: 这里都是用IP做的 push操作,而没有用 hostname 做push,因为有坑在里面。
因为主机名一般没有配置域名,如:hostname.xxx
需要运维人员配置/etc/hosts和/etc/resolv.conf解析文件
172.21.65.102 master001.com master001

那如何用其他机器拉取镜像呢?

首先,需要新机器也装有docker,在新机器运行如下命令:

//创建相同的文件夹名字
mkdir -p /etc/docker/certs.d/master001/

//从部署harbor的机器上复制证书文件到新机器
scp /etc/docker/certs.d/master001/* 172.21.65.103:/etc/docker/certs.d/master001/

scp /etc/docker/daemon.json  172.21.65.103:/etc/docker/

systemctl restart docker

//配置hosts文件
vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.21.65.102 master001
172.21.65.103 master002

然后就可以登录私服、拉取镜像了

docker login -u admin -p Harbor12345 172.21.65.102

docker pull 172.21.65.102/testdata/hello-world:v1

//查看拉取的镜像
docker images

//运行
docker run 172.21.65.102/testdata/hello-world:v1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值