docker搭建私有仓库

Docker搭建私有仓库

一、官方标配:Registry私有镜像仓库

1.1 下载Registry镜像并启动

docker pull registry

1.2 运行一个Registry镜像仓库的容器实例

docker run -d --name registry -p 5000:5000 --restart=always -v /opt/registry:/var/lib/registry registry

1.3 查看本机已有的镜像

docker images

1.4 为要上传的镜像打Tag(以nginx为例)docker tag SOURCE_IMAGEID(镜像id) new_REPOSITORY:TAG(仓库:标签)

docker tag nginx:latest 127.0.0.1:5000/nginx:latest

1.5 上传镜像到服务端镜像仓库

docker push 127.0.0.1:5000/nginx:latest

1.6 用curl查看仓库中的镜像看到{"repositories":["nginx"]},表明镜像已经被成功上传了

curl http://127.0.0.1:5000/v2/_catalog

1.7 先删除已有镜像,再尝试从私有仓库中下载这个镜像

docker rmi 127.0.0.1:5000/nginx:latest(或镜像ID)
docker pull 127.0.0.1:5000/nginx:latest

1.8 为了让客户端服务器能够快速地访问刚刚在服务端搭建的镜像仓库(默认情况下是需要配置HTTPS证书的),这里简单在客户端配置一下私有仓库的可信任设置让我们可以通过HTTP直接访问:# vim /etc/docker/daemon.json写入如下内容(如果文件不存在请新建该文件)

 {
     "registry-mirror":[
         "http://hub-mirror.c.163.com"   #添加 docker hub 的 mirrors 镜像源,加速镜像获取 
     ],
     "insecure-registries":[
         "192.168.1.1"     ##registry服务器ip或域名
     ]
 }

1.9 为了使得配置生效,重新启动docker服务

systemctl restart docker

二、企业最爱:Harbor企业级镜像仓库

1.1 安装docker-compose(如下载太慢,可用以下官网直接下载安装包)

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version

注意:如果docker compose命令在安装后失败,请检查您的路径。还可以创建指向/usr/bin或路径中任何其他目录的符号链接。

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

2.1 Harbor的域名(如使用ip可省略)楼主用ip

[root@dev110 ~]# vim /etc/hosts
...
192.168.100.110  harbor.cn
...

3.1 生成自签证书(CN=域名或ip实例yourdomain.com替ip即可)楼主用ip

在harbor主机路径新建目录
mkdir -p /etc/docker/certs.d/yourdomain.com/

生成CA证书私钥
openssl genrsa -out ca.key 4096

生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key ca.key \
-out ca.crt

生成服务器证书证书通常包含一个.crt文件和一个.key文件,例如yourdomain.com.crt和yourdomain.com.key
生成私钥
openssl genrsa -out yourdomain.com.key 4096

生成证书签名请求(CSR)
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key yourdomain.com.key \
-out yourdomain.com.csr

生成一个x509 v3扩展文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

使用该v3.ext文件为您的Harbor主机生成证书,将yourdomain.comCRS和CRT文件名中的替换为Harbor主机名
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in yourdomain.com.csr \
-out yourdomain.com.crt

将服务端的 crt 转换成客户端用的 cert,Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

至此,所有证书就创建好了
[root@dev yourdomain.com]# ll
total 32
 -rw-r--r-- 1 root root 2017 Feb 23 13:44 ca.crt
 -rw-r--r-- 1 root root 3243 Feb 23 13:42 ca.key
 -rw-r--r-- 1 root root   17 Feb 23 13:53 ca.srl
 -rw-r--r-- 1 root root  232 Feb 23 13:52 externalfile.ext
 -rw-r--r-- 1 root root 2049 Feb 23 13:54 yourdomain.com.cert
 -rw-r--r-- 1 root root 2049 Feb 23 13:53 yourdomain.com.crt
 -rw-r--r-- 1 root root 1700 Feb 23 13:49 yourdomain.com.csr
 -rw-r--r-- 1 root root 3247 Feb 23 13:47 yourdomain.com.key

4.1为各个docker客户端分发证书

将Harbor主机上带域名的.cert和.key证书文件拷贝到docker客户端所在主机的/etc/docker/certs.d/xxx.xxx.com/目录下

在Docker客户端主机上执行
mkdir -p /etc/docker/certs.d/yourdomain.com/
scp root@192.168.100.111:/etc/docker/certs.d/yourdomain.com/yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
scp root@192.168.100.111:/etc/docker/certs.d/yourdomain.com/yourdomain.com.key /etc/docker/certs.d/yourdomain.com/

在Docker主机修改 /etc/docker/daemon.json,主要是增加"insecure-registries":["http://harbor.cn"]

[root@dev111 ~]# vim /etc/docker/daemon.json
{
    ...
    "insecure-registries":["http://yourdomain.com"],   #yourdomain.com替换harbor主机ip都可,楼主用ip
    ...
}

重启Docker

systemctl daemon-reload
systemctl restart docker

5.1 安装Harbor(如下载太慢,可用以下官网直接下载安装包)

前面准备工作做了那么多,现在终于可以进入正题了

下载&解压

cd /opt/
wget https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz
tar -zxvf harbor-offline-installer-v2.1.0.tgz

修改配置文件harbor.yml

[root@dev110 ~] vim /opt/harbor/harbor.yml
hostname: #IP地址或域名
http:
	port: 80
https:
	port: 443
	certificate: /etc/docker/certs.d/yourdomain.com/yourdomain.com.crt # 这里是证书信息(域名替换ip)
	private_key: /etc/docker/certs.d/yourdomain.com/yourdomain.com.key # 这里是证书信息(域名替换ip)
harbor_admin_password: Ccxharbor123 #  根据需要修改Web端admin用户的密码,默认为Harbor12345
database:
	password: Ccxharbor123  #  为harbor内置数据库root用户的密码,默认为root123
data_volumn: /data
log:
    level: info
    location: /var/log/harbor # harbor日志存放路径

先更新参数

cd /opt/harbor
./prepare

再进行安装

./install.sh

当你看到Harbor has been installed and started successfully时,我要恭喜你安装成功了

6.1 使用Harbor

使用浏览器,通过https://域名或https://ip:port两种方式都可以访问Harbor的WebUI。
因为是自签CA证书,浏览器会拦截,需要添加信任即可。

https://域名或https://ip:port
用户名:admin 密码:即harbor.yml文件中harbor_admin_password参数的值。默认是:Harbor12345

7.1 push镜像:docker客户端主机 ==> harbor主机

要想将镜像push到Harbor仓库中,必须先要在Harbor中创建自己的项目,即project,当然也可以使用Harbor自带的项目:library

下面看看如何做才能吧nginx镜像推送到Harbor镜像中去(域名可替换ip)

docker拉取一个镜像并修改tag
docker pull nginx
docker tag nginx:latest yourdomain.com/library/nginx:latest

docker login 登录Harbor
# harbor_user_name - Harbor用户名
# harbor_password - 该Harbor用户的密码
# harbor_domain - Harbor的域名或ip
docker login -u<harbor_user_name> -p<harbor_password> <harbor_domain>

当看到Login Succeeded时,就说明登陆成功了

下面可以查看docker中保存的登录信息

[root@dev ~]# cat ~/.docker/config.json 
{
    "auths": {
            "harbor.cn": {
                    "auth": "Y2N4LWRldjpDY3hkZXYxMjM="
            }
    },
    ...
 }

docker推送镜像到Harbor(域名可替换ip)

[root@dev ~]# docker push yourdomain.com/library/nginx:latest

登录Harbor查看镜像

https://域名或https://ip:port
用户名:admin 密码:即harbor.yml文件中harbor_admin_password参数的值。默认是:Harbor12345

8.1 pull镜像: docker <== harbor

Docker客户端主机从Harbor主机拉取镜像,只需要:

1.docker login 登录harbor

2.docker pull时,在镜像名称前加上Harbor的域名,就像这样:

docker pull harbor.cn/library/nginx:latest

9.1 维护时常用命令

查看harbor

[root@dev110 harbor]# docker-compose ps

停止&开启命令

docker-compose stop
docker-compose start

想要修改harbor配置时

docker-compose down -v
vim harbor.yml
./prepare
docker-compose up -d
posted @ 2021-02-22 11:11  記憶や空白  阅读(179)  评论(0编辑  收藏  举报