容器镜像服务 SWR-编写高效的Dockerfile:一个容器只运行一个进程
一个容器只运行一个进程
从技术角度讲,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