Docker倉庫

簡介 

  倉庫(Repository)是集中存放鏡像的地方。
  一個容易與之混淆的概念是註冊服務器(Registry)。實際上註冊服務器是存放倉庫的具體服務器,每一個服務器上能夠有多個倉庫,而每一個倉庫下面有多個鏡像。從這方面來講,倉庫能夠被認爲是一個具體的項目或目錄。例如對於倉庫地址hub.docker.com/_/ubuntu來講,hub.docker.com是註冊服務器地址,ubuntu是倉庫名。
  倉庫又分公共倉庫和私有倉庫,在本文將展現如何使用DockerHub官方倉庫進行登陸、下載等基本操做;最後還將介紹建立和使用私有倉庫的基本操做。php

 

Docker Hub

  目前Docker官方維護了一個公共倉庫https:/hub.docker.com,其中已經包括15000多個的鏡像。大部分需求均可以經過在Docker Hub中直接下載鏡像來實現。mysql

登陸

  能夠經過執行docker login命令來輸入用戶名、密碼和郵箱來完成註冊和登陸。註冊成功後,本地用戶目錄的.dockercfg中將保存用戶的認證信息。sql

基本操做

  用戶無需登陸便可經過docker search命令來查找官方倉庫中的鏡像,並利用docker pull命令來將它下載到本地。
  在前面博文中,已經具體介紹瞭如何使用docker pull命令。例如以centos爲關鍵詞進行搜索:docker

[root@gavin ~]# sudo docker search centos

NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5488                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              122                                     [OK]
jdeathe/centos-ssh                 CentOS-6 6.10 x86_64 / CentOS-7 7.6.1810 x86…   111                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   96                                      [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   59                                      
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              57                                      [OK]
...

  根據是否爲官方提供,可將這些鏡像資源分爲兩類。一種是相似centos這樣的基礎鏡像,稱爲基礎或根鏡像。這些鏡像是由Docker公司建立、驗證、支持、提供。這樣的鏡像每每使用單個單詞做爲名字。
  還有一種類型,好比ansible/centos7-ansible鏡像,它是由DockerHub的用戶ansible建立並維護的,帶有用戶名稱爲前綴,代表是某用戶的某倉庫。能夠經過用戶名稱前綴user_
name/來指定使用某個用戶提供的鏡像,好比ansible用戶的鏡像前綴爲ansible/。
  另外,在查找的時候經過-s N參數能夠指定僅顯示評價爲N星以上的鏡像。
  下載官方centos鏡像到本地以下所示:json

[root@gavin ~]# sudo docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8ba884070f61: Pull complete 
Digest: sha256:a799dd8a2ded4a83484bbae769d97655392b3f86533ceb7dd96bbac929809f3c
Status: Downloaded newer image for centos:latest

  用戶也能夠在登陸後經過docker push命令來將本地鏡像推送到Docker Hub。ubuntu

自動建立

  自動建立(Automated Builds)功能對於須要常常升級鏡像內程序來講十分方便。有時候,用戶建立了鏡像,安裝了某個軟件,若是軟件發佈新版本則須要手動更新鏡像。
  而自動建立功能使得用戶經過Docker Hub指定跟蹤一個目標網站(目前支持GitHub或BitBucket)上的項目,一旦項目發現新的提交,則自動執行建立。
  要配置自動建立,包括以下的步驟:vim

  1. 建立並登陸Docker Hub,以及目標網站;*在目標網站中鏈接賬戶到Docker Hub。
  2. 在Docker Hub中配置一個自動建立。
  3. 選取一個目標網站中的項目(須要含Dockerfile)和分支。
  4. 指定Dockerfile的位置,並提交建立。

  以後,能夠在Docker Hub的「自動建立」頁面中跟蹤每次建立的狀態。centos

建立和使用私有倉庫

使用registry 鏡像建立私有倉庫

  安裝Docker後,能夠經過官方提供的registry鏡像來簡單搭建一套本地私有倉庫環境:服務器

[root@gavin ~]# sudo docker run -d -p 5000:5000 registry

  這將自動下載並啓動一個registry容器,建立本地的私有倉庫服務。
  默認狀況下,會將倉庫建立在容器的/tmp/registry目錄下。能夠經過-v參數來將鏡像文件存放在本地的指定路徑上。
  例以下面的例子將上傳的鏡像放到/opt/data/registry目錄:session

[root@gavin ~]# sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

  此時,在本地將啓動一個私有倉庫服務,監聽端口爲5000。

管理私有倉庫鏡像

  首先在A虛擬機中搭建私有倉庫,查看其地址爲192.168.1.16:5000。而後在B虛擬中測試上傳和下載鏡像。
  在B虛擬機中查看已有鏡像:

[root@gavin ~]# sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              9f38484d220f        5 months ago        202MB

  使用docker tag命令將這個鏡像標記爲192.168.1.16:5000/test(格式爲docker tag IMAGE[:TAG] [REGISTRYHOST/] [USERNAME/]NAME[:TAG]):

[root@gavin ~]# sudo docker tag centos:latest 192.168.1.16:5000/test
[root@gavin ~]# sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE192.168.1.16:5000/test   latest              9f38484d220f        5 months ago        202MB
centos              latest              9f38484d220f        5 months ago        202MB

  使用docker push上傳標記的鏡像:

[root@gavin ~]# sudo docker push 192.168.1.16:5000/test
The push refers to repository [192.168.1.16:5000/test]
d69483a6face: Pushed 
latest: digest: sha256:ca58fe458b8d94bc6e3072f1cfbd334855858e05e1fd633aa07cf7f82b048e66 size: 529

  如今能夠到任意一臺能訪問到192.168.1.16地址的機器去下載這個鏡像了:

[root@gavin /]# sudo docker pull 192.168.1.16:5000/test
Using default tag: latest
latest: Pulling from test
Digest: sha256:ca58fe458b8d94bc6e3072f1cfbd334855858e05e1fd633aa07cf7f82b048e66
Status: Downloaded newer image for 192.168.1.16:5000/test:latest
[root@gavin /]# sudo docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE192.168.1.16:5000/test   latest              9f38484d220f        5 months ago        202MB

遇到的問題

  推送鏡像到私服報錯:

The push refers to repository [192.168.1.16:5000/test]
Get https://192.168.1.16:5000/v2/: http: server gave HTTP response to HTTPS client

  緣由:

docker私有倉庫服務器,默認是基於https傳輸的,因此咱們須要在客戶端作相關設置,不使用https傳輸

  解決步驟:

[root@gavin ~]# vim /etc/docker/daemon.json

  將下面的代碼放進去保存並退出

"insecure-registries":["192.168.1.16:5000"]

  最終以下所示:

{
  "registry-mirrors": ["https://9pcu7szd.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.1.16:5000"]
}

  依次執行下面兩條命令,從新啓動docker:

[root@gavin ~]# systemctl daemon-reload
[root@gavin ~]# systemctl restart docker

 

這篇文章是我學習 Docker 的記錄,內容參考自《Docker技術入門與實戰》
相關文章
相關標籤/搜索