我们的应用程序使用Docker Swarm作为编排器,并进行容器化。我想了解如何将Docker镜像从Dev、QA、UAT推广到生产环境。例如,如果我在Dev中创建了一个名为test:10的镜像(10是由Jenkins生成的构建编号),我该如何将相同的镜像推广到QA、UAT和生产环境?我们目前使用NEXUS作为Docker仓库。我的问题是如何拉取与Dev环境中使用的完全相同的镜像。有人能帮忙吗?
我们的应用程序使用Docker Swarm作为编排器,并进行容器化。我想了解如何将Docker镜像从Dev、QA、UAT推广到生产环境。例如,如果我在Dev中创建了一个名为test:10的镜像(10是由Jenkins生成的构建编号),我该如何将相同的镜像推广到QA、UAT和生产环境?我们目前使用NEXUS作为Docker仓库。我的问题是如何拉取与Dev环境中使用的完全相同的镜像。有人能帮忙吗?
docker build -t my-test .
docker tag my-test your-image-repository-dev/test:10
docker login "your-image-repository-url"
docker push your-image-repository-dev/test:10
# ... deploy/test your image in dev
docker pull your-image-repository-dev/test:10
docker tag your-image-repository-dev/test:10 \
your-image-repository-qa/test:10
docker push your-image-repository-qa/test:10
docker build -t my-test .
docker tag my-test your-image-repository/test:10
docker login "your-image-repository-url"
docker push your-image-repository/test:10
# ... deploy/test your image in dev
docker pull your-image-repository/test:10
docker tag your-image-repository/test:10 \
your-image-repository/test-qa:10
docker push your-image-repository/test-qa:10
在semver中需要注意的主要事项是版本中使用了-
标记,这表示某些内容是“预发布”版本。
有了这个想法,很容易区分生产和非生产图像:
nginx:1.2.3
nginx:1.2.3-10
从那里开始,如果需要,您可以通过使用“点分隔的预发布标识符”进一步分解非生产版本
nginx:1.2.3-dev.10
nginx:1.2.3-qa.10
nginx:1.2.3-uat.10
还有其他标记方法可供使用,但SemVer有良好的文档记录,广泛应用,并且解决了问题。
Day 1:
| TAG | IMAGE ID |
| test:10 | 00000000 |
| test:dev-latest | 00000001 |
| test:qa-latest | 00000001 |
| test:prod-latest| 00000001 |
Day 2:
| TAG | IMAGE ID |
| test:10 | 00000000 |
| test:11 | 00000001 |
| test:dev-latest | 00000001 |
| test:qa-latest | 00000001 |
| test:prod-latest| 00000001 |
你的编排器可以一直等待新的镜像被标记。从理论上讲,这种方法是有用的。然而,根据你的容器编排器具体的特性,你可以稍微调整这种方法来使用那些特定的功能。例如,镜像拉取策略、推出和回滚功能、实现蓝/绿策略的功能等。
docker pull org/test:10
无法工作吗?镜像在构建后是不可变的,所以应该很简单。 - meatspace