前提
使用 Docker Hub
可以解決大部分問題,但有時候我們也會有自己私有的鏡像,且 Docker Hub
網速也是個問題,所以搭建一個私有的內部的倉庫必不可少。
搭建私有倉庫的優點 :
- 節省網絡帶寬,提升
Docker
部署速度,不用每個鏡像從DockerHub
上去下載,只需從私有倉庫下載就可 - 私有鏡像,包含公司敏感信息,不方便公開對外,只在公司內部使用
docker-registry
是官方提供的工具,可以用於構建私有的鏡像倉庫。本文內容基於 docker-registry v2.x
版本。
1、 搭建私有倉庫
1.1 查找合適的鏡像
docker search registry --filter=stars=100
--filter=stars=100
表示過濾掉星數低於100
的
1.2 安裝鏡像
docker pull registry
1.3 啓動鏡像
docker run -d -p 5000:5000 --restart=always --name=registry-srv -v /opt/docker/registry:/var/lib/registry registry
參數解釋
-d
後臺運行-p
將容器的5000
端口映射到宿主機的5000
端口--restart
docker
服務重啓後總是重啓此容器--name
容器的名稱-v
將容器內的/var/lib/registry
映射到宿主機的/opt/docker/registry
目錄
1.4 允許http
訪問
Docker
默認不允許非HTTPS
方式推送鏡像。我們可以通過 Docker
的配置選項來取消這個限制,或者查看下一節配置能夠通過 HTTPS
訪問的私有倉庫
修改/etc/docker/daemon.json
添加私有倉庫地址
{
"registry-mirrors":[
"http://f1361db2.m.daocloud.io"
],
"insecure-registries": [
"http://192.168.18.30:5000"
]
}
該文件必須符合
json
規範,否則Docker
將不能啓動
registry-mirrors
配置加速地址
insecure-registries
配置非https
的hub
的地址
2、搭建WEB
管理工具
搭建一個web
服務,查看倉庫裏的鏡像,查看修改image
比較方便;docker
web
管理工具比較多,比如shipyard
、docker ui
等,這裏使用shipyard
管理工具
2.1 安裝
2.1.1 shipyard依賴安裝
rethinkdb
deploy
首先啓動的就是RethinkDB
容器,shipyard
採用RethinkDB
作爲數據庫來保存用戶等信息
docker pull rethinkdb
microbox/etcd
爲了使用Swarm
,我們需要一個外部的密鑰值存儲羣容器,shipyard
默認是採用了etcd
docker pull microbox/etcd
shipyard/docker-proxy
默認情況下,Docker
引擎只監聽Socket
,我們可以重新配置引擎使用TLS
或者使用一個代理容器,轉發請求從TCP
到Docker
監聽的UNIX Socket
docker pull shipyard/docker-proxy
swarm
Swarm
管理器,和設置代理
docker pull swarm
shipyard/shipyard
shipyard
控制器,Remote API
的實現和web
的實現。
docker pull shipyard/shipyard
2.2.2 啓動依賴
注意啓動順序
- 啓動數據存儲
docker run \
-ti \
-d \
--restart=always \
--name shipyard-rethinkdb \
rethinkdb
- 啓動
Discovery
docker run \
-ti \
-d \
-p 4001:4001 \
-p 7001:7001 \
--restart=always \
--name shipyard-discovery \
microbox/etcd -name discovery
- 啓動代理
docker run \
-ti \
-d \
-p 2375:2375 \
--hostname=$HOSTNAME \
--restart=always \
--name shipyard-proxy \
-v /var/run/docker.sock:/var/run/docker.sock \
-e PORT=2375 \
shipyard/docker-proxy:latest
$HOSTNAME
會獲取系統變量
- 啓動
Swarm Manager
docker run \
-ti \
-d \
--restart=always \
--name shipyard-swarm-manager \
swarm:latest \
manage --host tcp://0.0.0.0:3375 etcd://<IP-OF-HOST>:4001
注意
<IP-OF-HOST>
改成自己的,是shipyard
部署機的IP
- 啓動
Controller
docker run \
-ti \
-d \
--restart=always \
--name shipyard-controller \
--link shipyard-rethinkdb:rethinkdb \
--link shipyard-swarm-manager:swarm \
-p 8080:8080 \
shipyard/shipyard:latest \
server \
-d tcp://swarm:3375
在瀏覽器輸入: http://127.0.0.1:8080
默認賬號:admin
默認密碼:shipyard
可以採用一鍵部署的方式 參考 Shipyard Automated
curl -sSL https://shipyard-project.com/deploy | bash -s -- -h
注意
-sSL
是SSL
連接,若不支持 改成-s
即可
非一鍵安裝模式 參考
官方教程
shipyard安裝