Docker Swarm-如何将本地docker镜像从manager部署到所有worker节点

时间:2018-01-10 06:54:54

标签: docker docker-swarm swarm

我有3台linux机器,我将一台机器设为manager,另外两台设为worker1worker2。所以,假设我有docker图像,并且我在manager上测试了它,它运行正常。现在我想在所有节点上部署相同的内容。为此,我首先将图像推送到docker hub,然后当它在docker hub上可用时,我然后运行命令

sudo docker service create --name <name> --mode global <docker-name/image-name>

然后在所有工作节点上开始部署,一段时间后,工作人员正在运行已部署的docker镜像。现在我想知道是否可以在工作节点上部署映像而无需在docker hub上推送该映像。所以我在管理器节点上有一个本地可用的docker镜像,我只想在工作节点上部署Image。我怎样才能做到这一点。?

接下来我想知道,当我启动docker镜像时,我使用-v选项为我的mount目录提供路径。如何在部署过程中使用此-v选项?

1 个答案:

答案 0 :(得分:1)

  

现在我想知道是否可以在工作节点上部署映像而无需在docker hub上推送该映像。所以我在管理器节点上有一个本地可用的docker镜像,我只想在工作节点上部署Image。我怎样才能做到这一点。?

引自@BMitch:

  

管理员节点不会从自身共享本地图像。您需要启动注册表服务器。

#first create a user, updating $user for your environment:
if [ ! -d "auth" ]; then
  mkdir -p auth
fi
chmod 666 auth/htpasswd
docker run --rm -it \
  -v `pwd`/auth:/auth \
  --entrypoint htpasswd registry:2 -B /auth/htpasswd $user
chmod 444 auth/htpasswd

# then spin up the registry service listening on port 5000
docker run -d -p 5000:5000 --restart=always --name registry \
  -v `pwd`/auth/htpasswd:/auth/htpasswd:ro \
  -v `pwd`/registry:/var/lib/registry \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Local Registry" \
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
  -e "REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry" \
  registry:2

# then push your image
docker login localhost:5000
docker tag my-customized-image localhost:5000/my-customized-image
docker push localhost:5000/my-customized-image

# then spin up the service with the new image name
# replace registryhost with ip/hostname of your registry Docker host
docker service create --name custom --network my-network \
  --constraint node.labels.myconstraint==true --with-registry-auth \
  registryhost:5000/my-customized-image

我认为这与this

非常相似