Docker 私有倉庫的搭建
docker 私有倉庫默認只支持https協議的訪問 不支持http協議 如果需要允許通過http協議訪問 必須手動修改配置文件
docker官方默認提供的倉庫 提供軟件包docker-distribution 由python開發的web系統
# yum install docker-registry
# systemctl start docker-distribution
非dockerhub的Reistry必須明確指定服務器的地址 端口 非頂層的私有倉庫還必須給定用戶名
要想把鏡像推送的私有倉庫 必須先給鏡像打上合適的標簽 標簽錯誤是無法上傳docker 鏡像的

給鏡像打標簽 # docker image ls REPOSITORY TAG IMAGE ID myweb v2 83d7884335ed # docker tag myweb:v2 192.168.30.137:5000/myweb:v2_2 [root@nginx-docker]# docker push 192.168.30.137:5000/myweb The push refers to a repository [192.168.30.137:5000/myweb] Get https://192.168.30.137:5000/v1/_ping: http: server gave HTTP response to HTTPS client #允許運行http協議 [root@nginx-docker docker]# vi /etc/docker/daemon.json { "insecure-registries":["192.168.30.137:5000"] } #修改daemon.json 拉取私有倉庫鏡像 [root myweb]# docker pull 192.168.30.137:5000/myweb:v2_2
HARBOR 搭建私有倉庫
企業級docker私有倉庫項目 原生支持鏡像的冗余備份 主要由vmware 中國團隊成員開發
支持訪問控制 活動監控 主從復制
需要借助docker-compose 單機容器編排工具安裝HARBOR
1.安裝docker-compose
yum install docker-compose

# yum install docker-compose # https://github.com/vmware/harbor 1.下載harbor源碼 2.# tar xf harbor-offline-installer-v1.5.2.tgz -C /usr/local/ 3. vi /usr/local/harbor/harbor.cfg hostname = myharbor.com 不能寫服務器IP 必須寫主機名 后面無法解析地址 造成上傳鏡像失敗 4.cd /usr/local/harbor 5. ./install.sh 自動執行安裝腳本

5.http://192.168.30.139/harbor/sign-in 項目 》 新建項目(倉庫) 》 6.harbor上傳下載鏡像的時候需要進行用戶認證的 harbor中創建的用戶 [root@nginx-docker ~]# docker tag myweb:v2 192.168.30.139/dev/myweb:v2_1 [root@nginx-docker ~]# docker push 192.168.30.139/dev/myweb:v2_1 The push refers to a repository [192.168.30.139/dev/myweb] Get https://192.168.30.139/v1/_ping: dial tcp 192.168.30.139:443: getsockopt: connection refused [root@nginx-docker ~]# vi /etc/docker/daemon.json [root@nginx-docker ~]# systemctl restart docker [root@nginx-docker ~]# docker push 192.168.30.139/dev/myweb:v2_1 The push refers to a repository [192.168.30.139/dev/myweb] 86527283a11a: Preparing b87bb670f898: Preparing 841051620742: Waiting 717b092b8c86: Waiting denied: requested access to the resource is denied [root@nginx-docker ~]# docker login 92.168.30.139 Username: yxh Password: Error response from daemon: Get https://92.168.30.139/v1/users/: dial tcp 92.168.30.139:443: i/o timeout 使用docker login不能使用服務器IP地址,必須使用可以被解析的主機名 vi /etc/hosts 192.168.30.139 myharbor.com [root@nginx-docker ~]# docker login myharbor.com Username: yxh Password: Login Succeeded [root@nginx-docker ~]# docker tag myweb:v2 myharbor.com/dev/myweb:v2 [root@nginx-docker ~]# docker push myharbor.com/dev/myweb:v2 The push refers to a repository [myharbor.com/dev/myweb] 86527283a11a: Pushed 6263c50a557c: Pushed c6ee3d0df60c: Pushed 2eb31a989e11: Pushed v2: digest: sha256:41cfd4c47d2f24ca703ef32ff7de9ed166be65adf7c725ff2894cd0b0125ee2a size: 1774 一次性推送整個倉庫 1.先給多個鏡像打上標簽 docker tag myweb:v3-1 myharbor.com/dev/myweb:v3-1 docker tag myweb:v3-2 myharbor.com/dev/myweb:v3-2 docker tag myweb:v3-3 myharbor.com/dev/myweb:v3-3 2.上傳整個倉庫(把三個鏡像上傳到同一倉庫(myweb)中) docker push myharbor.com/dev/myweb 3.下載鏡像 # docker pull myharbor.com/dev/myweb:v2 Trying to pull repository myharbor.com/dev/myweb ... v2: Pulling from myharbor.com/dev/myweb Digest: sha256:41cfd4c47d2f24ca703ef32ff7de9ed166be65adf7c725ff2894cd0b0125ee2a Status: Downloaded newer image for myharbor.com/dev/myweb:v2 docker-compose命令 停止harbor docker-compose stop 啟動harbor docker-compose start
harbor倉庫的使用
docker容器資源限制
容器技術能夠實現主要依賴於內核的兩個特性 名稱空間和控制組
默認情況一個容器是沒有使用資源的限制,它能耗掉宿主機上的所有資源
限制容器的cpu和內存這兩種資源
OOM
如果系統內核探測到當前宿主機已經沒有足夠內存可分配給系統運行中重要的系統進程,就會拋出一個系統異常並且會強制殺死一些內存耗用比較大的應用進程
每個進程都有一個OOM_adj參數 代表一旦發生OOM 是否優先被kill的優先級
容器內存限制
容器CPU限制
cpu核心編號是從0開始編號的
--cpus 限制容器最多使用多少核cpu
# docker pull lorel/docker-stress-ng 下載docker容器壓測鏡像
啟動容器后執行 stress help 查看相關使用文檔