天天看點

Docker Hub 倉庫使用,及搭建 Docker RegistryDocker Hub私有倉庫Contact

目前

Docker

官方維護了一個公共倉庫 Docker Hub,其中已經包括了數量超過

15,000

的鏡像。大部分需求都可以通過在

Docker Hub

中直接下載下傳鏡像來實作。

Docker Hub

注冊&&登入

你可以在 https://cloud.docker.com 免費注冊一個

Docker

賬号。

可以通過執行

docker login

指令互動式的輸入使用者名及密碼來完成在指令行界面登入

Docker Hub

你可以通過

docker logout

登出。

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: souyunku
Password: 輸入密碼
Login Succeeded           

複制

拉取鏡像

你可以通過

docker search

指令來查找官方倉庫中的鏡像,并利用

docker pull

指令來将它下載下傳到本地。

例如以

nginx

為關鍵詞進行搜尋:

$ docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                  Official build of Nginx.                        7636                [OK]                
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1214                                    [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of…   490                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p…   279                                     [OK]
kong                                                   Open-source Microservice & API Management la…   143                 [OK]                
webdevops/php-nginx                                    Nginx with PHP-FPM                              93                                      [OK]
kitematic/hello-world-nginx                            A light-weight nginx container that demonstr…   88                                                 

複制

可以看到傳回了很多包含關鍵字的鏡像,其中包括鏡像名字、描述、收藏數(表示該鏡像的受關注程度)、是否官方建立、是否自動建立。

官方的鏡像說明是官方項目組建立和維護的,

automated

資源允許使用者驗證鏡像的來源和内容。

根據是否是官方提供,可将鏡像資源分為兩類。

一種是類似

centos

這樣的鏡像,被稱為基礎鏡像或根鏡像。這些基礎鏡像由

Docker

公司建立、驗證、支援、提供。這樣的鏡像往往使用單個單詞作為名字。

還有一種類型,比如

jwilder/nginx-proxy

鏡像,它是由

Docker

的使用者建立并維護的,往往帶有使用者名稱字首。可以通過字首

username/

來指定使用某個使用者提供的鏡像,比如

jwilder

使用者。

另外,在查找的時候通過

--filter=stars=N

參數可以指定僅顯示收藏數量為

N

以上的鏡像。

下載下傳官方

nginx

鏡像到本地。

$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
e7bb522d92ff: Pull complete 
6edc05228666: Pull complete 
cd866a17e81f: Pull complete 
Digest: sha256:cf8d5726fc897486a4f628d3b93483e3f391a76ea4897de0500ef1f9abcd69a1
Status: Downloaded newer image for nginx:latest
root@souyunku:~/mydocker#           

複制

推送鏡像

我們先制作一個鏡像

先制作一個鏡像

建立

Dockerfile

檔案

$ touch Dockerfile           

複制

Dockerfile

内容如下

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html           

複制

生成鏡像

$ docker build -t nginx:v1 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nginx
 ---> 3f8a4339aadd
Step 2/2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
 ---> Using cache
 ---> 4ac2d12f10cd
Successfully built 4ac2d12f10cd
Successfully tagged nginx:v1           

複制

檢視鏡像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v1                  4ac2d12f10cd        23 minutes ago      108MB           

複制

推送制作的鏡像

使用者也可以在登入後通過

docker push

指令來将自己的鏡像推送到

Docker Hub。

以下指令中的

souyunku

請替換為你的

Docker

賬号使用者名。

标記本地鏡像,将其歸入**

souyunku

**倉庫

$ docker tag nginx:v1 souyunku/nginx:v1           

複制

檢視本地鏡像

$ docker images souyunku/nginx:v1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
souyunku/nginx      v1                  4ac2d12f10cd        41 minutes ago      108MB           

複制

推送鏡像

$ docker push souyunku/nginx:v1
The push refers to repository [docker.io/souyunku/nginx]
241cbe531d78: Pushed 
a103d141fc98: Pushed 
73e2bd445514: Pushed 
2ec5c0a4cb57: Pushed 
v1: digest: sha256:aae4f5b270340907da80b220315a0e82a15a9debc4347023a4d6c7a96b9cee40 size: 1155           

複制

拉取推送的鏡像

先把本地鏡像删除

$ docker rmi souyunku/nginx:v1
Untagged: souyunku/nginx:v1

$ docker rmi e0b
Untagged: nginx:v1
Deleted: sha256:e0bd56806499c0cec4534fe5a85525e45a4d12d8be188d5d498385b0ac36f33e
Deleted: sha256:67d1bbe70151d306c0014d6e3f5c1734ba74849b8989bab46e11f560ae8ec46d

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              3f8a4339aadd        5 days ago          108MB           

複制

拉取自己

docker hub

的鏡像

$ docker pull souyunku/nginx:v1
v1: Pulling from souyunku/nginx
e7bb522d92ff: Already exists 
6edc05228666: Already exists 
cd866a17e81f: Already exists 
9c3032d48351: Pull complete 
Digest: sha256:aae4f5b270340907da80b220315a0e82a15a9debc4347023a4d6c7a96b9cee40
Status: Downloaded newer image for souyunku/nginx:v1           

複制

$ docker images souyunku/nginx:v1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
souyunku/nginx      v1                  4ac2d12f10cd        2 hours ago         108MB           

複制

私有倉庫

有時候使用

Docker Hub

這樣的公共倉庫可能不友善,使用者可以建立一個本地倉庫供私人使用。

本節介紹如何使用本地倉庫。

docker-registry

是官方提供的工具,可以用于建構私有的鏡像倉庫。本文内容基于

docker-registry v2.x

版本。

安裝運作

docker-registry

容器運作

你可以通過擷取官方

registry

鏡像來運作。

$ docker run -d -p 5000:5000 --restart=always --name registry registry           

複制

Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
ab7e51e37a18: Pull complete 
c8ad8919ce25: Pull complete 
5808405bc62f: Pull complete 
f6000d7b276c: Pull complete 
f792fdcd8ff6: Pull complete 
Digest: sha256:9d295999d330eba2552f9c78c9f59828af5c9a9c15a3fbd1351df03eaad04c6a
Status: Downloaded newer image for registry:latest
10e12c6983d054da8dc85c017b93e64be0ed11858c0d43b6198bdb652a270d9e
root@souyunku:~/mydocker# docker run -d \
>     -p 5000:5000 \
>     -v /opt/data/registry:/var/lib/registry \
>     registry
469f1bbf2a25f6038795014b0d4bce5035c4c937b86f968a0bff8acd28a78720
docker: Error response from daemon: driver failed programming external connectivity on endpoint flamboyant_yalow (734bddc352cd5804aeafe4c940267954a70109eabd557481e3572adc7cc29e9c): Bind for 0.0.0.0:5000 failed: port is already allocated.           

複制

這将使用官方的

registry

鏡像來啟動私有倉庫。預設情況下,倉庫會被建立在容器的

/var/lib/registry

目錄下。你可以通過

-v

參數來将鏡像檔案存放在本地的指定路徑。例如下面的例子将上傳的鏡像放到本地的

/opt/data/registry

目錄。

$ docker run -d \
    -p 5000:5000 \
    -v /opt/data/registry:/var/lib/registry \
    registry           

複制

私有倉庫操作

檢視本地鏡像

建立好私有倉庫之後,就可以使用

docker tag

來标記一個鏡像,然後推送它到倉庫。例如私有倉庫位址為

127.0.0.1:5000

先在本機檢視已有的鏡像。

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              3f8a4339aadd        5 days ago          108MB           

複制

标記本地鏡像

使用

docker tag

nginx:latest

這個鏡像标記為

127.0.0.1:5000/nginx:latest

格式為 docker tag IMAGE:TAGREGISTRY_HOST:REGISTRY_PORT/]REPOSITORY:TAG。

$ docker tag nginx:latest 127.0.0.1:5000/nginx:latest           

複制

上傳标記鏡像

使用

docker push

上傳标記的鏡像,到倉庫

$ docker push 127.0.0.1:5000/nginx:latest
The push refers to repository [127.0.0.1:5000/nginx]
a103d141fc98: Pushed 
73e2bd445514: Pushed 
2ec5c0a4cb57: Pushed 
latest: digest: sha256:926b086e1234b6ae9a11589c4cece66b267890d24d1da388c96dd8795b2ffcfb size: 948           

複制

$ docker image ls
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
127.0.0.1:5000/nginx   latest              3f8a4339aadd        5 days ago          108MB           

複制

用 curl 檢視倉庫中的鏡像。

$ curl 127.0.0.1:5000/v2/_catalog
{"repositories":["nginx"]}           

複制

這裡可以看到

{"repositories":["ubuntu"]}

,表明鏡像已經被成功上傳了。

下載下傳倉庫鏡像

先删除已有鏡像,再嘗試從私有倉庫中下載下傳這個鏡像。

$ docker image rm 127.0.0.1:5000/nginx:latest
Untagged: 127.0.0.1:5000/nginx:latest
Untagged: 127.0.0.1:5000/nginx@sha256:926b086e1234b6ae9a11589c4cece66b267890d24d1da388c96dd8795b2ffcfb           

複制

下載下傳鏡像

$ docker pull 127.0.0.1:5000/nginx:latest
latest: Pulling from nginx
Digest: sha256:926b086e1234b6ae9a11589c4cece66b267890d24d1da388c96dd8795b2ffcfb
Status: Downloaded newer image for 127.0.0.1:5000/nginx:latest           

複制

參考:Docker — 從入門到實踐

https://www.gitbook.com/download/pdf/book/yeasy/docker_practice

Contact

  • 作者:鵬磊
  • 出處:http://www.ymq.io/2017/12/31/Docker-dockerHub/
  • Email:[email protected]
  • 版權歸作者所有,轉載請注明出處
  • Wechat:關注公衆号,搜雲庫,專注于開發技術的研究與知識分享
Docker Hub 倉庫使用,及搭建 Docker RegistryDocker Hub私有倉庫Contact

關注公衆号-搜雲庫