第一章 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币。
敬请期待!
评论前必须登录!
注册