适用于两层应用程序的 Docker 架构





5.00/5 (5投票s)
本文将分享使用 Docker 容器创建双层应用程序的知识。
引言
由于 Docker 能够在所有虚拟机(Docker 语言中的容器)之间共享主操作系统资源,因此 Docker 在当今的 IT 行业中得到广泛使用。在本文中,我们将了解如何创建一个 Docker 容器,以及如何在简单的双层应用程序中使用 Docker 容器。
背景
什么是双层应用程序?
在常见的应用程序架构中,仅使用两个主要层。
- Web 层 - 托管前端应用程序代码的地方。前端应用程序可以通过互联网公开访问。
- 软件栈:Apache 和 PHP
- 数据库层 - 托管应用程序数据库引擎和数据库的地方。数据库只能从 Web 层访问。
- 软件栈:MySQL
注意:在 N 层架构中,有三层。 请参阅 CodeProject 的分层架构文章 了解更多详情。 在双层架构中,表示层和业务逻辑层合并到 Web 层。
为什么选择 Docker 而不是虚拟机?
在 IT 行业中,单独的虚拟机或容器用于单层。 在传统的虚拟化中,我们在 Hypervisor 上为每一层创建不同的虚拟机,而在 Docker Engine 中,我们创建不同的容器。 由于应用程序依赖的库、已安装的软件等许多原因,将虚拟机从一个地方移动到另一个地方是一项繁琐的任务,而在 Docker 中,这非常简单,因为 Docker 容器在完整的文件系统中创建软件包,其中包含所有应用程序特定文件和服务器相关文件。
Using the Code
1. 单服务器架构
在这种架构中,我们需要一个服务器,并在该服务器上创建两个 Docker 容器。 一个用于前端,另一个用于数据库容器。
以下命令将创建一个包含 PHP 和 Apache 的 Docker 容器。 这将覆盖服务器中的 Web 层。
//Syntax:
docker run -d -p 80:80 --name apache-php-name -v "$PWD":/var/www/html php:7.2-apache
其中 apache-php-name
是 Docker 容器名称,/var/www/html 是安装 Apache 的默认路径,80:80 将 Docker 容器的 80 端口指向虚拟机的 80 端口。
//Commands:
docker pull php:7.2-apache
docker run -d -p 80:80 --name apache-php-web-tier -v "$PWD":/var/www/html php:7.2-apache
在同一服务器上执行以下命令,以运行带有 MySQL 数据库的 Docker 容器。 这将覆盖同一服务器中的数据库层。
//Syntax:
docker run --name mysql-name -e MYSQL_ROOT_PASSWORD=mysql-password -d mysql:version-tag
其中 mysql-name
是 MySQL 容器名称,mysql-password
是为 MySQL 数据库 root 用户设置的密码。 version-tag
是指定 MySQL 版本的标签。 默认情况下,MySQL 将在
//Commands:
docker pull mysql
docker run --name mysql-db-tier -e MYSQL_ROOT_PASSWORD=Admin@Pass -d mysql
使用以下命令检查容器
docker ps
输出
要删除所有容器,请使用以下命令
docker stop $(docker ps -aq)
输出
2. 多服务器架构
在这种架构中,我们需要两个独立的服务器。 每个服务器都包含在单独的层中,如上图所示。 虚拟机 #2 正在运行数据库容器,并且该容器只能从虚拟机 #1 访问。 这是为了避免向全世界开放数据库服务器访问权限。
假设我们有两台虚拟机,VM#1 和 VM#2。
在 VM#1 上,运行以下命令来设置 PHP 和 Apache Docker 容器。
//Commands:
docker pull php:7.2-apache
docker run -d -p 80:80 --name apache-php-web-tier -v "$PWD":/var/www/html php:7.2-apache
在 VM#2 上,运行以下命令来设置 MySQL Docker 容器。
//Commands:
docker pull mysql docker run --name mysql-db-tier -e MYSQL_ROOT_PASSWORD=Admin@Pass -d mysql
关注点
当您将基础设施维护为代码时,创建 Docker 容器很容易。 当您创建代码/脚本来部署任何架构时,您可以重复使用它。