目前 Docker
官方維護(hù)了一個(gè)公共倉(cāng)庫(kù) Docker Hub砌梆,其中已經(jīng)包括了數(shù)量超過(guò) 15,000
的鏡像濒憋。大部分需求都可以通過(guò)在 Docker Hub
中直接下載鏡像來(lái)實(shí)現(xiàn)幌墓。
Docker Hub
注冊(cè)&&登錄
你可以在 https://cloud.docker.com 免費(fèi)注冊(cè)一個(gè) Docker
賬號(hào)但壮。
可以通過(guò)執(zhí)行 docker login
命令交互式的輸入用戶(hù)名及密碼來(lái)完成在命令行界面登錄 Docker Hub
。
你可以通過(guò) 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
拉取鏡像
你可以通過(guò) docker search
命令來(lái)查找官方倉(cāng)庫(kù)中的鏡像蜡饵,并利用 docker pull
命令來(lái)將它下載到本地。
例如以 nginx
為關(guān)鍵詞進(jìn)行搜索:
$ 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
可以看到返回了很多包含關(guān)鍵字的鏡像胳施,其中包括鏡像名字溯祸、描述、收藏?cái)?shù)(表示該鏡像的受關(guān)注程度)、是否官方創(chuàng)建焦辅、是否自動(dòng)創(chuàng)建博杖。
官方的鏡像說(shuō)明是官方項(xiàng)目組創(chuàng)建和維護(hù)的,automated
資源允許用戶(hù)驗(yàn)證鏡像的來(lái)源和內(nèi)容筷登。
根據(jù)是否是官方提供剃根,可將鏡像資源分為兩類(lèi)。
一種是類(lèi)似 centos
這樣的鏡像前方,被稱(chēng)為基礎(chǔ)鏡像或根鏡像狈醉。這些基礎(chǔ)鏡像由 Docker
公司創(chuàng)建、驗(yàn)證惠险、支持苗傅、提供。這樣的鏡像往往使用單個(gè)單詞作為名字莺匠。
還有一種類(lèi)型金吗,比如 jwilder/nginx-proxy
鏡像十兢,它是由 Docker
的用戶(hù)創(chuàng)建并維護(hù)的趣竣,往往帶有用戶(hù)名稱(chēng)前綴『滴铮可以通過(guò)前綴 username/
來(lái)指定使用某個(gè)用戶(hù)提供的鏡像遥缕,比如 jwilder
用戶(hù)。
另外宵呛,在查找的時(shí)候通過(guò) --filter=stars=N
參數(shù)可以指定僅顯示收藏?cái)?shù)量為 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#
推送鏡像
我們先制作一個(gè)鏡像
先制作一個(gè)鏡像
創(chuàng)建Dockerfile
文件
$ touch Dockerfile
Dockerfile
內(nèi)容如下
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
推送制作的鏡像
用戶(hù)也可以在登錄后通過(guò) docker push
命令來(lái)將自己的鏡像推送到 Docker Hub宝穗。
以下命令中的 souyunku
請(qǐng)?zhí)鎿Q為你的 Docker
賬號(hào)用戶(hù)名户秤。
標(biāo)記本地鏡像,將其歸入souyunku
倉(cāng)庫(kù)
$ 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
私有倉(cāng)庫(kù)
有時(shí)候使用 Docker Hub
這樣的公共倉(cāng)庫(kù)可能不方便逮矛,用戶(hù)可以創(chuàng)建一個(gè)本地倉(cāng)庫(kù)供私人使用鸡号。
本節(jié)介紹如何使用本地倉(cāng)庫(kù)。
docker-registry
是官方提供的工具须鼎,可以用于構(gòu)建私有的鏡像倉(cāng)庫(kù)鲸伴。本文內(nèi)容基于 docker-registry v2.x
版本。
安裝運(yùn)行 docker-registry
容器運(yùn)行
你可以通過(guò)獲取官方 registry
鏡像來(lái)運(yùn)行晋控。
$ 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
鏡像來(lái)啟動(dòng)私有倉(cāng)庫(kù)汞窗。默認(rèn)情況下,倉(cāng)庫(kù)會(huì)被創(chuàng)建在容器的 /var/lib/registry
目錄下赡译。你可以通過(guò) -v
參數(shù)來(lái)將鏡像文件存放在本地的指定路徑仲吏。例如下面的例子將上傳的鏡像放到本地的 /opt/data/registry
目錄。
$ docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry
私有倉(cāng)庫(kù)操作
查看本地鏡像
創(chuàng)建好私有倉(cāng)庫(kù)之后,就可以使用 docker tag
來(lái)標(biāo)記一個(gè)鏡像蜘矢,然后推送它到倉(cāng)庫(kù)狂男。例如私有倉(cāng)庫(kù)地址為 127.0.0.1:5000
。
先在本機(jī)查看已有的鏡像品腹。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 3f8a4339aadd 5 days ago 108MB
標(biāo)記本地鏡像
使用 docker tag
將 nginx:latest
這個(gè)鏡像標(biāo)記為 127.0.0.1:5000/nginx:latest
岖食。
格式為 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]。
$ docker tag nginx:latest 127.0.0.1:5000/nginx:latest
上傳標(biāo)記鏡像
使用 docker push
上傳標(biāo)記的鏡像,到倉(cāng)庫(kù)
$ 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 查看倉(cāng)庫(kù)中的鏡像舞吭。
$ curl 127.0.0.1:5000/v2/_catalog
{"repositories":["nginx"]}
這里可以看到 {"repositories":["ubuntu"]}
泡垃,表明鏡像已經(jīng)被成功上傳了。
下載倉(cāng)庫(kù)鏡像
先刪除已有鏡像羡鸥,再?lài)L試從私有倉(cāng)庫(kù)中下載這個(gè)鏡像蔑穴。
$ 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 — 從入門(mén)到實(shí)踐
https://www.gitbook.com/download/pdf/book/yeasy/docker_practice
Contact
- 作者:鵬磊
- 出處:http://www.ymq.io
- Email:admin@souyunku.com
- 版權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明出處