• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-08-18 16:34 Aet 隐藏边栏 |   抢沙发  11 
文章评分 1 次,平均分 5.0

docker

  1. Docker是一个平台,用于开发、运输和运行应用程序,它允许你将应用程序及其依赖项打包到所谓的“容器”中

镜像

  1. Docker 镜像是一个轻量级、独立、可执行的软件包,其中包括运行应用程序所需的所有内容:代码、运行时、库、环境变量和配置文件

容器

  1. 容器通过镜像创建
  2. 容器是由Docker引擎管理的轻量级、可移植、自足的运行时环境
  3. 每个容器都包括了运行应用程序所需的所有库、二进制文件和其他文件
  4. 容器与主机系统上的其他容器和主机自身隔离,但可以配置为与它们通信

原理

  1. Docker的工作原理是使用Linux内核技术(如cgroupsnamespaces)来隔离容器的进程,使它们看起来像是在自己独立的系统中运行
  2. docker Engine还负责管理容器的网络、存储和其他资源

对docker里面部署多个业务的理解

镜像和容器

  1. 每个容器都由一个镜像创建
  2. 当我们在docker部署了两个wordpress镜像时,实际上会得到2个容器
    1. 这两个容器可以由不同的镜像创建,也可以由同一个镜像创建,这取决于具体需求

多个网站

  1. 当需要部署多个站点时,可以使用一个容器
    1. 在一个容器中配置两个虚拟主机或服务器块来托管两个网站
    2. 但是如果一个网站出现问题,可能会影响到另一个网站
  2. 也可以使用多个容器
    1. 每个容器负责一个网站
    2. 通过使用反向代理(例如Nginx)来管理流量并将请求路由到适当的容器
    3. 容器之间完全隔离,使得管理、更新和扩展更简单

反向代理

  1. 当有多个应用或服务运行在不同的容器中,并希望通过一个统一的入口点访问它们时,反向代理可以根据请求的URL、主机头等将请求路由到相应的容器
  2. 反向代理可以用于分发流量到多个容器实例之间,提供负载均衡和可扩展性
    1. 这在高流量场景中尤为重要
  3. 反向代理可以用于管理和终止SSL/TLS连接,将加密的外部流量转换为内部的非加密流量
    1. 这简化了证书管理并允许在一个集中的地方执行加密
  4. 过配置反向代理进行内容缓存,可以减轻后端服务的负担并提高响应速度
  5. 反向代理可以提供额外的安全层
    1. 例如限制某些IP地址的访问
    2. 过滤恶意请求
    3. 或者与其他安全工具(例如Web应用防火墙)结合使用
  6. 反向代理可以方便地处理跨域请求和URL重写规则,从而灵活地组织和提供服务
  7. 在更复杂的环境中,例如跨多个主机、集群或混合云环境部署应用,反向代理可以简化流量路由和管理

详细的反向代理

  1. docker里面运行了两个网站容器,AB,还运行了另一个Nginx反向代理容器C
  2. 当客户端通过服务器主机的IP或者域名来访问或请求资源时,这个请求会先被Nginx反向代理接收
  3. 然后反向代理再通过相关规则来选择将请求转发给容器Aweb服务器或是容器Bweb服务器里
    1. 例如基于域名或URL路径等
  4. 容器A或容器Bweb服务器处理请求,并生成响应
  5. 响应被发送回Nginx反向代理容器C
  6. Nginx反向代理容器C将响应发送回客户端

数据库

  1. Docker环境中,你可以选择为两个网站使用两个独立的MySQL数据库容器,或者只使用一个MySQL容器,在其中创建两个不同的数据库
  2. 多个数据库容器:
    1. 这种方法为每个网站提供了完全隔离的数据库环境
    2. 这样可以确保一个网站的问题不会影响另一个网站的数据库,也更容易管理每个数据库的资源使用和性能
  3. 一个容器多个数据库:
    1. 这种方法更加节省资源,因为只需要运行一个MySQL进程
    2. 在一个MySQL实例中创建多个数据库,然后配置每个网站分别连接到不同的数据库

硬件资源相关

  1. Docker容器中运行的进程默认情况下可以访问主机上的所有可用CPU和内存资源
  2. 然而,Docker提供了一系列的资源限制和配额机制,允许你控制容器对主机资源的使用
    1. 可以使用--cpus--cpu-shares选项来限制容器使用的CPU资源
    2. 使用--memory--memory-swap选项,你可以限制容器的内存使用
    3. 使用--device-read-bps--device-write-bps等选项,你可以限制容器的磁盘读写速度
    4. 还可以通过一些第三方工具和插件限制容器的网络带宽

网络资源相关

  1. 在多个容器里运行网站业务,并使用反向代理容器的场景中:
  2. 每个网站业务容器中的Web服务器(例如ApacheNginx)通常会侦听某个特定的端口,比如80443
    1. 在这种情况下,你不需要将这些端口映射到主机的端口,只需确保反向代理容器可以访问它们
    2. 另外,可以使用Docker的自定义网络来实现容器之间的通信,每个网站业务容器可以有一个内部端口
  3. 反向代理容器(例如Nginx)负责处理所有进入的客户端请求
    1. 这个容器需要侦听主机的HTTPHTTPS端口(通常是80443),并根据请求(如域名、URL路径等)将其路由到适当的网站业务容器
    2. 因此,需要将反向代理容器的端口映射到主机的这些端口上
  4. 配置反向代理

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2026-02-15
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享