首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这些 Docker 的坑,踩一个就够你难受半天

这些 Docker 的坑,踩一个就够你难受半天

作者头像
小锟哥哥
发布2022-12-05 14:12:23
3460
发布2022-12-05 14:12:23
举报
文章被收录于专栏:GoLang全栈GoLang全栈

很多同学在一次使用 Docker 的时候,都会有一些思维上的误区,下面我列举一些,看你中了几条。

1、Docker容器就是一台虚拟机

我们来看下两者的实现框架图的对比:

虚拟机

Docker

比较两图的差异,左图虚拟机的 Guest OS 层和 Hypervisor 层在 Docker 中被 Docker Engine 层所替代。

虚拟机的 Guest OS 即为虚拟机安装的操作系统,它是一个完整操作系统内核;

虚拟机的 Hypervisor 层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。

虚拟机实现资源隔离的方法是利用独立的 OS,并利用 Hypervisor 虚拟化 CPU、内存、IO 设备等实现的。

Docker 就显得简练很多。Docker Engine 可以简单看成对 Linux 的 NameSpace、Cgroup、镜像管理文件系统操作的封装。

Docker 并没有和虚拟机一样利用一个完全独立的 Guest OS 实现环境隔离,它利用的是目前Linux内核本身支持的容器方式实现资源和环境隔离。

简单地说,Docker 利用 namespace 实现系统环境的隔离;利用 Cgroup 实现资源限制;利用镜像实现根目录环境的隔离。

以上内容来自网络,看不懂也不影响你使用 Docker,你只需要记住 Docker 和虚拟机从本质上是有区别的,你不能拿它当虚拟机或云服务器来玩

2、容器里面的文件会保存在本地

我们先来捋一下容器和镜像的定义:

1、镜像:指我们把资源打包好的一个文件,可用于启动容器,通过 docker images 命令查看

2、容器:可以理解是镜像的进行时,通过 docker ps 命令查看

我不知道大家去网吧上网有没有发现一个现象,网吧的电脑,只要重新开机一次,你关机前新建的文件就没了。

这就和我们的 Docker 原理非常相似,网管早就制作好的系统镜像,每次开机都以镜像为准清空我们的磁盘里面的数据,这样每次开机就都能得到一个全新的系统了。

Docker 也是一样的原理,每次你拿镜像启动容器的时候,也是基于镜像里面的文件开辟的一个新容器。

所以在容器运行时所产生的文件,在下次重启时就会被抹掉还原。

对于一些不允许被抹掉的数据,那你就要在启动时设置挂载,让他从容器里面挂载到本地,参考 docker -v 相关命令。

3、放在 Docker 里面跑的程序和传统程序没区别

要说完全没区别,那肯定不是,要说有区别,区别也不大。

最关键的地方就是上一条,你在开发时,需要考虑一些文件的落地,最好不要散落各地,而是集中落地在一起,方便后期运行挂载。

其他的倒是不需要注意太多,一般开发接触不到。

4、在一个容器里面启多个进程

这是严厉禁止的!!!!

最好的遵守一个容器一个进程的方式打包程序,不然后期你在管理进程、存取日志、升级时,那就一个酸爽。

5、使用容器的内部IP

这是一个非常不靠谱的做法,Docker 内部对网络有一套自己的管理逻辑,虽然每个容器都有一个内部 IP,但这个IP不是固定的。

我们启动容器或者停止容器的时候 IP 都可能会产生变化。

如果我们要让应用或者微服务模块在容器之间进行通信的话,正确的做法是通过设置环境变量来传递主机名和端口号。

最后,容器里面的 127.0.0.1 是访问不到宿主机的本地网络的,有多少同学踩过这个坑 [坏笑]。

就写这么多吧,想到了再补充!

你学废了么?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang全栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Docker容器就是一台虚拟机
  • 2、容器里面的文件会保存在本地
  • 3、放在 Docker 里面跑的程序和传统程序没区别
  • 4、在一个容器里面启多个进程
  • 5、使用容器的内部IP
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档