前言
docker hub注冊后只可以免費上傳一個鏡像,不過我們也可以使用其他免費docker倉庫,比如騰訊雲的免費docker倉庫,不受上傳限制。
當然我們也可以創建我們自己的私有倉庫,再也不用擔心上傳速度受到影響,並且也更加安全。
示例說明
- 使用的是win10自帶的docker
- 服務器使用的是centos系統
- 服務器ip地址以 182.61.60.219 為例(該IP只是示例,並不可用哦)
- 倉庫端口以8050為例
- 倉庫訪問端口以5000為例
- 倉庫UI訪問端口以5051為例
- 本地局域網地址以192.168.2.106為例
示例目錄
搭建私有registry
1.添加auth認證:
htpasswd加密方式 htpasswd命令是Apache的Web服務器內置工具,用於創建和更新儲存用戶名、域和用戶基本認證的密碼文件。
Reference
Use
- docker run --entrypoint htpasswd registry -Bbn admin 123456 > ./auth/passwd // 新增用戶並創建加密文件(如果系統沒有安裝此命令,可以使用docker容器中的命令來實現)
- 利用htpasswd命令添加用戶 htpasswd -bc htpasswd.user admin 123456
- 在bin目錄下生成一個 htpasswd.user 文件,用戶名admin,密碼:123456,默認采用MD5加密方式。
- 在原有密碼文件中增加下一個用戶 htpasswd -b htpasswd.user Jack 123456
- 去掉-c選項,即可在第一個用戶之后添加第二個用戶,依此類推。
- 利用htpasswd命令刪除用戶名和密碼 htpasswd -D htpasswd.user Jack
- 利用htpasswd命令修改密碼 htpasswd -b htpasswd.user Jack 123456
2.Config
windows:
默認使用https,使用http需要注冊
修改daemon.json文件sudo vim /etc/docker/daemon.json
添加:{ "insecure-registries":["192.168.49.132:5000"]}
注: win10的配置在docker的設置里可以找到daemon配置選項
centos 系統
- 在 /etc/docker/daemon.json 文件中寫入:
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"[私有倉庫 ip:port]"
]
}
- 然后重啟 docker
ystemctl restart docker
3.docker-compose.yaml
version: '2.1'
services:
registry:
image: registry
container_name: my_registry
volumes:
- ./registry:/var/lib/registry
- ./auth:/auth
environment:
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/passwd
restart: always
privileged: true
ports:
- "8050:5000"
4.Login to docker:
docker login http://182.61.60.219:8050
5.Upload to docker:
docker tag hello-world 192.168.2.106:5000/hello-world //設置標簽 加上倉庫地址前綴
docker push 192.168.2.106:5000/hello-world
6.View image
GET http://192.168.2.106:5000/v2/_catalog
GET http://192.168.2.106:5000/v2/image_name/tags/list
Reference
7. 可以配置UI來美化倉庫頁面
version: '2.1'
services:
registry-ui:
image: konradkleine/docker-registry-frontend:v2
container_name: my_registry_ui
restart: always
privileged: true
environment:
- ENV_DOCKER_REGISTRY_HOST=182.61.60.219
- ENV_DOCKER_REGISTRY_PORT=8050
ports:
- "8051:80"
總結
- 有時我們系統中沒有安裝某個命令時,可以使用鏡像中的命令來代替實現。
- 步驟7只是用來優化docker倉庫頁面的,如果不使用UI,那么只可以看到json格式的返回結果。