Docker容器应用中,10个要不得的坏习惯

 更新时间:2020年08月14日 15:14:01   作者:xcbeyond  
这篇文章主要介绍了Docker容器的应用中,10个要不得的坏习惯,帮助大家更好的理解和使用docker,感兴趣的朋友可以了解下

毋庸置疑,容器已经成为企业IT基础设施中必不可少的部分,它具有许多的优点,比如:

  • 第一:容器是不可变的——操作系统,库版本,配置,文件夹和应用程序都包装在容器内。你保证在质量检查中测试过的同一镜像将以相同的行为到达生产环境。
  • 第二:容器很轻——容器的内存占用量很小。容器将只为主要进程分配内存,而不是数百或数千MB。
  • 第三:容器非常快——可以像启动典型Linux进程一样快地启动容器。你可以在几秒钟内启动一个新容器,而不是几分钟。

但是,许多用户仍然像对待典型虚拟机一样对待容器,而忘记了容器具有重要的特征:即容器是一次性的。

这种特征迫使用户改变他们对如何处理和管理容器的看法。那么该如何保持容器的最佳效益呢?以下将介绍Docker容器中应避免的10件事。

1、不要将数据存储在容器中

因为你可以停止,销毁或更换容器。在容器中运行的应用程序版本1.0应该容易地由版本1.1替换,而不会造成任何影响或数据丢失。因此,如果需要存储数据,请批量存储。在这种情况下,还应该注意两个容器是否在同一卷上写入数据,因为这可能会导致损坏。确保你的应用程序是为了写入共享数据存储。

2、不要将应用程序分为两部分进行交付

有些人看到像虚拟机这样的容器,大多数人倾向于认为他们应该将应用程序部署到现有的运行容器中。在开发阶段,你需要不断进行部署和调试,这是正确的。但对于一个连续传递(CD)管道QA和Production,你的应用程序应该是镜像的一部分。

3、不要创建大镜像

因为大镜像将很难分发。确保仅具有运行应用程序/进程所需的文件和库。不要安装不必要的软件包或运行将许多文件下载到新镜像层的“更新” 。

4、不要使用单层镜像

为了有效利用分层文件系统,请始终为操作系统创建自己的基础镜像层,为用户名定义创建另一层,为运行时安装创建另一层,为配置创建另一层,最后是应用程序的另一层。重新创建,管理和分发镜像将更加容易。

5、不要从正在运行的容器中创建镜像

换句话说,不要使用“ docker commit”来创建镜像。这种创建镜像的方法不可复制,应完全避免。始终使用完全可复制的Dockerfile或任何其他S2I(从源到镜像)方法,如果将Dockerfile存储在源代码控制存储库(git)中,则可以跟踪对Dockerfile的更改。

6、不要只使用“最新”标签

对于Maven用户,最新标签就像“ SNAPSHOT”一样。由于容器的分层文件系统性质,因此鼓励使用标签。几个月后生成镜像并发现你的应用程序无法运行是因为父层(Dockerfile中的FROM)被不兼容向后的新版本或错误的新版本所取代,你不会感到惊讶从构建缓存中检索了“最新”版本。在生产环境中部署容器时,也应避免使用“最新”标签,因为你无法跟踪正在运行哪个版本的镜像。

7、不要在单个容器中运行多个进程。

容器非常适合运行单个进程(http守护程序,应用程序服务器,数据库),但是如果有多个进程,则管理起来可能会遇到更多麻烦,检索日志,并分别更新流程。

8、不要将凭据存储在镜像中。

使用环境变量,你不想对镜像中的任何用户名/密码进行硬编码。使用环境变量从容器外部检索该信息。这个原理的一个很好的例子是Postgres镜像。

9、不要以root用户身份运行进程

“默认情况下,docker容器以root用户身份运行。随着docker的成熟,可能会提供更多安全的默认选项。目前,要求root用户对其他人是危险的,可能并非在所有环境中都可用。你的镜像应使用USER指令为运行容器指定一个非root用户。

10、不要依赖IP地址

每个容器都有自己的内部IP地址,如果你启动和停止容器,它可能会更改。如果应用程序或微服务需要与另一个容器通信,请使用环境变量将正确的主机名和端口从一个容器传递到另一个容器。

以上就是Docker容器的应用中,10个要不得的坏习惯的详细内容,更多关于Docker容器应用的资料请关注脚本之家其它相关文章!

相关文章

  • Docker自定义JDK镜像并拉取至阿里云镜像仓库超详细攻略

    Docker自定义JDK镜像并拉取至阿里云镜像仓库超详细攻略

    Docker仓库是集中存放镜像的地方,分为公共仓库和私有仓库,这篇文章主要给大家介绍了关于Docker自定义JDK镜像并拉取至阿里云镜像仓库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • 使用Docker时内存占用过高的解决方案

    使用Docker时内存占用过高的解决方案

    在使用 Docker 进行容器化部署时,内存占用过高是一个常见问题,当服务器内存被耗尽时,会导致系统性能下降,甚至可能导致服务宕机,本文将介绍如何排查和解决 Docker 环境下的内存占用问题,需要的朋友可以参考下
    2024-12-12
  • 如何解决docker-compose网段路由冲突,docker-compose自定义网络

    如何解决docker-compose网段路由冲突,docker-compose自定义网络

    这篇文章主要介绍了如何解决docker-compose网段路由冲突,docker-compose自定义网络问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Docker为网络bridge模式指定容器ip的方法

    Docker为网络bridge模式指定容器ip的方法

    Docker在创建容器时有四种网络模式,bridge为默认不需要用--net去指定,其他三种模式需要在创建容器时使用--net去指定。那Docker为网络bridge模式指定容器ip该如何实现呢?下面通过通过这篇文章一起看看吧,文中给出了详细的示例代码,有需要的可以参考借鉴。
    2016-11-11
  • 解析docker妙用SpringBoot构建微服务实战记录

    解析docker妙用SpringBoot构建微服务实战记录

    Spring Boot 是 Spring 开源组织的子项目,是 Spring 组件一站式解决方案,本文通过详细案例给大家解析docker妙用SpringBoot构建微服务实战记录,感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • Docker容器跨主机通信overlay网络的解决方案

    Docker容器跨主机通信overlay网络的解决方案

    Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式,本文给大家介绍Docker容器跨主机通信overlay网络的方案,感兴趣的朋友一起看看吧
    2022-02-02
  • docker数据卷容器挂载不上的解决方法

    docker数据卷容器挂载不上的解决方法

    docker容器之间可以通过相互挂载实现数据共享,本文主要介绍了docker数据卷容器挂载不上的解决方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 如何使用Docker Desktop进行本地打包和推送

    如何使用Docker Desktop进行本地打包和推送

    本文给大家介绍如何使用Docker Desktop进行本地打包和推送,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • 修改已有docker容器中的内容方法

    修改已有docker容器中的内容方法

    这篇文章主要介绍了修改已有docker容器中的内容方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Idea+docker通过dockerFile往华为云发布项目实践

    Idea+docker通过dockerFile往华为云发布项目实践

    本文介绍了使用IntelliJ IDEA和Docker将Spring Boot项目部署到华为云上,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01

最新评论