首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker -将新内容上传到生产环境的最安全方式

Docker -将新内容上传到生产环境的最安全方式
EN

Stack Overflow用户
提问于 2020-08-26 17:01:45
回答 1查看 34关注 0票数 0

我是Docker的新手。每次我需要上传生产中的新内容时,我都会担心会出问题,所以我会尝试了解备份是如何工作的,以及如何备份我的卷,这在目前对我来说似乎相当复杂。

因此,每当我想要上传新内容时,我就有了创建新图像的想法。然后,我在机器中拉出此镜像,并堆叠rm/deploy容器,看看它是否正常工作-如果不能,我将拉出旧镜像。如果代码工作正常,我就可以删除我的旧图像。这是一种正确/安全的更新生产计算机的方法,还是我需要开始备份和恢复?我的意思是,我读了这个指南https://www.thegeekdiary.com/how-to-backup-and-restore-docker-containers/,但我不太明白如何恢复我的卷。

任何建议都会很好。谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-08-26 18:19:30

这是使用Docker的一种非常正常的方式。确保为每个构建提供一个不同的标记,比如日期戳或源代码管理ID。

代码语言:javascript
复制
# CONTAINER=...
# IMAGE=...
# OLD_TAG=...
# NEW_TAG=...

# Shell function to run `docker run`
start_the_container() {
  docker run ... --name "$CONTAINER" "$IMAGE:$1"
}

# Shut down the old container
docker stop "$CONTAINER"
docker rm "$CONTAINER"

# Launch the new container
start_the_container "$NEW_TAG"

# Did it work?
if check_if_container_started_successfully; then
  # Delete the old image
  docker rmi "$IMAGE:$OLD_TAG"
else
  # Roll back
  docker stop "$CONTAINER"
  docker rm "$CONTAINER"
  start_the_container "$OLD_TAG"
  docker rmi "$IMAGE:$NEW_TAG"
fi

这里惟一的docker run命令在start_the_container外壳函数中;如果您有环境变量或卷挂载设置,则可以将它们放在那里,旧卷将被重新附加到新容器。您确实需要备份卷内容,但这可以与此升级过程分开。除此之外,您不需要备份或恢复容器文件系统的内容。

如果您正在使用Kubernetes,那么在部署规范中更改image:会自动为您完成此操作。它将在停止旧容器之前实际启动新容器,因此您可以获得零停机时间升级;执行此操作的关键部分是能够识别正在运行的容器,并将它们连接到某种类型的负载均衡器,该均衡器可以路由入站请求。

这里需要注意的是,您不能对应用程序的关键部分使用Docker卷或绑定挂载。不要将卷用于应用程序代码、静态资源文件或库文件。否则,卷的生命周期将优先于镜像/容器的生命周期,您将最终运行旧代码,无法以这种方式更新内容。(它们对于推送配置文件、读出日志文件以及存储诸如数据库的底层数据之类的内容很有意义。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63594167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档