天天看點

Docker基本概念與實踐(三)-倉庫

docker倉庫
docker倉庫:集中存放鏡像的地方
注冊伺服器(Registry) 存放倉庫的具體伺服器 
伺服器可有多個倉庫 每個倉庫可以有多個鏡像 倉庫相當于一個具體的項目或目錄
如倉庫位址 d1.dickerpool.com/ubuntu,d1.dickerpool.com是注冊伺服器位址,ubuntu是倉庫名
           

倉庫分為

  1. 公共倉庫 如官方的 dockerhub倉庫 , 阿裡雲開發者平台 等提供的鏡像倉庫,内含大量鏡像
  2. 私有倉庫 可供自己建立使用
從dockerhub倉庫擷取鏡像
#無需登陸可查找,拉取官網中的鏡像
#尋找帶星的centos鏡像
docker search centos --s 

#拉取官方鏡像 預設latest  後面跟:版本号 可從倉庫拉取指定版本
docker pull centos 
           
從阿裡雲擷取鏡像
Docker基本概念與實踐(三)-倉庫

阿裡雲nginx鏡像

資源鏡像分兩類
  1. centos的基礎鏡像 官方提供 稱為基礎或根鏡像
  2. 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基本概念與實踐(三)-倉庫

建立鏡像容器

期間如果報以下錯

Docker基本概念與實踐(三)-倉庫
是因為在進行原位址到目标位址轉換的時候沒有在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
           
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基本概念與實踐(三)-倉庫

送出鏡像至倉庫

#進入剛剛用官方倉庫鏡像啟動的容器 
docker exec -it ef10e921ad0f /bin/sh
           
Docker基本概念與實踐(三)-倉庫

進入倉庫容器