Docker 1.12 Swarm Mode集群实战(过渡篇)之Registry和Image

过渡篇 RegistryImage

第一章  Docker 1.12 Swarm Mode集群实战(第一章) 中我们在单节点环境下运行docker币应用, 所以我们build出来的Docker币应用的image是保存在本机的。

推荐阅读:Docker 1.12 Swarm Mode集群实战(第二章)

现在我们要使用Swarm集群环境,docker币服务会分布在很多不同的服务器节点上, 难道每个节点都要build镜像, 或者要把image拷贝到别的节点上?

当然不用, 这个时候我们要用到本地镜像仓库docker private registry用于存取image。每个节点从registry拉取需要的image就可以了。

Note 当然还有别的方法, 可以使用docker Hub公用的镜像仓库, registry是一种开源的本地镜像仓库服务.

部署私有镜像仓库

创建registry服务, 发布5000端口.

# docker service create --name registry --publish 5000:5000 registry:2

镜像比较大, 可能要等很久才能拉取成功.

验证service部署成功后, 确定registry服务工作正常

# docker service ls

ID            NAME      REPLICAS  IMAGE       COMMAND

eqicwcgv877q  registry  1/1       registry:2

# curl localhost:5000/v2/_catalog

{"repositories":[]}

返回{“repositories”:[]} 说明registry服务工作正常.

Note 注意我们只启动了一个registry副本容器, 根据docker swarm集群的端口发布服务特性, swarm集群所有节点都会自动发布本机的5000端口。
对应到registry, 不管你在哪个节点上执行curl localhost:5000/v2/_catalog, 都是可以访问到registry服务的.所以你不用关心这个registry跑在那个节点上,很好很强大~

测试本地镜像仓库

有了本地registry, 现在我们推送一个测试镜像到本机镜像仓库, 测试下registry服务是否可用.

# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

dockercoins_webui    latest              c2d09bb0c442        47 hours ago        212.2 MB

dockercoins_rng      latest              ff1d886f2fa3        47 hours ago        83.53 MB

dockercoins_hasher   latest              9d361dbaf589        47 hours ago        310.6 MB

dockercoins_worker   latest              bef5d2dc4bd0        47 hours ago        80.5 MB

alpine               latest              4e38e38c8ce0        5 weeks ago         4.795 MB

redis                latest              4465e4bcad80        6 weeks ago         185.7 MB

查看下我们现有的镜像, 选取一个例如alpine。

如果想把alpine镜像推送到本地registry,需要先tag这个镜像的名字成<registry>/<image name>:<tag>

# docker tag alpine localhost:5000/busybox

# docker images

REPOSITORY                  TAG          IMAGE ID     CREATED       SIZE

...

alpine                              latest      4e38e38c8ce0   5 weeks ago         4.795 MB

localhost:5000/busybox   latest    4e38e38c8ce0    5 weeks ago         4.795 MB

...

下面就可以使用docker push <image name>推送image了.

# docker push localhost:5000/busybox

The push refers to a repository [localhost:5000/busybox]

4fe15f8d0ae6: Pushed

latest: digest: sha256:dc89ce8401da81f24f7ba3f0ab2914ed9013608bdba0b7e7e5d964817067dc06 size: 528

push成功后, 可以调用registry API查看registry中的镜像

# curl localhost:5000/v2/_catalog

{"repositories":["busybox"]}

可以看到busybox镜像, 已经在我们的本地镜像库中了。

推送docker币镜像到本地镜像库

绕了一大圈, 终于回到我们的docker币应用了, 让我们来挖更多的docker币吧. 忘记docker币应用的同学请参见本系列的第一章Docker 1.12 Swarm Mode集群实战(第一章).

现在我们要做的是, 把build完成的docker币的镜像推送到本地registry中, 这样我们用swram集群在多个节点部署应用的时候就不需要再次build,直接从本地镜像库中拉取镜像即可.

具体步骤:

  • build docker币镜像(在第一章我们已经在node01上build过了, 你也可以直接使用这些镜像.)
  • retag镜像名字为localhost:5000/<service name>:<tag>名字
  • push镜像到我们的本地镜像库

我们的docker币应用一共需要5个service(hasher, rng, webui, worker, redis), redis可以不用build直接从官方拉取的就行。

# docker images REPOSITORY               TAG                 IMAGE ID            CREATED             SIZEdockercoins_webui        latest         
c2d09bb0c442        47 hours ago        212.2 MBdockercoins_rng          latest              ff1d886f2fa3        47 hours ago        83.53 
MBdockercoins_hasher       latest              9d361dbaf589        47 hours ago        310.6 MBdockercoins_worker       latest   
 bef5d2dc4bd0        2 days ago          80.5 MB

上面是第一章我们build好的.

下面我们会以hasher为例演示下push的过程.

# 切换到我们应用的docker-compose file目录

# cd orchestration-workshop/dockercoins/

# build hasher应用的镜像

# docker-compose build hasher

# retag镜像名

# docker tag dockercoins_hasher localhost:5000/dockercoins_hasher:v0.1

# 推送镜像

# docker push localhost:5000/dockercoins_hasher

# 验证推送结果

# curl localhost:5000/v2/_catalog

{"repositories":["busybox","dockercoins_hasher"]}

hasher推送完了, 你可以使用相同的步骤完成rng, webui, worker的推送.

简单起见, 你可以使用下面的一段命令, 完成整个过程, 直接贴到命令窗口执行就可以了.

DOCKER_REGISTRY=localhost:5000

TAG=v0.1

for SERVICE in hasher rng webui worker; do

docker-compose build $SERVICE

docker tag dockercoins_$SERVICE $DOCKER_REGISTRY/dockercoins_$SERVICE:$TAG

docker push $DOCKER_REGISTRY/dockercoins_$SERVICE

done

验证你的镜像库中内容:

# curl localhost:5000/v2/_catalog

{"repositories":["busybox","dockercoins_hasher","dockercoins_rng","dockercoins_webui","dockercoins_worker"]}

至此Swarm环境中Docker币应用的image已全部准备完毕,接下来我们会演示如何在Swarm集群环境中多节点快速部署Docker币应用,造出更多的Docker币。

敬请期待!

K8S中文社区微信公众号
分享到:更多 ()

评论 抢沙发

评论前必须登录!