前言
在实际的应用场景中,我们往往需要在同一台服务器上运行多个 Web 应用,但是不同的应用需要使用不同的端口,这就会带来一些不便,比如需要多次访问不同的地址,管理也不太方便。本文将介绍如何使用 Docker 在单个 IP 上运行多个 Web 应用,方便管理和使用。
Docker 简介
Docker 是一个轻量级的容器化引擎,它可以通过容器的方式来运行应用程序,并且可以在同一台服务器上运行多个应用程序。Docker 不仅提供了一个高效的容器运行环境,还能够帮助开发者更加快速地构建,打包和部署应用程序。
示例应用
在本文中,我们将使用两个简单的 Web 应用程序来演示在单个 IP 上运行多个 Web 应用的示例。这两个 Web 应用程序都是通过 Node.js 框架编写的,一个是一个简单的“Hello World”,另一个是一个简单的搜索引擎。
以下是示例应用程序的结构:
-- -------------------- ---- ------- --- ---- - --- ------ - --- ---------- - --- ------------ - --- --- --- ---- - --- ------ - --- ---------- - --- ------------ - --- --- --- ------------------
app1 是一个简单的“Hello World”应用程序,它只是返回一个字符串“Hello World!”。app2 是一个简单的搜索引擎,它可以在搜索框中输入关键字并搜索。我们将使用 Docker Compose 来编排和管理这些容器。
以下是两个示例应用程序的示例代码。
app1 的 app.js:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- -------- - ---------- ----- ---- - ---------------- -- ----- ----- ------ - ----------------------- ---- -- - -------------- - ---- ----------------------------- -------------- -------------- ----------- --- ------------------- --------- -- -- - ------------------- ------- -- ------------------------------ ---
app2 的 app.js:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- --- - --------------- ----- ----------- - ----------------------- ----- -------- - ---------- ----- ---- - ---------------- -- ----- ----- ------ - ----------------------- ---- -- - ----- --------- - ------------------- ----- ----- - ----------------------------------- --- ------------ - --- -- ------------------- --- ---------- - -- ------ ----- ---- ------------ - ------- ------- --- ------------ - -------------- - ---- ----------------------------- -------------- ---------------------- --- ------------------- --------- -- -- - ------------------- ------- -- ------------------------------ ---
使用 Docker Compose
Docker Compose 是 Docker 的一个工具,它可以用来定义和运行多个容器应用程序。使用 Docker Compose,我们可以轻松地定义和管理多个应用程序的容器。
以下是一个简单的示例 docker-compose.yml 文件:
-- -------------------- ---- ------- -------- --- --------- ----- ------ ----- ------ - ----------- ----- ------ ----- ------ - -----------
这个文件定义了两个服务,app1 和 app2,它们会分别构建和运行应用程序 app1 和 app2 的 Docker 容器,并映射端口 3000 和 3001 到主机上。
我们可以使用以下命令来启动应用程序:
docker-compose up
这将会构建和启动所有定义在 docker-compose.yml 文件中的服务。然后我们可以使用以下的 URL 来访问各自的应用程序:
http://localhost:3000 http://localhost:3001
镜像的构建和部署
使用 Docker Compose,我们可以轻松地管理多个应用程序容器的运行环境。接下来,我们将讨论如何构建和部署这些容器。
首先,我们需要创建应用程序的 Docker 镜像。我们需要为每个应用程序编写 Dockerfile,用于构建 Docker 镜像。以下是示例应用程序的 Dockerfile:
app1 的 Dockerfile:
-- -------------------- ---- ------- ---- -------------- ------- ---- ---- ------------- -- --- --- ------- ---- - - ------ ---- --- ------- --------
app2 的 Dockerfile:
-- -------------------- ---- ------- ---- -------------- ------- ---- ---- ------------- -- --- --- ------- ---- - - ------ ---- --- ------- --------
在这里,我们使用 Node.js 15 的 Alpine 基础镜像,并将示例应用程序的所有文件复制到容器中。然后我们使用 npm install 命令安装所有依赖项,最后暴露应用程序的端口号并使用 npm start 命令启动应用程序。
接下来,我们需要构建 Docker 镜像。我们可以使用以下命令来构建 Docker 镜像:
docker build -t myapp1 app1/ docker build -t myapp2 app2/
这将会构建两个 Docker 镜像并标记为 myapp1 和 myapp2。
最后,我们可以使用以下命令来运行容器:
docker run -d --name myapp1 -p 3000:3000 myapp1 docker run -d --name myapp2 -p 3001:3000 myapp2
这将会启动两个容器并映射端口 3000 和 3001 到主机上。
结论
本文介绍了如何使用 Docker 在单个 IP 上运行多个 Web 应用程序。我们可以使用 Docker Compose 管理多个应用程序的容器,也可以手动构建和部署这些容器。 Docker 不仅提供了一个高效的容器运行环境,还能够帮助开发者更加快速地构建,打包和部署应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674bb615d657e1f70dba727a