天天看點

基于Docker搭建私有鏡像倉庫

通常我們在

docker

中拉取的鏡像都是在

docker hub

線上存儲庫中擷取的,這個線上存儲庫裡的docker鏡像可以由任何使用者釋出和使用,顯然這在某些場景下是不适用的,比如某些互金的隐私項目,或者是公司完全處于内網狀态不能通路外網,再或者你想個性化定制某些配置等等等,是以這就需要用到私有存儲庫了,今天我們就基于

registry鏡像

搭建屬于我們自己的私有倉庫。

1、安裝指令

docker pull registry
           

預設拉取最新版:

基于Docker搭建私有鏡像倉庫

2、配置私有倉庫位址

vim /etc/docker/daemon.json
           

輸入如下參數,注意修改為自己的ip位址:

"insecure-registries": ["10.211.55.4:5000"]
           
基于Docker搭建私有鏡像倉庫

:wq

儲存退出,然後我們重新開機啟動一下 docker

systemctl restart docker
           

3、建立容器

docker run -d -p 5000:5000 --name registry docker.io/registry
           

部分參數說明:

  • -d:讓容器在背景運作
  • -p:指定容器内部使用的網絡端口映射到我們使用的主機上
  • --name:指定容器建立的名稱

4、重新加載配置

sudo systemctl daemon-reload
           

然後浏覽器通路:http://10.211.55.4:5000/v2/_catalog

基于Docker搭建私有鏡像倉庫

如果通路不到,嘗試關閉防火牆:

systemctl stop firewalld
           

如果還是通路不不到,可以重新開機一下docker

sudo systemctl restart docker
           

然後重新運作一下容器。

5、驗證上傳鏡像到私有倉庫

我們使用

HelloWorld

鏡像進行測試,首先先拉取一下:

docker pull hello-world
           
基于Docker搭建私有鏡像倉庫

拉取之後我們看一下鏡像名稱及版本:

基于Docker搭建私有鏡像倉庫

至此我們就有了一個 hello-world鏡像,接下來我們使用 push 指令将鏡像推送到剛剛搭建的registry中:

# 标記hello-world該鏡像需要推送到私有倉庫
docker tag hello-world:latest 127.0.0.1:5000/hello-world:latest

# 通過push指令推送到私有倉庫
docker push 127.0.0.1:5000/hello-world:latest
           
基于Docker搭建私有鏡像倉庫

再來通路:http://10.211.55.4:5000/v2/_catalog

基于Docker搭建私有鏡像倉庫

我們可以看到私有倉庫目錄已經有剛剛推送上去的

hello-world

鏡像了。

6、驗證從私有倉庫下載下傳鏡像

驗證完了上傳,我們再來測試一下下載下傳鏡像:

# 格式如下:
docker pull 127.0.0.1:5000/鏡像名稱:鏡像版本号

# 以hello-world為例:
docker pull 127.0.0.1:5000/hello-world
           
基于Docker搭建私有鏡像倉庫

到這可能有的小夥伴就有疑惑了,你這通過ip能拉取嗎,我看你一直用的

127.0.0.1

,畢竟私有倉庫搭建完是要給别人用的嘛~

那麼我們就測試一下:

docker  pull  10.211.55.4:5000/hello-world:latest
           
基于Docker搭建私有鏡像倉庫

如上圖所示,通過ip也是可以拉取成功的,但是在這再額外補充一下,有的小夥伴可能提示如下:

Trying to pull repository 10.211.55.4:5000/hello-world ...
Get https://10.211.55.4:5000/v1/_ping: http: server gave HTTP response to HTTPS client
           

這種顯然是拉取失敗了,提示大緻就是,嘗試從https上拉取,但是傳回的是http響應,如何解決呢?

我們可以通過如下進行處理一下,xxx修改為自己的ip位址:

echo '{ "insecure-registries":["xxx.xxx.xxx.xxx:5000"] }' > /etc/docker/daemon.json
           

其實如果你是按上我上邊這些步驟下來是不會有問題的,在步驟2中配置私有倉庫位址時,其實我們已經配置了

insecure-registries

,但是配置後我們需要重新開機啟動一下docker才可以生效,畢竟是配置了系統檔案嘛~

ok,至此整個搭建過程完畢~

--- END ---

基于Docker搭建私有鏡像倉庫

推薦閱讀:

基于Docker的Redis叢集搭建

Docker安裝Nginx

基于Docker方式實作Elasticsearch叢集

Docker中Maven私服的搭建

基于Docker搭建Gitlab代碼存儲