如何在 Ubuntu 22.04 上的 Docker 容器中运行 Nginx

介绍

Nginx 是一个开源 Web 服务器,用于服务静态或动态网站,反向代理,负载平衡和其他 HTTP 和代理服务器功能。

Docker是一个流行的开源容器化工具,用于为软件应用程序提供便携式和一致的运行时间环境,同时消耗的资源比传统的服务器或虚拟机少。

通过容器化 Nginx,你可以降低一些系统管理负担,例如,你不必通过包管理器来管理 Nginx 或从源头构建它。Docker 容器允许你在发布新的 Nginx 版本时更换整个容器。

在本教程中,您将学习如何通过配置 Nginx 与 Docker 容器来服务一个小小的网页。

前提条件

要遵循本教程,您将需要以下内容:

有了Docker安装在您的服务器上,您可以继续第一步。

步骤 1 – 从 Docker Hub 下载 Nginx

Docker 维护一个名为 Dockerhub的网站,这是一个公共存储库的 Docker 文件,包括官方和用户提交的图像。

您可以从预先构建的 Docker 图像下载 Nginx,使用默认的 Nginx 配置,运行以下命令:

1docker pull nginx

Docker 会缓存这些,所以当您运行容器时,您不需要每次下载容器图像。

现在你已经安装了 Nginx,你可以配置容器,以便它作为一个网页服务器公开访问。

1docker run --name docker-nginx -p 80:80 nginx

以下是该命令发生了什么的快速概述:

  • run 是创建新容器 的命令 * --name 旗帜是您如何指定容器的名称. 如果留空,将分配一个像 nostalgic_hopper 这样的生成的名称
  • -p 指示您在 -p local-machine-port:internal-container-port 格式中曝光的端口。在这种情况下,您正在将容器中的端口 :80 地图到服务器上的端口 :80

在 Web 浏览器中,输入您的服务器的 IP 地址,以揭示 Nginx 的默认定位页面:

Nginx default landing page

请注意,在您的终端中,当您向服务器提出请求时,正在更新 Nginx 的日志,这是因为您正在互动地运行您的容器。

在您的终端中,输入CTRL+C,以阻止容器运行。

由于您关闭了容器,您将无法再查看目的地页面. 您可以使用此命令验证容器状态:

1docker ps -a
1[secondary_label Output]
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
305012ab02ca1 nginx               "nginx -g 'daemon off"   57 seconds ago Exited (0) 47 seconds ago docker-nginx

输出显示 Docker 容器已离开。

使用此命令删除现有docker-nginx容器:

1docker rm docker-nginx

在下一步中,您将拆除容器,以便它独立运行。

步骤 2 – 在独立模式下运行

使用此命令创建一个新的、分离的 Nginx 容器:

1docker run --name docker-nginx -p 80:80 -d nginx

通过附上d旗帜,您正在在背景中运行此容器。

输出是容器的ID:

1[secondary_label Output]
2b91f3ce26553f3ffc8115d2a8a3ad2706142e73d56dc279095f673580986257

通过运行docker ps命令,您将遇到有关您的容器的一些新信息:

1docker ps
1[secondary_label Output]
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b91f3ce26553 nginx     "/docker-entrypoint.…"   56 seconds ago Up 54 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp docker-nginx

您现在在状态列中有约一分钟而不是X分钟前退出(Exited (0) X minutes ago),请注意,端口绘制也是输出的一部分。

请在浏览器中输入您的服务器的 IP 地址,以再次访问默认的 Nginx 定位页面. 此时它在背景中运行,因为您指定了 -d 旗帜,该旗帜告诉 Docker 以分离模式运行此容器。

您现在有一个运行的 Nginx 实例在一个独立的容器. 目前,容器没有访问任何您的网站文件。

停止容器,运行以下命令:

1docker stop docker-nginx

现在容器已停止,您可以通过运行以下命令来删除它:

1docker rm docker-nginx

现在你已经了解如何独立运行 Nginx,在下一步,你将创建和配置 Nginx 来构建一个定位页。

步骤 3 — 构建一个在 Nginx 上服务的网页

在此步骤中,您将为您的网站创建一个自定义页面. 此设置允许您在容器之外托管永久性网站内容。

在主目录中创建您的网站内容的新目录:

1mkdir -p ~/docker-nginx/html

通过运行这个命令导航它:

1cd ~/docker-nginx/html

在您的服务器上创建一个 HTML 文件. 下面的示例使用nano,但您可以使用您偏好的文本编辑器:

1nano index.html

添加以下 HTML 内容:

 1<html>
 2  <head>
 3    <title>Docker nginx Tutorial</title>
 4  </head>
 5
 6  <body>
 7    <div class="container">
 8      <h1>Hello DigitalOcean</h1>
 9      <p>This Nginx page is brought to you by Docker and DigitalOcean</p>
10    </div>
11  </body>
12</html>

如果您正在使用nano文本编辑器,请按CTRL+X,然后按Y,然后按ENTER来退出并保存此文件。

你现在有一个索引页面,取代了默认的Nginx定位页面。

步骤 4 – 将容器连接到本地文件系统

在此步骤中,您将 Nginx 链接到您的容器,以便通过端口:80 公开访问,并将其连接到服务器上的网站内容。

Docker 允许您将您的虚拟机的本地文件系统中的目录链接到您的容器. 因为您想要服务于新网页,您需要给您的容器进行渲染的文件。

您可以将文件复制到容器中作为Dockerfile的一部分,或者在事实发生后复制到容器中,但这两种方法都会让您的网站在容器内部处于静态状态。 使用Docker的数据量功能,您可以创建服务器的文件系统和容器的文件系统之间的符号链接。 这使您能够编辑现有网页文件并将新文件添加到目录中。 使用符号链接,您的容器将能够访问这些文件。 如果您想了解更多关于Docker和数据量的信息,请参阅 数据量文档

Nginx 容器默认设置为在 /usr/share/nginx/html 寻找索引页面。

要做到这一点,使用 -v 旗帜将 ~/docker-nginx/html 文件夹从您的服务器绘制到容器 /usr/share/nginx/html 中的相对路径,使用以下命令:

1docker run --name docker-nginx -p 80:80 -d -v ~/docker-nginx/html:/usr/share/nginx/html nginx

以下是命令的简短解释:

  • -v 标志表示您正在链接一个卷
  • 左边的 : 是您服务器上的目录位置, ~/docker-nginx/html.
  • 右边的 : 是您象征地链接到您的容器的位置 /usr/share/nginx/html.

运行该命令后,请在浏览器中输入您的服务器的 IP 地址,以查看您的新定位页面:

Your new default landing page beings served on the website

如果您对默认的 Nginx 设置感到满意,则没有其他东西可配置。

您可以将更多内容上传到 ~/docker-nginx/html/ 目录,并将添加到您的现场网站。

例如,如果你修改你的 HTML 文件,并更新你的浏览器,它将被相应地更新. 你也可以以这种方式从 HTML 文件中构建一个完整的网站. 例如,如果你添加了about.html页面,你可以访问它在http://your_server_ip/about.html,而无需与容器进行交互。

步骤 5 — 使用您自己的 Nginx 配置文件(可选)

如果您想对 Nginx 功能有更多的控制权,则可以使用自定义的 Nginx 配置文件与 Docker 容器一起使用。

首先,请确保您回到顶级项目目录:

1cd ~/docker-nginx

使用 Docker 复制命令将 Nginx config 目录复制到您的项目文件夹:

1docker cp docker-nginx:/etc/nginx/conf.d/default.conf default.conf

由于您将为 Nginx 使用自定义 .conf 文件,您将需要重新构建容器。

首先,停止容器:

1docker stop docker-nginx

然后删除它:

1docker rm docker-nginx

现在,您可以本地编辑默认的 Nginx 配置文件,以服务于一个新的目录,或者使用proxy_pass将流量转移到另一个应用程序或容器,就像您在正常的 Nginx 安装中一样。

一旦您保存了配置文件,是时候创建 Nginx 容器了. 添加一个 `-v' 旗帜与相应的路径,以便为新鲜的 Nginx 容器提供适当的链接,从自己的配置文件中运行。

1docker run --name docker-nginx -p 80:80 -v ~/docker-nginx/html:/usr/share/nginx/html -v ~/docker-nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx

此命令将自定义网站页链接到容器。

请注意,当您在启动容器后对配置文件进行任何更改时,您需要使用docker restart命令重新启动容器。

1docker restart docker-nginx

这将重新启动您的容器,您的更改应反映在相关的页面上。

结论

你现在有一个运行的 Nginx 容器,服务于一个自定义的网页,并且已经学会了如何从容器内部配置 Nginx。

如果您想了解更多有关集装箱的工作,您可以查看我们的 介绍集装箱教程。

此外,如果您想了解如何在两个 Docker 容器之间共享数据,请参阅我们的 如何在 Docker 容器之间共享数据教程。

Published At
Categories with 技术
comments powered by Disqus