利用 Docker 在单个 IP 上运行多个 Web 应用

阅读时长 6 分钟读完

前言

在实际的应用场景中,我们往往需要在同一台服务器上运行多个 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.yml 文件中的服务。然后我们可以使用以下的 URL 来访问各自的应用程序:

镜像的构建和部署

使用 Docker Compose,我们可以轻松地管理多个应用程序容器的运行环境。接下来,我们将讨论如何构建和部署这些容器。

首先,我们需要创建应用程序的 Docker 镜像。我们需要为每个应用程序编写 Dockerfile,用于构建 Docker 镜像。以下是示例应用程序的 Dockerfile:

app1 的 Dockerfile:

-- -------------------- ---- -------
---- --------------

------- ----

---- ------------- --
--- --- -------

---- - -

------ ----

--- ------- --------

app2 的 Dockerfile:

-- -------------------- ---- -------
---- --------------

------- ----

---- ------------- --
--- --- -------

---- - -

------ ----

--- ------- --------

在这里,我们使用 Node.js 15 的 Alpine 基础镜像,并将示例应用程序的所有文件复制到容器中。然后我们使用 npm install 命令安装所有依赖项,最后暴露应用程序的端口号并使用 npm start 命令启动应用程序。

接下来,我们需要构建 Docker 镜像。我们可以使用以下命令来构建 Docker 镜像:

这将会构建两个 Docker 镜像并标记为 myapp1 和 myapp2。

最后,我们可以使用以下命令来运行容器:

这将会启动两个容器并映射端口 3000 和 3001 到主机上。

结论

本文介绍了如何使用 Docker 在单个 IP 上运行多个 Web 应用程序。我们可以使用 Docker Compose 管理多个应用程序的容器,也可以手动构建和部署这些容器。 Docker 不仅提供了一个高效的容器运行环境,还能够帮助开发者更加快速地构建,打包和部署应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674bb615d657e1f70dba727a

纠错
反馈