docker倉庫
docker倉庫:集中存放鏡像的地方
注冊伺服器(Registry) 存放倉庫的具體伺服器
伺服器可有多個倉庫 每個倉庫可以有多個鏡像 倉庫相當于一個具體的項目或目錄
如倉庫位址 d1.dickerpool.com/ubuntu,d1.dickerpool.com是注冊伺服器位址,ubuntu是倉庫名
倉庫分為
- 公共倉庫 如官方的 dockerhub倉庫 , 阿裡雲開發者平台 等提供的鏡像倉庫,内含大量鏡像
- 私有倉庫 可供自己建立使用
從dockerhub倉庫擷取鏡像
#無需登陸可查找,拉取官網中的鏡像
#尋找帶星的centos鏡像
docker search centos --s
#拉取官方鏡像 預設latest 後面跟:版本号 可從倉庫拉取指定版本
docker pull centos
從阿裡雲擷取鏡像
阿裡雲nginx鏡像
資源鏡像分兩類
- centos的基礎鏡像 官方提供 稱為基礎或根鏡像
- xxx(使用者名/centos) 指定某個使用者的鏡像
搭建本地倉庫
搭建本地倉庫的意義
1.從dockerhub下載下傳和上傳速度可能會慢
2.在生産環境用的docker鏡像可能存放一些code或私密的東西放到公共倉庫就跟github一樣會被擷取不安全
3.用于内網下載下傳和上傳都非常快
通過官方提供registry鏡像簡單搭建一套本地私有倉庫
#配置端口開放,到時候用于把主控端的5000端口映射到容器 這邊我使用firewall開放5000端口
firewall-cmd --permanent --zone=public --add-port=5000/tcp
#重新加載防火牆
firewall-cmd --reload
#檢視清單
firewall-cmd --list-all
#用registry鏡像啟動容器 -d 背景運作 -p端口映射 主控端的5000映射給容器的5000端口 監聽5000端口 加上--restart=always的話容器意外關閉也會自動啟動 加--name 可給容器自定義名字 通過官方的registry鏡像建立本地私有倉庫服務(如果本地無此鏡像将會從官網拉取) 沒有啟動 隻是建立好
docker run -d -p 5000:5000 registry --restart=always
#預設情況下,會将倉庫存放于容器内的/tmp/registry目錄下,這樣如果容器被删除,則存放于容器中的鏡像也會丢失,是以我們一般情況下會指定本地一個目錄挂載到容器内的/tmp/registry下(需stop占5000端口的容器),例如
sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
建立鏡像容器
期間如果報以下錯
是因為在進行原位址到目标位址轉換的時候沒有在docker主機的iptables規則中找到nat表規則,隻有filter表規則
依次執行
#殺程序
sudo pkill docker
#清空nat表所有鍊
sudo iptables -t nat -F
#關閉網橋docker0
sudo ifconfig docker0 down
#删除網橋docker0(docker0這個網橋是在啟動Docker Daemon時建立的,下次daemon啟動(假設沒有指定-b參數)時,又會自動建立docker0網橋) 如果brctl不存在則sudo yum install bridge-utils
sudo brctl delbr docker0
#重新開機docker
sudo systemctl restart docker
#再次運作
docker run -d -p 5000:5000 registry --restart=always
如果報錯
Error response from daemon: Get xxx: proxyconnect tcp: dial tcp :443: getsockopt: connection refused
解決方案
#設定 信任該位址
sudo vi /etc/docker/daemon.json
#在裡面添加 172.16.0.11修改為自己的ip 一般用區域網路ip
{
"insecure-registries":["172.16.0.11:5000"]
}
#修改後重新開機
sudo systemctl restart docker
daemon.json
推送鏡像到本地倉庫
拉取輕量鏡像busybox測試
busybox:內建上百個最常用linux指令和工具的軟體 例如busybox ls = ls
#拉取
docker pull busybox
#修改标簽
docker tag busybox 172.16.0.11:5000/busybox
#推送鏡像到本地倉庫 如果送出被拒絕 删除之前容器 重新執行上述指令 再次送出
docker push 172.16.0.11:5000/busybox
#檢視本地倉庫鏡像
curl http://172.16.0.11:5000/v2/_catalog
#可以删除本地busybox鏡像,然後從本地倉庫拉取做測驗
docker pull 172.16.0.11:5000/busybox
送出鏡像至倉庫
#進入剛剛用官方倉庫鏡像啟動的容器
docker exec -it ef10e921ad0f /bin/sh
進入倉庫容器