1. 程式人生 > >Easypack容器系列之 Nexus 3 Docker私庫

Easypack容器系列之 Nexus 3 Docker私庫

這裡寫圖片描述
Nexus作為私庫管理最為流行的工具之一,用於包的管理和Docker映象管理的私庫管理場景中非常常用。Easypack利用最新版本的oss版Nexus作為基礎映象用於提供類似服務。本文將同時給出具體步驟結合最新發行的Docker-CE版本實現映象私庫的管理。

Why Nexus 3

這裡整理了為什麼使用Nexus 3的一些理由,在做選型的時候可以做一個簡單參照。

專案 詳細
為什麼使用Nexus 3 http://blog.csdn.net/liumiaocn/article/details/62050525

docker版本

本次使用的docker的版本為17.03.0-ce,但是應該並不限於此版本,其他版本未作驗證。

[root@liumiaocn ~]# docker version
Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 08:10:07 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03
.0-ce API version: 1.26 (minimum version 1.12) Go version: go1.7.5 Git commit: 3a232c8 Built: Tue Feb 28 08:10:07 2017 OS/Arch: linux/amd64 Experimental: false [root@liumiaocn ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

下載映象

[[email protected] ~]# docker pull liumiaocn/nexus
Using default tag: latest
latest: Pulling from liumiaocn/nexus
Digest: sha256:b93f9a6bba2b35ada33c324cd06bd2c732fc1bed352df186af1a013e228af8d8
Status: Image is up to date for liumiaocn/nexus:latest
[[email protected] ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

啟動Nexus

專案 詳細
Nexus UI 8081
private repo 8082
proxy repo 8083
URL http://192.168.32.123:8081/
[root@liumiaocn ~]# docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name nexus liumiaocn/nexus
222abae47fcf9d32c821bff6426edd03f6757a3dd4cbe07517dada5d800e173f
[root@liumiaocn ~]#
  • 1
  • 2
  • 3

logon

專案 詳細
URL http://192.168.32.123:8081/
使用者名稱稱 admin
使用者密碼 admin123

這裡寫圖片描述

登陸之後
這裡寫圖片描述

倉庫型別

具體倉庫型別主要分為hosted/proxy/group三種。具體含義如下:

專案 詳細說明
hosted 本地儲存,像官方倉庫一樣提供本地私庫功能
proxy 提供代理其他倉庫的型別
group 組型別,可以組合多個倉庫為一個地址提供服務

建立priavete倉庫

建立一個Hosted的倉庫作為private倉庫,具體設定資訊如下:

專案 詳細說明
型別 docker (hosted)
Name docker-repo-private
HTTP Port 8082
Blob store docker-repo-private
Deployment policy Allow redeploy

這裡寫圖片描述

建立proxy倉庫

建立一個proxy倉庫,具體設定資訊如下:

專案 詳細說明
型別 docker (proxy)
Name docker-repo-proxy
Location of the remote repository being proxied https://registry-1.docker.io
Docker Index Use Docker Hub
Blob store docker-repo-proxy

這裡寫圖片描述

建立group倉庫

建立一個group倉庫,具體設定資訊如下:

專案 詳細說明
型別 docker (group)
Name docker-repo-group
HTTP Port 8083
Blob store docker-repo-group
Member repositories docker-repo-private
Member repositories docker-repo-proxy

這裡寫圖片描述

docker設定

Docker的私庫可以使用HTTP或者HTTPS,Nexus 3都予以支援,本文的方式採用HTTP方式,因此需要設定docker,在docker啟動前設定如下資訊是需要的

專案 詳細說明
設定物件檔案 /etc/docker/daemon.json
設定內容 insecure-registries

設定詳細內容,如下所示:

[root@liumiaocn ~]# cat /etc/docker/daemon.json
{
  "insecure-registries": [
    "192.168.32.123:8082",
    "192.168.32.123:8083"
  ],
  "disable-legacy-registry": true
}
[root@liumiaocn ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

重啟docker

[root@liumiaocn docker]# systemctl restart docker
[root@liumiaocn docker]#
  • 1
  • 2

啟動nexus

隨著docker的重啟,nexus的容器也需要啟動,詳細如下所示:

[root@liumiaocn docker]# docker start nexus
nexus
[root@liumiaocn docker]#
  • 1
  • 2
  • 3

確認

至此,Nexus的設定準備基本就緒,可以確認結果了。

docker login

為了進行操作,需要事先進行docker login的操作

專案 詳細說明
private倉庫 docker login -u admin -p admin123 192.168.32.123:8082
proxy倉庫 docker login -u admin -p admin123 192.168.32.123:8083

執行確認

[root@liumiaocn ~]# docker login -u admin -p admin123 192.168.32.123:8082
Login Succeeded
[root@liumiaocn ~]# docker login -u admin -p admin123 192.168.32.123:8083
Login Succeeded
[root@liumiaocn ~]#
  • 1
  • 2
  • 3
  • 4
  • 5

proxy倉庫確認

從remote倉庫pull下來映象,然後確認是否在proxy倉庫中存在

[root@liumiaocn ~]# docker pull 192.168.32.123:8083/alpine:3.5
3.5: Pulling from alpine
627beaf3eaaf: Downloading
unknown blob
[root@liumiaocn docker]#
  • 1
  • 2
  • 3
  • 4
  • 5

查了一下nexus的一些issue,發現有不少都是跟blob相關,看起來相關的小的問題還有一些在不斷的收拾中,但是不影響結果。
確認proxy倉庫,發現pull的alpine的3.5版本已然在proxy倉庫中儲存完畢,所以上面的unknown blob也確實沒有影響結果。
這裡寫圖片描述

private倉庫確認

事前映象確認

[root@liumiaocn ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              00f017a8c2a6        2 days ago          1.11 MB
liumiaocn/maven     latest              833b66f10ce6        5 days ago          160 MB
liumiaocn/nexus     latest              932d715eb7e1        5 days ago          460 MB
liumiaocn/gitlab    latest              2462fb291203        5 days ago          1.21 GB
liumiaocn/jenkins   latest              6668ecd39e4f        5 days ago          293 MB
[root@liumiaocn ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

tag busybox映象

[root@liumiaocn ~]# docker tag busybox 192.168.32.123:8082/busybox:latest
[root@liumiaocn ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
192.168.32.123:8082/busybox   latest              00f017a8c2a6        2 days ago          1.11 MB
busybox                       latest              00f017a8c2a6        2 days ago          1.11 MB
liumiaocn/maven               latest              833b66f10ce6        5 days ago          160 MB
liumiaocn/nexus               latest              932d715eb7e1        5 days ago          460 MB
liumiaocn/gitlab              latest              2462fb291203        5 days ago          1.21 GB
liumiaocn/jenkins             latest              6668ecd39e4f        5 days ago          293 MB
[root@liumiaocn ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

docker push

[root@liumiaocn ~]# docker push 192.168.32.123:8082/busybox:latest
The push refers to a repository [192.168.32.123:8082/busybox]
c0de73ac9968: Pushed
latest: digest: sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5 size: 527
[root@liumiaocn ~]#
  • 1
  • 2
  • 3
  • 4
  • 5

結果確認:busybox映象已經被正常地push到了private倉庫中
這裡寫圖片描述

docker pull

為了確認docker pull的動作,事前先將之前的busybox先行刪除,以確認確實下載了新的busybox映象到本地。

[root@liumiaocn ~]# docker rmi busybox
Untagged: busybox:latest
Untagged: busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f
[root@liumiaocn ~]# docker rmi 192.168.32.123:8082/busybox
Untagged: 192.168.32.123:8082/busybox:latest
Untagged: 192.168.32.123:8082/busybox@sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5
Deleted: sha256:00f017a8c2a6e1fe2ffd05c281f27d069d2a99323a8cd514dd35f228ba26d2ff
Deleted: sha256:c0de73ac99683640bc8f8de5cda9e0e2fc97fe53d78c9fd60ea69b31303efbc9
[root@liumiaocn ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
liumiaocn/maven     latest              833b66f10ce6        5 days ago          160 MB
liumiaocn/nexus     latest              932d715eb7e1        5 days ago          460 MB
liumiaocn/gitlab    latest              2462fb291203        5 days ago          1.21 GB
liumiaocn/jenkins   latest              6668ecd39e4f        5 days ago          293 MB
[root@liumiaocn ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

docker pull操作:可以看到確實是從private倉庫下載下來了映象,而且速度也明顯快了非常之多。

[root@liumiaocn ~]# docker pull 192.168.32.123:8082/busybox
Using default tag: latest
latest: Pulling from busybox
04176c8b224a: Pull complete
Digest: sha256:68effe31a4ae8312e47f54bec52d1fc925908009ce7e6f734e1b54a4169081c5
Status: Downloaded newer image for 192.168.32.123:8082/busybox:latest
[root@liumiaocn ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
192.168.32.123:8082/busybox   latest              00f017a8c2a6        2 days ago          1.11 MB
liumiaocn/maven               latest              833b66f10ce6        5 days ago          160 MB
liumiaocn/nexus               latest              932d715eb7e1        5 days ago          460 MB
liumiaocn/gitlab              latest              2462fb291203        5 days ago          1.21 GB
liumiaocn/jenkins             latest              6668ecd39e4f        5 days ago          293 MB
[root@liumiaocn ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

總結

至此,如何使用Nexus管理Docker映象已然十分清楚,但是如何很好的管理映象,備份機制/版本控制/差分管理/定期cache/及時清理等方面還有很多問題需要考慮,需要在實際的工作中不斷實踐總結。

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!希望你也加入到我們人工智慧的隊伍中來!http://www.captainbed.net