Docker鏡像倉庫

原文: Docker鏡像倉庫

這里僅以一個場景: 自己制作的鏡像如何分享, 主要說明私有鏡像倉庫Harbor的搭建使用

Docker Hub

首先介紹Docker Hub

推送&拉取鏡像

推送自己的鏡像到Docker Hub上, 因?yàn)榫W(wǎng)速... 這里用一個超小的鏡像試驗(yàn)

[root@bogon ~]# docker images | grep busy
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
busybox                      latest              af2f74c517aa        6 days ago          1.2MB

1. 打標(biāo)簽

docker tag busybox:latest thank037/busybox:1.0
[root@bogon ~]# docker images | grep busy
busybox                      latest              af2f74c517aa        6 days ago          1.2MB
thank037/busybox             latest              af2f74c517aa        6 days ago          1.2MB

注意這里的thank037就是DockerHub中的username

2. 推送

docker push thank037/busybox:1.0

去自己的鏡像倉庫看下吧, 有了

如果推送過程中提示: denied: requested access to the resource is denied

登錄一下即可: docker login

拉取鏡像很常見

docker pull thank037/busybox:1.0


國內(nèi)的鏡像倉庫

國內(nèi)也有很多, 例如網(wǎng)易, DaoCloud, 阿里云等, 上傳鏡像和拉取鏡像的姿勢基本和Docker Hub一樣

網(wǎng)易的這兩天個人認(rèn)證無法使用, 必須要企業(yè)認(rèn)證, 所以這里實(shí)驗(yàn)阿里云的

首先需要在阿里云-容器鏡像服務(wù)中創(chuàng)建一個命名空間

創(chuàng)建命名空間

可以設(shè)置倉庫類型, 公有私有

推送和拉取

省略自己制作鏡像的過程, 這里以一個我已經(jīng)拉取好的官方鏡像redis:latest為例

首先登錄

$ sudo docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
# tag
docker tag redis:latest registry.cn-hangzhou.aliyuncs.com/thank/redis:1.0

# push 
docker push registry.cn-hangzhou.aliyuncs.com/thank/redis:1.0

# pull
docker pull registry.cn-hangzhou.aliyuncs.com/thank/redis:1.0

去鏡像倉庫看看吧, 有了

鏡像倉庫

基于代碼源構(gòu)建

上面的方式是自己在docker環(huán)境中制作好鏡像, 上傳到倉庫, 這里介紹一種基于代碼源的構(gòu)建方式

以GitHub為例, 代碼源為: https://github.com/Thank037/spring-cloud-study2

  1. 創(chuàng)建鏡像倉庫: 寫好倉庫名稱, 選擇好命名空間即可

  2. 設(shè)置代碼源: 選擇github, 第一次使用需要綁定賬號

  3. 構(gòu)建設(shè)置

    • 構(gòu)建設(shè)置: 例如可以開啟代碼變更自動構(gòu)建鏡像
    • 構(gòu)建規(guī)則設(shè)置: 設(shè)置代碼源的分支/tag, Dockerfile目錄和名字, 需要構(gòu)建的鏡像版本
  4. 開始構(gòu)建: 點(diǎn)擊規(guī)則上的立即構(gòu)建即可

每次的構(gòu)建過程會輸出到構(gòu)建日志中, 可以進(jìn)行查看

構(gòu)建設(shè)置


私有倉庫

出于安全和速度的考慮, 很多企業(yè)會選擇搭建私有鏡像倉庫

registry

安裝和使用

是一個官方提供的鏡像倉庫, 安裝極其簡單!

docker pull registry:2

拉取完成后啟動registry: docker run -d -p 5000:5000

推送和拉取過程跟推送到公有倉庫差不多

# 打標(biāo)簽
docker tag busybox:latest localhost:5000/busybox:1.0

# 推送
docker push localhost:5000/busybox:1.0

# 拉取
docker pull localhost:5000/busybox:1.0

需要注意的是

如果其它主機(jī)在推送到registry所在主機(jī)時可能出現(xiàn)安全錯誤, 也就是鏡像倉庫和docker客戶端不在一臺機(jī)器上

在Client端/etc/docker/daemon.json中加入:

{ "insecure-registries":["ip:5000"] }

然后重啟docker即可 systemctl restart docker

除了推送和拉取鏡像, registry還提供了一些API, 查看鏡像信息, 刪除等... 例如:

[root@bogon ~]# curl localhost:5000/v2/_catalog
{"repositories":["busybox"]}

可以看到registry很輕便, 具備了基礎(chǔ)的鏡像管理功能, 但是有以下兩個缺點(diǎn)

  • 不具備授權(quán)認(rèn)證功能, 需要自己去做一些認(rèn)證方案
  • 雖有API, 但沒有一個好看的界面


harbor

harbor意為港灣, 很貼合它的作用

github地址: https://github.com/goharbor/harbor

記得以前是在vmware下, 現(xiàn)在地址轉(zhuǎn)到goharbor下了

官方的定義是企業(yè)級私有Registry服務(wù)器, 實(shí)際內(nèi)部也是依靠docker registry

那么它與registry相比, 一定提供了很多企業(yè)級的特性, 例如:

  • 提供良好的Web界面
  • 提供良好的安全機(jī)制, 包括角色, 權(quán)限控制, 日志等
  • 支持水平擴(kuò)展
  • 傳輸優(yōu)化, 因?yàn)殓R像的分層機(jī)制, 所以每次傳輸并非全量, 從而提升速度

搭建

環(huán)境準(zhǔn)備

在安裝harbor之前, 需要docker環(huán)境, 除此還需要docker-compose, 不說了

安裝Harbor

github release中查看需要安裝的版本, 這里我用當(dāng)前最新的v1.7.5

文檔中有兩種安裝方式: offline和online, 也就是在線和離線

  • online: 在線方式會下載一個很小的tar包, 里面只有docker-compose.yml和啟動腳本, 會在啟動安裝時在線拉取鏡像
  • offline: 下載一個大概500多M的tar包, 里面包括了鏡像文件, 所以安裝時會快

我的瀏覽器設(shè)置了代理, 所以選擇offline的離線包, 再上傳放到docker環(huán)境的主機(jī)上

大致看下解壓后的目錄

[root@localhost opt]# tree harbor -CL 2
harbor                                 
├── common                             
│   ├── config                         
│   └── templates                      
├── docker-compose.chartmuseum.yml     
├── docker-compose.clair.yml           
├── docker-compose.notary.yml          
├── docker-compose.yml                 
├── harbor.cfg                         
├── harbor.v1.7.5.tar.gz               
├── install.sh                         
├── LICENSE                            
├── open_source_license                
└── prepare                            

接下來對harbor.cfg幾個配置做修改, 我修改了如下:

# 注釋中也說了, 不要設(shè)置成localhost和127.0.0.1阿
hostname = hub.thank.com

# 郵箱相關(guān)的設(shè)置
email_server = smtp.163.com
email_server_port = 25
email_username = coderthank@163.com
email_password = ******
email_from = thank <coderthank@163.com>

# 修改admin默認(rèn)的登錄密碼
harbor_admin_password = 123123

更多詳細(xì)的設(shè)置可參考官方文檔和配置文件的注釋

然后執(zhí)行install.sh即可

[Step 0]: checking installation environment ...

Note: docker version: 1.13.1

Note: docker-compose version: 1.16.1

[Step 1]: loading Harbor images ...
...略

[Step 2]: preparing environment ...
...略

[Step 3]: checking existing instance of Harbor ...


[Step 4]: starting Harbor ...
...略

? ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://hub.thank.com.
For more details, please visit https://github.com/goharbor/harbor .

從Step可以看到這個一鍵腳本幫我們做了傻瓜式的安裝

docker-compose幫我們完成了Harbor所需要的多個容器服務(wù)

來看一眼

  • 鏡像

    [root@localhost harbor]# docker images --format "table {{.Repository}}\t{{.Size}}" | grep harbor
    goharbor/chartmuseum-photon     113 MB
    goharbor/harbor-migrator        679 MB
    goharbor/redis-photon           101 MB
    goharbor/clair-photon           164 MB
    goharbor/notary-server-photon   135 MB
    goharbor/notary-signer-photon   132 MB
    goharbor/harbor-registryctl     102 MB
    goharbor/registry-photon        86.7 MB
    goharbor/nginx-photon           35.9 MB
    goharbor/harbor-log             81.4 MB
    goharbor/harbor-jobservice      84.1 MB
    goharbor/harbor-core            95.6 MB
    goharbor/harbor-portal          40.6 MB
    goharbor/harbor-adminserver     72.3 MB
    goharbor/harbor-db              138 MB
    
  • 容器

    [root@localhost harbor]# docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}" | grep harbor
    c517af1cff6a        goharbor/nginx-photon:v1.7.5             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp
    7bb6eac57291        goharbor/harbor-jobservice:v1.7.5
    723cb4c96a0d        goharbor/harbor-portal:v1.7.5            80/tcp
    1425f64756d1        goharbor/harbor-core:v1.7.5
    f19a00ce693b        goharbor/registry-photon:v2.6.2-v1.7.5   5000/tcp
    4d3f0f8929c7        goharbor/harbor-adminserver:v1.7.5
    23df470d2b0d        goharbor/harbor-db:v1.7.5                5432/tcp
    e7d6d1cc3b1b        goharbor/harbor-registryctl:v1.7.5
    6e2912ec566e        goharbor/redis-photon:v1.7.5             6379/tcp
    ee8685192041        goharbor/harbor-log:v1.7.5               127.0.0.1:1514->10514/tcp
    

界面使用

因?yàn)閯偛旁谂渲梦募r了一個假域名, 這里我修改下hosts

192.168.118.143 hub.thank.com

訪問http://hub.thank.com, 可以看到Harbor的登錄頁面

直接訪問IP也可, 默認(rèn)80端口

登錄后的主頁面

harbor主頁

測試: 創(chuàng)建用戶thank, 創(chuàng)建項(xiàng)目cloudlink-base和項(xiàng)目中添加用戶thank, 角色為項(xiàng)目管理員

其它功能就不做介紹了, 中文簡體點(diǎn)一點(diǎn)就好啦

運(yùn)維管理

從前面的一鍵啟動腳本也能看出, 我們可以用docker-compose統(tǒng)一完成harbor服務(wù)的運(yùn)維管理

  • 停止: docker-comose stop
  • etc...

image管理

這里測試一下鏡像的拉取和上傳

方法跟其它倉庫的沒什么不一樣, 不說了

# login
docker login hub.thank.com

# image tag 
docker tag redis:latest hub.thank.com/cloudlink-base/thank-redis:latest

# push 
docker push hub.thank.com/cloudlink-base/thank-redis:latest

# pull
docker pull

https問題

剛才在配置文件harbor.cfg中可以看到默認(rèn)配置了http協(xié)議訪問

這里在其它主機(jī)上傳鏡像時, docker客戶端默認(rèn)都是https訪問Harbor, 所以會出現(xiàn)connection refused的錯誤

有兩種解決辦法:

  1. 前面提到過, 在/etc/docker/daemon.json加入
{
  "insecure-registries" : ["hub.thank.com"]
}
  1. 修改harbor配置文件為https方式: ui_url_protocol = https, 除此之外還需要配置證書

不是很復(fù)雜, 可以參照搭建Harbor企業(yè)級docker倉庫#五、Harbor配置TLS證書

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孕蝉,一起剝皮案震驚了整個濱河市尖啡,隨后出現(xiàn)的幾起案子辛臊,更是在濱河造成了極大的恐慌身弊,老刑警劉巖孵延,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件文黎,死亡現(xiàn)場離奇詭異背镇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丰刊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門隘谣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啄巧,你說我怎么就攤上這事寻歧。” “怎么了秩仆?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵码泛,是天一觀的道長。 經(jīng)常有香客問我澄耍,道長噪珊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任齐莲,我火速辦了婚禮痢站,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘选酗。我一直安慰自己阵难,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布芒填。 她就那樣靜靜地躺著呜叫,像睡著了一般空繁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朱庆,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天盛泡,我揣著相機(jī)與錄音,去河邊找鬼椎工。 笑死饭于,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的维蒙。 我是一名探鬼主播掰吕,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颅痊!你這毒婦竟也來了殖熟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斑响,失蹤者是張志新(化名)和其女友劉穎菱属,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舰罚,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纽门,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了营罢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赏陵。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饲漾,靈堂內(nèi)的尸體忽然破棺而出蝙搔,到底是詐尸還是另有隱情,我是刑警寧澤考传,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布吃型,位于F島的核電站,受9級特大地震影響僚楞,放射性物質(zhì)發(fā)生泄漏勤晚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一镜硕、第九天 我趴在偏房一處隱蔽的房頂上張望运翼。 院中可真熱鬧,春花似錦兴枯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悠夯。三九已至,卻和暖如春躺坟,著一層夾襖步出監(jiān)牢的瞬間沦补,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工咪橙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夕膀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓美侦,卻偏偏與公主長得像产舞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菠剩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容