容器镜像服务 SWR-编写高效的Dockerfile:一个容器只运行一个进程

时间:2024-06-28 17:20:35

一个容器只运行一个进程

从技术角度讲,Docker容器中可以运行多个进程,您可以将数据库、前端、后端、ssh等都运行在同一个Docker容器中。但是,这样跟未使用容器前没有太大区别,且这样容器的构建时间非常长(一处修改就要构建全部),镜像体积大,横向扩展时非常浪费资源(不同的应用需要运行的容器数并不相同)。

通常所说的容器化改造是对应用整体微服务进行架构改造,改造后,再容器化。这样做可以带来如下好处:

  • 单独扩展:拆分为微服务后,可单独增加或缩减每个微服务的实例数量。
  • 提升开发速度:各微服务之间解耦,某个微服务的代码开发不影响其他微服务。
  • 通过隔离确保安全:整体应用中,若存在安全漏洞,一旦被攻击,所有功能的权限都可能会被窃取。微服务架构中,若攻击了某个服务,只可获得该服务的访问权限,无法入侵其他服务。
  • 提升稳定性:如果其中一个微服务崩溃,其他微服务还可以持续正常运行。

因此,上述企业门户网站可以进行如下改造,Web应用和MySQL运行在不同容器中。

MySQL运行在独立的镜像中,这样的好处就是,可以对它们分别进行修改,且不会牵一发而动全身。如下面这个例子所示,可以删除MySQL,只安装node.js。

FROM ubuntu

ADD . /app

RUN apt-get update  
RUN apt-get upgrade -y

RUN apt-get install -y nodejs 
RUN cd /app && npm install

CMD npm start
support.huaweicloud.com/bestpractice-swr/swr_bestpractice_0002.html