如何在Ubuntu 22.04上以Docker容器的方式运行Nginx

开头

Nginx是一个用于提供静态或动态网站、反向代理、负载均衡和其他HTTP和代理服务器功能的开源Web服务器。它被设计用来处理大量并发连接,并且是一个非常流行的Web服务器,用于托管互联网上一些最大和最高流量的网站。

Docker是一种受欢迎的开源容器化工具,用于为软件应用程序提供可移植和一致的运行环境,同时消耗比传统服务器或虚拟机更少的资源。Docker使用容器,这些是运行在操作系统级别的隔离用户空间环境,并共享内核和文件系统等系统资源。

通过将Nginx放入容器中,可以减少一些系统管理的工作量。例如,您不需要通过软件包管理器或从源代码构建来管理Nginx。Docker容器允许您在发布新版本的Nginx时替换整个容器。这样,您只需要维护Nginx的配置文件和内容即可。

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

先决条件

要按照本教程操作,你需要以下物品:

  • One Ubuntu 22.04 server set up by following the Ubuntu 22.04 initial server setup guide, including a sudo non-root user and a firewall.
  • Docker installed on your server. Complete Steps 1 and 2 of our How To Install and Use Docker on Ubuntu 22.04 tutorial.

在您的服务器上安装了Docker后,您可以继续进行第一步操作。

步骤1 — 从Docker Hub下载Nginx

Docker 维护了一个名为Dockerhub的网站,它是一个包含官方和用户提交的Docker文件的公共仓库。通过使用Docker的官方镜像,您可以快速开发应用程序,无需自己构建镜像。这些镜像由Docker社区维护,并经常为最常见的使用情况进行设计。

您可以通过运行以下命令,从预构建的Docker镜像上下载带有默认Nginx配置的Nginx。

  1. docker pull nginx

 

这将下载容器所需的所有组件。Docker会将这些组件存储在缓存中,因此当您运行容器时,无需每次都下载容器镜像。

既然您安装了Nginx,您可以配置容器,使其作为Web服务器对外部可访问。要启动Nginx Docker容器,请运行以下命令:

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

 

以下是关于该命令正在发生的事情的简要概述:

  • run is the command to create a new container
  • The –name flag is how you specify the name of the container. If left blank, a generated name like nostalgic_hopper will be assigned.
  • -p specifies the port you are exposing in the format of -p local-machine-port:internal-container-port. In this case, you are mapping port :80 in the container to port :80 on the server.
  • nginx is the name of the image on Docker Hub.

在网络浏览器中,输入您的服务器的IP地址,以显示Nginx的默认页面。

Nginx default landing page

请注意,在您的终端中,当您向服务器发送请求时,Nginx 的日志会被更新。这是因为您正在交互式地运行容器。

在您的终端上,输入CTRL+C来停止容器的运行。

因为您关闭了容器,所以您无法再查看到着陆页面。您可以使用以下命令验证容器的状态:

  1. docker ps -a

 

Output

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 05012ab02ca1 nginx “nginx -g ‘daemon off” 57 seconds ago Exited (0) 47 seconds ago docker-nginx

输出显示Docker容器已退出。

使用以下命令移除现有的Docker-Nginx容器:

  1. docker rm docker-nginx

 

在接下来的步骤中,您将解除容器以允许其独立运行。

步骤2 — 运行在分离模式下。

使用以下命令创建一个新的、独立的Nginx容器:

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

 

通过添加-d标志,您将在后台运行此容器。

输出是容器的ID。

Output

b91f3ce26553f3ffc8115d2a8a3ad2706142e73d56dc279095f673580986257

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

  1. docker ps

 

Output

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b91f3ce26553 nginx “/docker-entrypoint.…” 56 seconds ago Up 54 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp docker-nginx

在状态列中,你现在显示的是大约一分钟已启动,而不是 X 分钟之前已退出 (0) ,同时要注意端口映射也是输出的一部分。

在浏览器中输入服务器的IP地址,可以再次访问默认的Nginx首页。这一次它在后台运行,因为你指定了-d标志,告诉Docker以分离模式运行该容器。

你现在在一个分离的容器中运行着一个 Nginx 实例。目前,该容器无法访问你的任何网站文件。

运行以下命令停止容器。

  1. docker stop docker-nginx

 

现在容器已停止,你可以通过运行以下命令将其移除:

  1. docker rm docker-nginx

 

现在你已经了解了如何使 Nginx 独立于容器运行,在下一步中,你将创建并配置 Nginx,以构建一个登陆页面。

第三步 – 构建一个在Nginx上提供的网页

在这一步中,您将为您的网站创建一个自定义页面。这个设置允许您拥有托管在容器外的持续的网站内容。

在主目录中创建一个新的目录,用于您的网站内容。

  1. mkdir -p ~/docker-nginx/html

 

运行这个命令,进入其中。

  1. cd ~/docker-nginx/html

 

创建一个HTML文件并放置在你的服务器上。下面的示例使用nano,但你可以使用你喜欢的文本编辑器:

  1. nano index.html

 

在HTML中插入以下内容:

<html>
  <head>
    <title>Docker nginx Tutorial</title>
  </head>

  <body>
    <div class="container">
      <h1>Hello DigitalOcean</h1>
      <p>This Nginx page is brought to you by Docker and DigitalOcean</p>
    </div>
  </body>
</html>

如果您正在使用nano文本编辑器,按下CTRL+X,然后按下Y,最后按下回车键退出并保存此文件。

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

第四步 – 将容器链接到本地文件系统

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

Docker允许你将虚拟机本地文件系统中的目录链接到容器。由于你想提供新的网页,你需要给容器提供渲染所需的文件。

你可以通过Dockerfile将文件复制到容器中,也可以在事后将它们复制到容器中,但这两种方法都会使得你的网站在容器内部处于静态状态。通过使用Docker的数据卷功能,你可以在服务器文件系统和容器文件系统之间创建一个符号链接。这样可以让你编辑现有的网页文件并在目录中添加新文件。有了符号链接,你的容器将能够访问这些文件。如果你想了解更多关于Docker和数据卷的信息,请查阅数据卷文档。

默认情况下,Nginx容器会在/usr/share/nginx/html目录下寻找索引页。在您的新Docker容器中,您需要给它提供访问该位置上的文件的权限。

要实现这一点,可以使用-v参数,将服务器上的~/docker-nginx/html文件夹映射到容器内的相对路径/usr/share/nginx/html。使用以下命令:

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

 

这是对该命令的简要解释。

  • -v flag specifies that you’re linking a volume.
  • To the left of the : is the location of your directory on your server, ~/docker-nginx/html.
  • To the right of the : is the location that you are symbolically linking to your container /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访问它,无需与容器互动。

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

如果您希望对Nginx的功能有更多控制权,您可以在Docker容器中使用自定义 Nginx 配置文件。

首先,请确保你在顶级项目目录下:

  1. cd ~/docker-nginx

 

使用Docker复制命令,将Nginx配置目录复制到项目文件夹中。

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

 

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

首先停止容器。 .)

  1. docker stop docker-nginx

 

然后把它移除。

  1. docker rm docker-nginx

 

现在您可以在本地编辑默认的Nginx配置文件,以便为一个新目录提供服务,或者使用proxy_pass将流量转发到另一个应用程序或容器,就像常规的Nginx安装一样。您可以阅读我们的Nginx配置文件指南来了解更多关于Nginx配置文件的信息。

一旦你保存了配置文件,就可以创建nginx容器了。添加一个-v标志,使用适当的路径,使新的nginx容器可以从你自己的配置文件中运行。例如:

  1. docker 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命令重新启动容器。这是因为Nginx在其配置文件更改后无法进行热重载。

  1. docker restart docker-nginx

 

这将重新启动您的容器,并且您所做的更改应该会在相关页面上反映出来。

结论

现在你有一个运行的Nginx容器,正在提供一个定制的网页,并且学会了如何在容器内配置Nginx。

如果你想更多了解容器的工作原理,你可以参考我们的《容器简介教程》。

此外,如果您对学习如何在两个Docker容器之间共享数据感兴趣,可以看看我们的《如何在Docker容器之间共享数据》教程。

广告
将在 10 秒后关闭
bannerAds