docker
Docker
是一个平台,用于开发、运输和运行应用程序,它允许你将应用程序及其依赖项打包到所谓的“容器”中
镜像
Docker
镜像是一个轻量级、独立、可执行的软件包,其中包括运行应用程序所需的所有内容:代码、运行时、库、环境变量和配置文件
容器
- 容器通过镜像创建
- 容器是由
Docker
引擎管理的轻量级、可移植、自足的运行时环境 - 每个容器都包括了运行应用程序所需的所有库、二进制文件和其他文件
- 容器与主机系统上的其他容器和主机自身隔离,但可以配置为与它们通信
原理
Docker
的工作原理是使用Linux
内核技术(如cgroups
和namespaces
)来隔离容器的进程,使它们看起来像是在自己独立的系统中运行docker Engine
还负责管理容器的网络、存储和其他资源
对docker里面部署多个业务的理解
镜像和容器
- 每个容器都由一个镜像创建
- 当我们在docker部署了两个
wordpress
镜像时,实际上会得到2个容器- 这两个容器可以由不同的镜像创建,也可以由同一个镜像创建,这取决于具体需求
多个网站
- 当需要部署多个站点时,可以使用一个容器
- 在一个容器中配置两个虚拟主机或服务器块来托管两个网站
- 但是如果一个网站出现问题,可能会影响到另一个网站
- 也可以使用多个容器
- 每个容器负责一个网站
- 通过使用反向代理(例如
Nginx
)来管理流量并将请求路由到适当的容器 - 容器之间完全隔离,使得管理、更新和扩展更简单
反向代理
- 当有多个应用或服务运行在不同的容器中,并希望通过一个统一的入口点访问它们时,反向代理可以根据请求的URL、主机头等将请求路由到相应的容器
- 反向代理可以用于分发流量到多个容器实例之间,提供负载均衡和可扩展性
- 这在高流量场景中尤为重要
- 反向代理可以用于管理和终止SSL/TLS连接,将加密的外部流量转换为内部的非加密流量
- 这简化了证书管理并允许在一个集中的地方执行加密
- 过配置反向代理进行内容缓存,可以减轻后端服务的负担并提高响应速度
- 反向代理可以提供额外的安全层
- 例如限制某些IP地址的访问
- 过滤恶意请求
- 或者与其他安全工具(例如
Web
应用防火墙)结合使用
- 反向代理可以方便地处理跨域请求和URL重写规则,从而灵活地组织和提供服务
- 在更复杂的环境中,例如跨多个主机、集群或混合云环境部署应用,反向代理可以简化流量路由和管理
详细的反向代理
docker
里面运行了两个网站容器,A
和B
,还运行了另一个Nginx
反向代理容器C
- 当客户端通过服务器主机的
IP
或者域名来访问或请求资源时,这个请求会先被Nginx
反向代理接收 - 然后反向代理再通过相关规则来选择将请求转发给容器
A的
web服务器或是容器
B的
web`服务器里- 例如基于域名或URL路径等
- 容器
A
或容器B
的web
服务器处理请求,并生成响应 - 响应被发送回
Nginx
反向代理容器C
Nginx
反向代理容器C
将响应发送回客户端
数据库
- 在
Docker
环境中,你可以选择为两个网站使用两个独立的MySQL
数据库容器,或者只使用一个MySQL
容器,在其中创建两个不同的数据库 - 多个数据库容器:
- 这种方法为每个网站提供了完全隔离的数据库环境
- 这样可以确保一个网站的问题不会影响另一个网站的数据库,也更容易管理每个数据库的资源使用和性能
- 一个容器多个数据库:
- 这种方法更加节省资源,因为只需要运行一个
MySQL
进程 - 在一个
MySQL
实例中创建多个数据库,然后配置每个网站分别连接到不同的数据库
- 这种方法更加节省资源,因为只需要运行一个
硬件资源相关
- 在
Docker
容器中运行的进程默认情况下可以访问主机上的所有可用CPU
和内存资源 - 然而,
Docker
提供了一系列的资源限制和配额机制,允许你控制容器对主机资源的使用- 可以使用
--cpus
或--cpu-shares
选项来限制容器使用的CPU资源 - 使用
--memory
和--memory-swap
选项,你可以限制容器的内存使用 - 使用
--device-read-bps
和--device-write-bps
等选项,你可以限制容器的磁盘读写速度 - 还可以通过一些第三方工具和插件限制容器的网络带宽
- 可以使用
网络资源相关
- 在多个容器里运行网站业务,并使用反向代理容器的场景中:
- 每个网站业务容器中的
Web
服务器(例如Apache
或Nginx
)通常会侦听某个特定的端口,比如80
或443
- 在这种情况下,你不需要将这些端口映射到主机的端口,只需确保反向代理容器可以访问它们
- 另外,可以使用
Docker
的自定义网络来实现容器之间的通信,每个网站业务容器可以有一个内部端口
- 反向代理容器(例如
Nginx
)负责处理所有进入的客户端请求- 这个容器需要侦听主机的
HTTP
和HTTPS
端口(通常是80
和443
),并根据请求(如域名、URL
路径等)将其路由到适当的网站业务容器 - 因此,需要将反向代理容器的端口映射到主机的这些端口上
- 这个容器需要侦听主机的
- 配置反向代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
http { upstream website1_backend { server website1:80; # website1是容器名称,80是容器内的端口号 } upstream website2_backend { server website2:80; # website2是容器名称,80是容器内的端口号 } server { listen 80; # 侦听主机的80端口 location /website1/ { proxy_pass http://website1_backend; # 将请求代理到网站1的容器 } location /website2/ { proxy_pass http://website2_backend; # 将请求代理到网站2的容器 } } } |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Nginx目录结构10/02
- ♥ Visual Studio:内存泄露AddressSanitizer(跨平台)03/14
- ♥ Linux 线程概述&&创建03/31
- ♥ 【AcWing 语法基础课 第二讲】02/17
- ♥ 历史朝代概述06/11
- ♥ Windows 核心编程 _ 内核对象二06/07
热评文章
- * 暂无