建立私有 Docker Registry

更新於 發佈於 閱讀時間約 10 分鐘
raw-image

前言

該如何自架 docker registry 呢? docker registry 可以幫助我們做什麼事情呢? docker registry 是可以將我們打包好的 docker image,放置到 docker registry 上面,在我們開始要佈署服務時,從 docker registry 拉取我們打包好的 image 進行佈署,也就是說 docker registry 是我們存放 images 的倉庫,今天我們將教大家如何自架 docker registry,建造我們的私有倉庫。

準備主機

準備一台主機,先在本機安裝 docker engine 和 docker compose,接著安裝 apache2-utils 和 mkcert,我們要使用 apache2-utils 來控管伺服器內部存取身分,Docker Registry 支援帳密登入,前提要啟用 TLS HTTPS 連線,並使用 htpasswd 工具設定雜湊密碼檔,且安裝 mkcert 建立 TLS 憑證,以下安裝指令

sudo apt-get install apache2-utils mkcert

建立 /var/registry/certs 路徑,並切換到此路徑

sudo mkdir -p /var/registry/certs

cd /var/registry/certs

接著在/var/registry/certs 路徑,建立 TSL 憑證

sudo mkcert -install

|_ The local CA is already installed in the system trust store! 👍

sudo mkcert localhost

|_ Created a new certificate valid for the following names 📜

|_ - "localhost"

|_

|_ The certificate is at "./localhost.pem" and the key at "./localhost-key.pem"

|_

|_ It will expire on 5 January 2026 🗓

ls *.pem

|_ localhost-key.pem localhost.pem

建立 /var/registry/auth 路徑,並切換此路徑

sudo mkdir -p /var/registry/auth

cd /var/registry/auth

接著在 /var/registry/auth 路徑,建立帳號密碼

sudo htpasswd -Bbn user 123456 | sudo tee ./htpasswd > /dev/null

ls -l htpasswd

|_ -rw-r--r-- 1 root root 67 Oct 5 02:47 htpasswd

cat htpasswd

|_ user:$2y$05$g/sNIT/FM4rWtEIDvjTLEuuj3wGWAwxzgQgcVRK0vC/6KVr6uRNtu

準備 Docker Compose 安裝 registry 以及 docker registry browser 這兩個鏡像

version: "3"
services:
registry:
container_name: registry
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/localhost.pem
REGISTRY_HTTP_TLS_KEY: /certs/localhost-key.pem
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_STORAGE_DELETE_ENABLED: true
volumes:
- /var/registry/data:/var/lib/registry
- /var/registry/certs:/certs
- /var/registry/auth:/auth
docker_registry_browser:
container_name: docker_registry_browser
restart: always
image: klausmeyer/docker-registry-browser
ports:
- 8080:8080
environment:
DOCKER_REGISTRY_URL: https://192.168.18.35:5000
NO_SSL_VERIFICATION: true
TOKEN_AUTH_USER: user
TOKEN_AUTH_PASSWORD: 123456
ENABLE_DELETE_IMAGES: true
volumes:
- /var/registry/certs:/certs

registry 鏡像

registry 是 docker 推出的鏡像,可以來建造我們的私有倉庫,快速提升開發效率,減少伺服器資源負擔

registry 的 environment 設定

REGISTRY_HTTP_TLS_CERTIFICATE: 取得剛才使用 mkcert 的 localhost.pem 檔案路徑

REGISTRY_HTTP_TLS_KEY: 取得剛才使用 mkcert 的 localhost-key.pem 檔案路徑

REGISTRY_AUTH: 設定驗證 http 環境變數

REGISTRY_AUTH_HTPASSWD_PATH: 設定驗證 http 檔案路徑

REGISTRY_AUTH_HTPASSWD_REALM: 設定驗證網域名稱

REGISTRY_STORAGE_DELETE_ENABLED: 啟用 registry 倉庫可被刪除

docker registry browser 鏡像

docker registry browser 是我個人推薦的一個鏡像,可以用來查看 docker registry 裡面有那些鏡像,並且提供刪除鏡像功能

docker registry browser 的 environment 設定

DOCKER_REGISTRY_URL: 設定 docker registry 位置

NO_SSL_VERIFICATION: 設定是否啟用 SSL 驗證

TOKEN_AUTH_USER: 設定 docker registry 登入使用者名稱

TOKEN_AUTH_PASSWORD: 設定 docker registry 登入密碼

ENABLE_DELETE_IMAGES: 設定是否啟用鏡像刪除按鈕

檢查 docker registry 是否運作正常

當安裝完 docker registry 後,在瀏覽器輸入我們鏡像倉庫網址: https://{自己的 ip}:{自己設定的 port}/v2,然後會要求輸入帳號密碼,輸入剛才我們設定的帳號密碼

raw-image

登入完成後會進入一個空物件話面代表成功

raw-image

再來輸入 https://{自己的 ip}:{自己設定的 port}/v2/_catalog,這可以看自己有上傳那些鏡像,目前當然是沒有

raw-image

檢查 docker registry browser 是否運作正常

安裝完 docker registry browser 輸入 http://{自己 ip}:{自己設定的 port},來檢查 docker registry browser 是否正常,然後會要求輸入帳號密碼,輸入剛才我們設定的帳號密碼

raw-image

登入完成後會進入一個 docker registry browser 畫面,會更清楚裡面有哪些 image,現在是還沒有任何 image 的狀態

raw-image

實際操作上傳 docker registry 倉庫

在所有服務建置完成後,我們來實際上傳 image 套我們的倉庫,首先先抓取 nginx 的 alpine 版本

docker pull nginx:alpine

接著我們對這個 image 給一個新的 tag image

docker tag 192.168.18.35:5000/nginx:alpine

接著先登入我們的 docker registry,輸入以下指令後,會要求我們輸入帳號密碼,也就是先前我們設定的帳號密碼

docker login 192.168.18.35:5000

登入成功後,再來上傳我們的 image

docker push 192.168.18.35:5000/nginx:alpine

如果上傳出現以下訊息

The push refers to repository [192.168.18.35:5000/nginx]

Get "https://192.168.18.35:5000/v2/": tls: failed to verify certificate: x509: cannot validate certificate for 192.168.44.136 because it doesn't contain any IP SANs

如果是 linux 在本機 /etc/docker/ 底下建立 daemon.json 檔案,建立以下內容

{

"group": "dockerroot",

"insecure-registries": [

"192.168.44.136:5000"

],

"live-restore": true

}

如果是 windows 直接在 docker desktop 新增相同內容

raw-image

最後再輸入一次剛才的 docker push 即可上傳成功,然後在瀏覽器打開 docker registry browser 即可看到 nginx alpine 版本

raw-image


avatar-img
10會員
49內容數
d3.js 圖形
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Tim Bai的沙龍 的其他內容
npm 做為 node 套件版本管理工具,今天來學習如何使用 npm 升級 package.json 版號管理,可以對一個專案版號管理更加制式化 major 目標升級版號 指令 npm version --new-version major 範例 v1.0.0 -> v2.0.0 mi
一般來說 Docker 剛安裝完成時,會需要使用管理權限來運行 Docker,那如果不想使用 sudo 權限運行,又想直接使用 Docker 命令,以下有幾種遵循方式 1. 將使用者名稱加入至 Docker 中 sudo usermod -aG docker $USER 2. 再來切換使用者使
前言 Vue 是一個現代開發框架,擁有完尚的生態系,讓我們可以將須多元件客製化,做出組件,並且可重複利用,高擴充性。在開發組件時,每個組件都擁有自己的生命周期,Vue 組件會偵測每個變數值,是否有變,並且更新內容,今天要一個一個了解 Vue 的生命週期,讓大家有更多認識。 Vue 的生命週期
前言 create react app 是一個可以快速設定 react 專案的一個工具,在建立專案時已經把 babel,webpack 都已經預先封裝設置好,如果我們要修改 webpack alias 設定該如何設定呢 什麼是 alias alias 在 webpack 設定意義叫做,檔案路徑
npm 做為 node 套件版本管理工具,今天來學習如何使用 npm 升級 package.json 版號管理,可以對一個專案版號管理更加制式化 major 目標升級版號 指令 npm version --new-version major 範例 v1.0.0 -> v2.0.0 mi
一般來說 Docker 剛安裝完成時,會需要使用管理權限來運行 Docker,那如果不想使用 sudo 權限運行,又想直接使用 Docker 命令,以下有幾種遵循方式 1. 將使用者名稱加入至 Docker 中 sudo usermod -aG docker $USER 2. 再來切換使用者使
前言 Vue 是一個現代開發框架,擁有完尚的生態系,讓我們可以將須多元件客製化,做出組件,並且可重複利用,高擴充性。在開發組件時,每個組件都擁有自己的生命周期,Vue 組件會偵測每個變數值,是否有變,並且更新內容,今天要一個一個了解 Vue 的生命週期,讓大家有更多認識。 Vue 的生命週期
前言 create react app 是一個可以快速設定 react 專案的一個工具,在建立專案時已經把 babel,webpack 都已經預先封裝設置好,如果我們要修改 webpack alias 設定該如何設定呢 什麼是 alias alias 在 webpack 設定意義叫做,檔案路徑
本篇參與的主題活動
先前麥克買了在預算及性能方面都十分複合需求的NXTPAPER 11平板,但拿到辦公室使用後便發現因為時不時有簡報需求,主機本身不支援有線視訊輸出實在是非常不方便,因又開始尋找新歡。最終麥克選擇了算是還滿熟悉的品牌小米旗下的小米平板6,以下為麥克這一個月下來的使用心得。
從預計的十月底出貨經過重重波折,Pubu自家開發的10寸彩色閱讀器Pubook Pro終於是送到第一批集資者手中了。究竟這台閱讀器有沒有本事撼動目前的電子紙閱讀器市場?有達到集資時承諾的各項功能嗎?且讓身為首批集資者之一的麥克跟大家談談收到主機後使用數天的感想。
Steam Deck 迎來大改版,最重要的更新就是換成 OLED 螢幕。使用 OLED 螢幕帶來更好看的顏色,大小還小幅提升到 7.4 吋。關係續航力的電池也從 40 瓦小時升級到 50 瓦小時, 3A 大作都可以多玩一小時呢!這麼香的更新,怎麼不給他買下去呢 😄
先前麥克買了在預算及性能方面都十分複合需求的NXTPAPER 11平板,但拿到辦公室使用後便發現因為時不時有簡報需求,主機本身不支援有線視訊輸出實在是非常不方便,因又開始尋找新歡。最終麥克選擇了算是還滿熟悉的品牌小米旗下的小米平板6,以下為麥克這一個月下來的使用心得。
從預計的十月底出貨經過重重波折,Pubu自家開發的10寸彩色閱讀器Pubook Pro終於是送到第一批集資者手中了。究竟這台閱讀器有沒有本事撼動目前的電子紙閱讀器市場?有達到集資時承諾的各項功能嗎?且讓身為首批集資者之一的麥克跟大家談談收到主機後使用數天的感想。
Steam Deck 迎來大改版,最重要的更新就是換成 OLED 螢幕。使用 OLED 螢幕帶來更好看的顏色,大小還小幅提升到 7.4 吋。關係續航力的電池也從 40 瓦小時升級到 50 瓦小時, 3A 大作都可以多玩一小時呢!這麼香的更新,怎麼不給他買下去呢 😄
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
Harbor是企業級的私有Docker Repository,提供管理使用者介面、角色存取控制等企業級特性。 安裝 更新apt sudo apt-get update 安裝https的支援工具 sudo apt-get install apt-transport-https ca-ce
Thumbnail
Docker-Compose負責對container做快速編排。設定檔預設名稱為docker-compose.yml,在檔案中,可以透過COMPOSE_FILE或-f對設定進行定義。 想要將專案透過Docker-Compose部署,需要創建docker-compose.yml和Dockerfile
Thumbnail
獲取Image docker pull 查看Image docker images 可以查看REPOSITORY、TAG、IMAGE ID、CREATED與SIZE。 創建Image docker build [OPTIONS] PATH | URL | - 上傳Imag
Thumbnail
MacOS 請先安裝「Homebrew」。開啟「終端機」,輸入底下指令: brew cask install​ docker 載入Docker App後,點擊Next,輸入MacOS登入密碼。安裝完成後,輸入底下指令查看版本資訊: ​docker -v Linux 開啟「終端機
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
Thumbnail
當你安裝完docker,並且設定好所有相關程序後。你正要使用docker去進行操作,讓專案可以在容器哩,方便平台移轉、備份、共用等等等等等;如果你遇到CUDA docker runtime 的問題時,這篇正適合你閱讀。 開始之前,如果你要參考怎麼安裝docker,設定docker環境,請參考:
將使用者加入Docker群組 sudo groupadd docker sudo usermod -aG docker $USER 設定開機自動啟動Docker服務 sudo systemctl enable docker sudo systemctl start docker 試跑
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
Harbor是企業級的私有Docker Repository,提供管理使用者介面、角色存取控制等企業級特性。 安裝 更新apt sudo apt-get update 安裝https的支援工具 sudo apt-get install apt-transport-https ca-ce
Thumbnail
Docker-Compose負責對container做快速編排。設定檔預設名稱為docker-compose.yml,在檔案中,可以透過COMPOSE_FILE或-f對設定進行定義。 想要將專案透過Docker-Compose部署,需要創建docker-compose.yml和Dockerfile
Thumbnail
獲取Image docker pull 查看Image docker images 可以查看REPOSITORY、TAG、IMAGE ID、CREATED與SIZE。 創建Image docker build [OPTIONS] PATH | URL | - 上傳Imag
Thumbnail
MacOS 請先安裝「Homebrew」。開啟「終端機」,輸入底下指令: brew cask install​ docker 載入Docker App後,點擊Next,輸入MacOS登入密碼。安裝完成後,輸入底下指令查看版本資訊: ​docker -v Linux 開啟「終端機
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
Thumbnail
當你安裝完docker,並且設定好所有相關程序後。你正要使用docker去進行操作,讓專案可以在容器哩,方便平台移轉、備份、共用等等等等等;如果你遇到CUDA docker runtime 的問題時,這篇正適合你閱讀。 開始之前,如果你要參考怎麼安裝docker,設定docker環境,請參考:
將使用者加入Docker群組 sudo groupadd docker sudo usermod -aG docker $USER 設定開機自動啟動Docker服務 sudo systemctl enable docker sudo systemctl start docker 試跑