docker(七):Docker Private Registry

1、Docker私有倉庫

  前面的章節有講過公有倉庫的使用,如 DockerHub 和阿里雲鏡像倉庫。這種方式有明顯的缺陷:push 和 pull 的速度很慢,倘若實踐環境有上百臺機器,那須要多大帶寬才能 hold 住。因此多數時候仍是須要建立本身的私有倉庫。工做中的生產環境主機選擇基本有三種:自建機房、IDC機房託管和阿里公有云,前兩種狀況最好是將 docker 私有倉庫創建在局域網內,而第三種使用阿里雲鏡像倉庫無非是最恰當的選擇。搭建私有倉庫有兩種種方式:nginx

  • 使用 Docker 官方提供的 docker-distribution。能夠經過 docker container 或者 yum 的方式安裝。docker container 的方式須要把鏡像存儲目錄掛載到宿主機的某目錄下,防止容器意外停止或者刪除致使倉庫不可用。此種 registry 功能比較單一。
  • 使用 harbor,這是 VMware 基於 docker-distribution 二次開發的軟件,如今已經加入了 CNCF。功能強大,界面美觀。值得一提的是harbor支持中文,是否是很 happy,道友們?由於二次開發此軟件的主力是 VMware 中國區團隊,so。另外,本來的 harbor 部署是很是困難的,所以 harbor 官網直接把 harbor 作成了能夠在容器中運行的應用,且 harbor 容器啓動時要依賴於其它一些容器協同工做,因此它在部署和使用時須要用到 docker 的單機編排工具 docker compose。

2、搭建 Docker 私有倉庫

Docker-distribution

 1. 安裝docker-distributiongit

[root@docker2 ~]# yum -y install docker-distribution
[root@docker2 ~]# rpm -ql docker-distribution
/etc/docker-distribution/registry/config.yml
/usr/bin/registry
/usr/lib/systemd/system/docker-distribution.service
/usr/share/doc/docker-distribution-2.6.2
/usr/share/doc/docker-distribution-2.6.2/AUTHORS
/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
/usr/share/doc/docker-distribution-2.6.2/LICENSE
/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
/usr/share/doc/docker-distribution-2.6.2/README.md
/var/lib/registry
# 能夠看到鏡像存儲的位置是 /var/lib/registry 下,修改 yml 配置文件能夠定義這個路徑,這裏使用默認配置。
[root@docker2 ~]# cat /etc/docker-distribution/registry/config.yml 
version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
http:
    addr: :5000        # 地址留空表示監聽本機全部地址,默認監聽在5000端口
[root@docker2 ~]# systemctl start docker-distribution.service
[root@docker2 ~]# lsof -i:5000
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
registry 16006 root    3u  IPv6  51023      0t0  TCP *:commplex-main (LISTEN)

 2. 如今已經搭建完成了, 咱們能夠將 docker1 上的鏡像 push 到此倉庫。若是配置內網 hosts 解析,使用主機名也能夠,如 docker02:5000。github

[root@docker1 ~]# docker tag nginx:v5 10.0.0.12:5000/nginx:v5
[root@docker1 ~]# docker push 10.0.0.12:5000/nginx:v5 
The push refers to repository [10.0.0.12:5000/nginx]
Get https://10.0.0.12:5000/v2/: http: server gave HTTP response to HTTPS client
# 報錯是由於客戶端默認發出的請求是https的,我自建的倉庫是http的。咱們須要修改docker配置文件,指明就是使用非安全、非加密的registry。
[root@docker1 ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://p4y8tfz4.mirror.aliyuncs.com"],
  "insecure-registries": ["10.0.0.12:5000"]
}
[root@docker1 ~]# systemctl restart docker.service
# 再次嘗試push,推送成功
[root@docker1 ~]# docker push 10.0.0.12:5000/nginx:v5
v5: digest: sha256:28570ef37c4b34702131c97b3b51b5c97e50c344cefbdb47f6ee906a47ba3d5c size: 1567

 3. 如今去 docker2 上面查看從 docker1 推上來的鏡像。web

[root@docker2 ~]# ll /var/lib/registry/docker/registry/v2/repositories/
total 0
drwxr-xr-x 5 root root 55 Jul 24 11:03 nginx
# 若是其它docker主機想pull此鏡像,也是須要修改docker的配置文件。
[root@docker2 ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://p4y8tfz4.mirror.aliyuncs.com"],
  "insecure-registries": ["10.0.0.12:5000"]
}
[root@docker2 ~]# systemctl restart  docker
[root@docker2 ~]# docker pull 10.0.0.12:5000/nginx:v5
[root@docker2 ~]# docker images 
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
10.0.0.12:5000/nginx   v5                  e74b49bcb92b        23 hours ago        16MB

VMware harbor

 1. harbor 託管在GitHub上,頁面搜索" Installation & Configuration Guide "能夠查看安裝步驟。咱們下載 harbor壓縮包,並解壓。redis

# 在下載以前先停掉以前安裝的 docker-distribution
[root@docker2 packages]# systemctl stop docker-distribution.service
[root@docker2 packages]# pwd
/server/packages
[root@docker2 packages]# wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz
[root@docker2 packages]# tar xf harbor-offline-installer-v1.8.1.tgz -C /usr/local/
[root@docker2 packages]# cd /usr/local/harbor/
[root@docker2 harbor]# ll
total 551208
-rw-r--r-- 1 root root 564403568 Jun 17 11:30 harbor.v1.8.1.tar.gz
-rw-r--r-- 1 root root      4512 Jul 24 19:39 harbor.yml
-rwxr-xr-x 1 root root      5088 Jun 17 11:29 install.sh
-rw-r--r-- 1 root root     11347 Jun 17 11:29 LICENSE
-rwxr-xr-x 1 root root      1654 Jun 17 11:29 prepare

 2. 配置 harbor.ymldocker

# 從 1.8.0 版本後,harbor 配置文件由原先的 harbor.cfg 改成 harbor.yml。
[root@docker2 harbor]# vim harbor.yml
hostname: 10.0.0.12                # 填寫局域網或者互聯網能夠訪問得地址,有域名能夠寫域名
harbor_admin_password: Harbor12345        # 管理員的初始密碼,默認用戶名爲admin
database:
  password: root123            # 數據庫密碼。默認是root123
data_volume: /data            # 存儲harbor數據的位置
jobservice:
  max_job_workers: 10          # 啓動幾個併發進程來處理用戶的上傳下載請求。通常略小於CPU核心數。
# 通常會修改的參數也就上面幾項,另外http和https根據本身實際狀況配置進行,這裏就使用默認的http。

 3. 執行 ./install.sh 安裝數據庫

[root@docker2 harbor]# ./install.sh 

[Step 0]: checking installation environment ...

Note: docker version: 18.09.6
✖ Need to install docker-compose(1.18.0+) by yourself first and run this script again.
# 提示須要1.18.0以上版本的docker-compose,下面咱們來看下默認的docker-compose版本是否知足咱們的需求(須要安裝了epel源)。
[root@docker2 harbor]# yum info docker-compose | egrep -i 'repo|version'
Version     : 1.18.0
Repo        : epel/x86_64
[root@docker2 harbor]# yum -y install docker-compose
# 開始安裝harbor,由於須要解壓使用harbor.v1.8.1.tar.gz中打包好的鏡像,因此須要稍微等一下。
[root@docker2 harbor]# ./install.sh
✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://10.0.0.12. 
For more details, please visit https://github.com/goharbor/harbor .
[root@docker2 harbor]# echo $?
0
[root@docker2 harbor]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      730/sshd            
tcp        0      0 127.0.0.1:1514          0.0.0.0:*               LISTEN      18443/docker-proxy  
tcp6       0      0 :::80                   :::*                    LISTEN      19189/docker-proxy  
tcp6       0      0 :::22                   :::*                    LISTEN      730/sshd

 4. 訪問harbor的web界面,上面執行 ./install.sh 的結尾有提示web登入的方式。默認用戶名和密碼:admin/Harbor12345json

 5. 接下來咱們開始建立私有倉庫。vim

  a) 先建立一個普通的帳戶api

  b) 切換上面的普通帳戶,新創建一個私有項目

 6. 推送鏡像到operator項目中

# 修改配置文件端口
[root@docker1 ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://p4y8tfz4.mirror.aliyuncs.com"],
  "insecure-registries": ["10.0.0.12"]
}
[root@docker1 ~]# systemctl restart docker
[root@docker1 ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
10.0.0.12/operator/nginx   v6                  1bf6b39a84b9        43 hours ago        17MB
[root@docker1 ~]# docker push 10.0.0.12/operator/nginx:v6
[root@docker1 ~]# docker login -u merle 10.0.0.12
Password:
Login Succeeded
[root@docker1 ~]# docker push 10.0.0.12/operator/nginx:v6
v6: digest: sha256:527ef2be458f05b4e50b5ef698fb1ea96feab8ea54dcba18da56a466b69034f3 size: 2193

 7. 刷新harbor頁面

 8. 到這私有倉庫也就搭建完成了,咱們也能夠在 /data 目錄下查看數據

[root@docker2 harbor]# ll /data/registry/docker/registry/v2/repositories/operator/
total 0
drwxr-xr-x 5 10000 10000 55 Jul 25 10:25 nginx

 9. 最後,若是要對harbor服務作一些操做,須要使用docker-compose命令。

# 其實前面的./install.sh也是使用的 docker-compose create 和 docker-compose start 命令啓動的 harbor。注意,命令執行須要再harbor的目錄下,不然會報錯找不到配置文件。
[root@docker2 harbor]# docker-compose --help
[root@docker2 ~]# docker-compose pause 
ERROR: 
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml
[root@docker2 ~]# cd -
/usr/local/harbor
[root@docker2 harbor]# docker-compose pause 
Pausing harbor-log        ... done
Pausing redis             ... done
Pausing harbor-db         ... done
Pausing registry          ... done
Pausing registryctl       ... done
Pausing harbor-core       ... done
Pausing harbor-portal     ... done
Pausing harbor-jobservice ... done
Pausing nginx             ... done


寫做不易,轉載請註明出處,謝謝~~

相關文章
相關標籤/搜索