成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Podman 部署私有鏡像倉庫,你學會了嗎?

系統 Linux
?Podman[1]是一個無守護進程的開源 Linux 原生工具,旨在使用開放容器倡議 ( OCI )容器和容器映像輕松查找、運行、構建、共享和部署應用程序。主要是由RedHat推動改進。

Podman[1]是一個無守護進程的開源 Linux 原生工具,旨在使用開放容器倡議 ( OCI )容器和容器映像輕松查找、運行、構建、共享和部署應用程序。主要是由RedHat推動改進。

關于了解 Podman 更多內容:

?Podman 下一代 Linux 容器工具[2]

?Podman 入門指南[3]

1. 安裝 Podman 和 httpd-tools

yum install -y podman httpd-tools

2. 配置倉庫存儲位置

存儲目錄為 /opt/registry/

mkdir -p /opt/registry/{auth,certs,data}

?Auth子目錄存儲htpasswd用于身份驗證的文件。

?Certs子目錄存儲倉庫使用的證書驗證。

?Data目錄存儲存儲在倉庫中的實際鏡像。

如果你想單獨掛載一塊盤來存儲數據可以利用parted命令

sudo parted -s -a optimal -- /dev/sdb mklabel gpt
sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
sudo parted -s -- /dev/sdb align-check optimal 1
sudo pvcreate /dev/sdb1
sudo vgcreate vg0 /dev/sdb1
sudo lvcreate -n registry -l +100%FREE vg0
sudo mkfs.xfs /dev/vg0/registry
echo "/dev/vg0/registry /opt/registry/data xfs defaults 0 0" | sudo tee -a /etc/fstab

掛載驗證

$ sudo mount -a
$ df -hT /opt/registry/data
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-registry xfs 200G 1.5G 199G 1% /opt/registry/data

3. 生成訪問倉庫的憑據

3.1 htpasswd 用戶名和密碼

身份驗證由一個簡單的htpasswd文件和一個 SSL 密鑰對提供

htpasswd將在該/opt/registry/auth/目錄中創建一個名為 Bcrypt Htpasswd 的文件

htpasswd -bBc /opt/registry/auth/htpasswd registryuser  registryuserpassword

? b通過命令提供密碼。

? B使用 Bcrypt 加密存儲密碼。

? c創建文件。

? 用戶名為 registryuser。

? 密碼是 registryuserpassword。

查看文件

$ tac /opt/registry/auth/htpasswd
registryuser:$2y$05$XciI1wfzkUETe7XazJfc/uftBnMQfYOV1jOnbV/QOXw/SXhmLsApK

3.2 TLS 密鑰對

通過使用由可信機構(內部或外部)簽名的密鑰和證書或簡單的自簽名證書,倉庫通過 TLS 得到保護。要使用自簽名證書:

cat << EOF > ssl.conf
[ req ]
prompt = no
distinguished_name = req_subj
x509_extensions = x509_ext

[ req_subj ]
CN = Localhost

[ x509_ext ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:true
subjectAltName = @alternate_names

[ alternate_names ]
DNS.1 = localhost
IP.1 = 192.168.10.80
EOF

openssl req -config ssl.conf -new -x509 -nodes -sha256 -days 365 -newkey rsa:4096 -keyout /opt/registry/certs/domain.key -out /opt/registry/certs/domain.crt

openssl x509 -inform PEM -in /opt/registry/certs/domain.crt -out /opt/registry/certs/domain.cert

?req OpenSSL 生成和處理證書請求。

?-newkey OpenSSL 創建一個新的私鑰和匹配的證書請求。

?rsa:4096 OpenSSL 生成一個 4096 位的 RSA 密鑰。

?-nodes OpenSSL 私鑰沒有密碼要求。私鑰不會被加密。

?-sha256 OpenSSL 使用 sha256 來簽署請求。

?-keyout OpenSSL 存儲新密鑰的名稱和位置。

?-x509 OpenSSL 生成一個自簽名證書。

?-days OpenSSL 密鑰對有效的天數。

?-out OpenSSL 在哪里存儲證書。

輸入證書的相應選項。CN=值是您的主機的主機名。主機的主機名應該可由 DNS 或/etc/hosts文件解析。

$ ll /opt/registry/certs/
total 12
-rw-r--r-- 1 root root 1842 Nov 21 20:01 domain.cert
-rw-r--r-- 1 root root 1842 Nov 21 20:01 domain.crt
-rw------- 1 root root 3272 Nov 21 20:01 domain.key

將服務器證書、密鑰和 CA 文件復制到 podman證書文件夾中。您必須首先創建適當的文件夾

mkdir -p /etc/containers/certs.d/192.168.10.80\:5000/
cp -r /opt/registry/certs/* /etc/containers/certs.d/192.168.10.80\:5000/

注意:如果倉庫未使用 TLS 保護,則/etc/containers/registries.conf可能必須為倉庫配置文件中的不安全設置。

該證書還必須得到您的主機和客戶端的信任:

cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
trust list | grep -i "<hostname>"

4. 啟動容器

$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/registry latest 81c944c2288b 9 days ago 24.7 MB
podman run --name myregistry \
-p 5000:5000 \
-v /opt/registry/data:/var/lib/registry:z \
-v /opt/registry/auth:/auth:z \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v /opt/registry/certs:/certs:z \
-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" \
-e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" \
-e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true \
-d \
docker.io/library/registry:latest

選項的詳細信息是:

?--name myregistry將容器命名為myregistry。

?-p 5000:5000將容器中的端口 5000 公開為主機上的端口 5000。

?-v /opt/registry/data:/var/lib/registry:z像 在具有正確 SELinux 上下文的容器中一樣安裝/opt/registry/data 在主機/var/lib/registry

?-v /opt/registry/auth:/auth:z/opt/registry/auth在主機上安裝,就像/auth 在具有正確 SELinux 上下文的容器中一樣。

?-v opt/registry/certs:/certs:z像 在具有正確 SELinux 上下文的容器中一樣安裝/opt/registry/certs 在主機上 。/certs

?-e "REGISTRY_AUTH=htpasswd" 使用bcrypt加密htpasswd文件進行身份驗證。由容器的 REGISTRY_AUTH_HTPASSWD_PATH 環境變量設置的文件位置。

?-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" 指定用于htpasswd.

?-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd使用容器中的 bcrypt 加密/auth/htpasswd 文件。

?-e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt"設置證書文件的路徑。

?-e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key"設置私鑰路徑。

?-e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true為 schema1 清單提供向后兼容性。

?-d docker.io/library/registry:latest是一個允許存儲和分發鏡像的倉庫應用程序。

注意:如果防火墻在主機上運行,則需要允許暴露的端口 (5000)。

firewall-cmd --add-port=5000/tcp --zone=internal --permanent
firewall-cmd --add-port=5000/tcp --zone=public --permanent
firewall-cmd --reload

或者直接關閉

systemctl stop firewalld && systemctl disable firewalld
setenforce 0

5. 測試

5.1 登陸

docker login -u registryuser -p registryuserpassword 192.168.10.80:5000
Login Succeeded!

5.2 API訪問

$ curl  -k -u "registryuser:registryuserpassword" https://192.168.10.80:5000/v2/_catalog
{"repositories":[]}

?更多API 訪問策略請參考這里[4]

5.3 鏡像入庫

從公共拉取alpine:latest鏡像

$ podman pull alpine:latest
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob ca7dd9ec2225 [--------------------------------------] 0.0b / 0.0b
Copying config bfe296a525 done
Writing manifest to image destination
Storing signatures
bfe296a525011f7eb76075d688c681ca4feaad5afe3b142b36e30f1a171dc99a

打標簽

podman tag alpine:latest 192.168.10.80:5000/alpine:latest

推送入庫

podman push 192.168.10.80:5000/alpine:latest

5.4 查詢鏡像信息

查詢是否入庫

$ curl  -k -u "registryuser:registryuserpassword" https://192.168.10.80:5000/v2/_catalog
{"repositories":["alpine"]}

查看鏡像標簽

$  curl  -k -u "registryuser:registryuserpassword" https://192.168.10.80:5000/v2/alpine/tags/list
{"name":"alpine","tags":["latest"]}

查看鏡像 manifests

$ curl  -k -u "registryuser:registryuserpassword"https://192.168.10.80:5000/v2/alpine/manifests/latest
{
"schemaVersion": 1,
"name": "alpine",
"tag": "latest",
"architecture": "amd64",
"fsLayers": [
{
"blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
},
{
"blobSum": "sha256:60f8044dac9f779802600470f375c7ca7a8f7ad50e05b0ceb9e3b336fa5e7ad3"
}
],
"history": [
{
"v1Compatibility": "{\"architecture\":\"amd64\",\"config\":{\"Hostname\":\"\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[\"/bin/sh\"],\"Image\":\"sha256:18f412e359de0426344f4fe1151796e2d9dc121b01d737e953f043a10464d0b7\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":null},\"container\":\"3cd2ce612b9119be9673860022420eee020f0a6d44e9072ca25196f4f0a4613d\",\"container_config\":{\"Hostname\":\"3cd2ce612b91\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) \",\"CMD [\\\"/bin/sh\\\"]\"],\"Image\":\"sha256:18f412e359de0426344f4fe1151796e2d9dc121b01d737e953f043a10464d0b7\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":{}},\"created\":\"2022-11-12T04:19:23.199716539Z\",\"docker_version\":\"20.10.12\",\"id\":\"260323e12fa2abcb1ff61576931037c6f8538afeb5ff82fa256670a20b384b6b\",\"os\":\"linux\",\"parent\":\"faa2cddd53c99ad978614b839a2a20a47f143a4d6ecb86bda576dfb3124c0cad\",\"throwaway\":true}"
},
{
"v1Compatibility": "{\"id\":\"faa2cddd53c99ad978614b839a2a20a47f143a4d6ecb86bda576dfb3124c0cad\",\"created\":\"2022-11-12T04:19:23.05154209Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) ADD file:ceeb6e8632fafc657116cbf3afbd522185a16963230b57881073dad22eb0e1a3 in / \"]}}"
}
],
"signatures": [
{
"header": {
"jwk": {
"crv": "P-256",
"kid": "5BQE:5CXW:TWNN:OFV7:ZPNY:ARAG:ZJ7K:Z5GI:ZVQ3:SZYQ:2M3J:D7YG",
"kty": "EC",
"x": "-JvBdARI6NPMx8g6d1zyPzmSkkZ8rKIcxdz2BEonpzU",
"y": "4OlY36zLCvLHXzMrb4w8W2TZSJdVc5ijM0Y9DieEkWY"
},
"alg": "ES256"
},
"signature": "ZL0HFyuq9G9cYsBzZZqMlwGK3aQMJHFKeQ2Dh8XByzGKtfoJCJ5kQY0W3yynzb3Mj9WYrzeabZwey-dZIHt_7Q",
"protected": "eyJmb3JtYXRMZW5ndGgiOjIwODgsImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAyMi0xMS0yMVQxMjoyNjowM1oifQ"
}
]
}

參考:

  • How to implement a simple personal/private Linux container image registry for internal use[5]
  • docker registry倉庫私搭并配置證書[6]

引用鏈接

[1] Podman: https://podman.io/

[2] Podman 下一代 Linux 容器工具: https://blog.csdn.net/xixihahalelehehe/article/details/125618884

[3] Podman 入門指南: https://blog.csdn.net/xixihahalelehehe/article/details/121611523

[4] 更多API 訪問策略請參考這里: https://ghostwritten.blog.csdn.net/article/details/105926147

[5] How to implement a simple personal/private Linux container image registry for internal use: https://www.redhat.com/sysadmin/simple-container-registry

[6] docker registry倉庫私搭并配置證書: https://ghostwritten.blog.csdn.net/article/details/105926147


責任編輯:武曉燕 來源: 愛死亡機器人
相關推薦

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2024-03-06 08:28:16

設計模式Java

2022-06-16 07:50:35

數據結構鏈表

2022-12-06 07:53:33

MySQL索引B+樹

2023-01-31 08:02:18

2023-10-06 14:49:21

SentinelHystrixtimeout

2022-07-13 08:16:49

RocketMQRPC日志

2023-05-05 06:54:07

MySQL數據查詢

2023-03-26 22:31:29

2023-08-26 21:34:28

Spring源碼自定義

2023-06-26 13:08:52

GraphQL服務數據

2024-02-02 11:03:11

React數據Ref

2023-07-30 22:29:51

BDDMockitoAssert測試

2023-10-10 11:04:11

Rust難點內存

2024-05-06 00:00:00

InnoDBView隔離
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天干天天干 | 国产激情视频在线观看 | 麻豆av在线| 国产精品五月天 | 国产精品久久久亚洲 | 国产成人免费视频网站高清观看视频 | 成人免费影院 | 最新黄色在线观看 | 欧美一区视频 | 日本h片在线观看 | 9191av | 欧美视频一区二区三区 | 伊人久久伊人 | 成人高清在线 | www亚洲成人 | 狠狠色综合久久婷婷 | 日本精a在线观看 | 天天综合网7799精品 | 欧美日韩一区二区三区视频 | 99精品国产在热久久 | 成人亚洲一区 | 亚洲国产精品va在线看黑人 | 国产一区二区精品在线观看 | 国产精品福利在线观看 | 亚洲视频一区在线播放 | 亚洲欧美日韩在线 | 国产99久久精品一区二区永久免费 | 97中文视频 | 一级片在线观看 | 夜夜夜久久久 | 日本中文在线视频 | 免费成人高清在线视频 | 精品欧美一区免费观看α√ | 婷婷免费视频 | 日韩一区精品 | 91亚洲一区| 伊人色综合久久久天天蜜桃 | 成年人在线视频 | 亚洲欧美一区二区三区在线 | 三级av在线 | 欧美一级欧美一级在线播放 |