Docker 是一个开源平台,使开发人员能够轻松地开发、发布和运行应用程序。它将应用程序及其依赖项打包在一个隔离的虚拟容器中,该容器通常在 Linux 系统上运行,与虚拟机相比非常轻量。这是因为容器只与其加载的二进制文件/库共享操作系统内核。要了解更多关于 Docker 的信息,请阅读Docker 简介。
什么是 NGINX 服务器?
Nginx 主要用作反向代理软件。Nginx 是一款开源 Web 服务器,您可以使用它执行多项任务,例如可扩展性、效率和灵活性。它专为高性能而设计,可以处理大量传入请求的情况。
Nginx 服务器的优势
Nginx 服务器的优点如下:
-
高性能: Nignix 是一种事件驱动的架构,可以更高效地一次性处理高负载。Nginx 占用的内存非常少,这将有助于提高整体效率。
-
可扩展性: Nginx 可以根据传入流量进行扩展和缩减。为了管理不断增长的工作负载,它可以安装在单台服务器或服务器集群上。
-
灵活性: Nginx 使用起来非常灵活,除了 Web 服务之外,它还可以用于其他用途,如反向代理、负载均衡器、缓存服务器和媒体流服务器。
-
低资源消耗:与其他 Web 服务器相比,Nginx 消耗的 CPU 和内存等资源非常少。
-
开源和社区支持: Nginx 是一个开源平台,因此它的用户非常庞大,因此对于想要学习的新用户和学生来说,可以提供文档、教程和支持。
什么是 Docker 容器以及为什么将它们用于 NGINX?
容器化是基于操作系统的虚拟化,它在用户空间中创建多个虚拟单元,称为容器。容器共享相同的主机内核,但通过操作系统级别的私有命名空间和资源控制机制彼此隔离。与虚拟机管理程序相比,基于容器的虚拟化在虚拟化和隔离方面提供了不同的抽象级别。虚拟机管理程序使用大量硬件,这会导致虚拟化硬件和虚拟设备驱动程序方面的开销。在每个虚拟机实例中,完整的操作系统(例如 Linux、Windows)都在这些虚拟化硬件之上运行。Docker 为运行应用程序提供了一致且隔离的环境,使其成为部署 Nginx 的热门选择。
使用 Docker 容器来运行 NGINX 的好处
以下是使用 Docker 容器作为 nginx 服务器的好处:
-
您可以在不同类型的底层操作系统平台中使用 nginx,这使得它重量轻并且可以移植到不同的环境中,即使您从一个平台更改 nginx 容器,其行为在每个平台上也将保持不变。
-
Docker 容器完全隔离了 nginx 容器,由于隔离,这种冲突将会减少,从而降低了安全风险,并阻止了对其他应用程序的影响。
-
容器重量轻,可以共享主机系统内核,与虚拟机等相比效率更高。
-
Docker 在 DevOps 方法中被广泛采用,这使得将 nginx 部署集成到持续集成和持续交付 (CI/CD) 管道中变得更加容易。
什么是 Docker Nginx?
当用户从 Web 服务器请求页面时,Web 服务器会接收请求并向用户发送相应的响应。Nginx 可以充当这样的 Web 服务器。NGINX 是一款开源 Web 服务器,也用于反向代理、HTTP 负载均衡和电子邮件代理。它能够高效利用系统资源,并采用事件驱动和异步架构处理大量并发请求。正因如此,Nginx 成为电商、云存储和搜索引擎等高负载网站的理想之选。想要了解更多关于 Nginx 的信息,请参阅什么是 Nginx(Web 服务器)以及如何安装?
如何拉取 Docker Nginx 镜像?
按照下面提到的步骤使用 Docker 拉取 Nginx 镜像。
步骤1:打开安装的Docker服务器。
第 2 步:您可以根据组织的要求提取docker nginx 镜像类型,例如根据组织的要求使用社区版或企业版。
步骤 3:通过使用下面提到的命令,您可以使用位于DockerHub 中的 Docker 拉取 nginx 镜像。
docker pull nginx:<Version>
Docker pull命令用于拉取任何你想使用的镜像,而Nginx是可以作为容器运行的镜像。\
为什么选择 Docker 容器?
大多数开发人员面临的一个常见问题是,应用程序在一台机器上运行,但在另一台机器上却无法运行。这可能是由于操作系统不同和库版本不同造成的,例如,开发人员使用 nodejs 14.1 开发了一个应用程序,但云实例安装的是 nodejs 9.2。Docker 容器可以解决这一问题,它将应用程序的库和所有依赖项打包在一起,预先构建并准备执行。它与其他容器隔离,使应用程序感觉它是系统上唯一运行的应用程序。许多组织现在正从虚拟机迁移到容器,因为容器重量轻,并且使用提供的 CLI 易于维护。它还有助于轻松适应微服务架构,摆脱传统的单片系统。其他好处包括可扩展性、修改和维护。
Docker 镜像和 Docker Hub
Docker 镜像就像虚拟机环境中的快照。它记录了特定时间点 Docker 容器的信息,例如应用程序所需的所有库及其特定版本。镜像不可更改,但可以轻松复制并与他人共享。镜像通常与他人共享,以便其他人能够在应用程序预期运行的相同环境中运行该应用程序,并且镜像包含有关该环境的所有信息。Docker Hub 就是这样一个平台,您可以在其中查找容器镜像并与他人共享。一些最常见的镜像适用于 Nginx、Nodejs、Mongo DB等等。
如何以分离模式运行 Docker Nginx 镜像?
您可以使用以下命令运行 Docker nginx 镜像。但是,当您按下 CTRL +C 时,容器将停止运行,因为您以附加模式运行 Docker 容器,退出时容器将自动停止运行。
docker run nginx
- 为了解决上述情况,你需要以分离模式运行容器。你可以使用以下命令来实现。
docker run -d nginx
-d表示您正在以分离模式运行镜像。要了解有关 Docker 命令的更多信息,请参阅 Docker – 指令。
如何将 Docker Nginx 镜像推送到 DockerHub?
- 从 DockerHub 拉取镜像后,您可以根据自己的操作对镜像进行一些更改
从 Docker Hub 下载 Nginix
- 使用以下命令从 docker hub 下载 NGINX 的官方镜像。
docker pull nginx:latest
- 此命令将获取最新版本的 nginx 映像,但您可以将“最新”替换为您需要的版本并下载。
如何列出 Docker 镜像?
- 使用以下命令确认图像已下载。
docker images
- 结果应该包括 nginx 以及其他类似的图像。
如何使用 Docker 创建和运行 NGINX 容器?
- 现在使用以下命令运行 docker 镜像。
docker run -p 8000:80 nginx
-
使用上述命令,您正在运行 nginx 服务器,其中-p是将端口 8000(本地计算机)映射到容器中的端口 80 的标志,因为 80 是 nginx 默认服务的端口。通过访问端口 8000 上的本地主机来验证安装。
-
我们将获得 nginx web 服务器的默认页面如下:
构建一个在 Nginx 上服务的网页
-
我们将创建两个文件,一个是 index.html 和一个 aboutme.html,并将这些文件托管在运行 Nginx 服务器的新容器上。
-
创建两个文件后的文件结构如下:
- index.html 和 aboutme.html 包含以下代码:
Docker Nginx 网页的示例 Index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NGINX Example</title>
</head>
<body>
<h1>HI!!</h1>
<h3>This is NGINX</h3>
<footer>
<a href="./aboutme.html">About ME</a>
</footer>
</body>
</html>
- 说明:此网页包含两个页眉和一个页脚,其中包含指向“关于我”页面的链接。
aboutme.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>About me</title>
</head>
<body>
<h1>Hello!</h1>
<h3>This is ganesh prasad!</h3>
</body>
</html>
-
说明: 此页面显示一个 h1 标题,其中文本为“Hello”,以及一个 h3 标题,其中正文为“This is Ganesh Prasad”。
-
- 使用以下命令创建一个 docker 容器,将本地机器的端口映射到 nginx 服务的端口,并将这两个文件挂载到容器中 nginx 用于托管文件的位置(/usr/share/nginx/html)。
docker run -d -p 8000:80 -v address_to_folder_with_files_locally:/usr/share/nginx/html --name my-nginx-server nginx
解释
-
标志-d用于以分离模式(即在后台)运行服务器。
-
-p用于将本地端口映射到服务器所服务的容器的端口。
-
-v用于将包含文件的文件夹挂载到 Nginx 用于提供网页的容器中的某个位置。
-
–name提供容器的名称,最后,我们提供图像名称。
输出
- 在浏览器中访问地址localhost:8000 ,你将看到以下内容:
- 单击“关于我”链接将转到“关于我”页面。
如何停止 Docker Nginx 容器?
- 要停止docker容器,可以使用以下命令。完成后
docker stop my-nginx-server
- Stop 是用于停止一些正在运行的容器的命令,“ my-nginx-server”是容器的名称。
在 Docker 容器中自定义 NGINX 配置
- 按照下面提到的步骤创建一个定制的 nginx 镜像。
步骤1:创建自定义NGINX配置文件
- 创建一个 coustm nginx 文件,如示例 GFG.conf,如下所示。
1. custom.conf
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://your_backend_service;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
1. Add other proxy settings as needed
}
1. Add other server block configurations as needed
}
第 2 步:为 Nginx 创建 Dockerfile,如下所示。
1. Use the official NGINX base image
FROM nginx:latest
1. Copy the custom NGINX configuration file to the container
COPY <Path>
```
### 步骤 3:使用以下命令使用 dockerfile 构建 docker 镜像
```bash
docker build -t <Nmae of the file> .
步骤 4:将 Docker 镜像作为容器运行
- 以下命令有助于将 docker 镜像作为容器运行:
docker run -p 8080:80 <Name of the Image>
NGINX 管理的高级 Docker 概念
在docker高级概念中,您可以更高效地使用docker,部署功能更强大、更安全的应用程序。以下是在docker容器中部署nginx的概念。
-
用于持久数据的卷挂载。
-
多容器应用程序的网络配置。
-
容器监控的健康检查。
-
用于定制部署的图像构建。
-
实现可扩展性和性能的资源管理。
-
用于大规模部署的编排工具。
-
持续集成和持续交付(CI/CD)。
结论
在本文中,我们简要了解了 Docker、容器、镜像和 Docker Hub。然后,我们使用 Docker Hub 上的官方 Nginx 镜像创建并运行了一个 Docker 容器。我们还学习了如何列出系统上的所有镜像以及如何停止 Docker 容器。之后,我们在 Docker 容器上运行的 Nginx 服务器上托管了一个小型网页。