使用NGINX Docker镜像构建和运行Web应用程序的教程

在本教程中,探索如何使用NGINX Docker镜像在Docker等平台上构建和运行web应用程序!

Docker是一个引人注目的平台,特别适合打包和运行Web应用程序,尤其是与云平台提供的众多平台即服务(PaaS)方案配对使用。NGINX一直为DevOps团队提供Linux上托管Web应用程序的能力,并且还提供了官方的Docker镜像作为自定义Web应用程序的基础。

在本文中,我将解释DevOps团队如何使用NGINX Docker镜像来构建和运行Web应用程序。

开始使用基础镜像

NGINX是一个多功能工具,可用作负载均衡器、反向代理和网络缓存等众多用途。然而,在Docker容器中运行NGINX时,大部分这些高级功能都被委派给其他专门的平台或其他实例的NGINX。通常情况下,当NGINX在Docker容器中运行时,它扮演的是Web服务器的角色。

要创建一个带有默认网站的NGINX容器,请运行以下命令:

docker run -p 8080:80 nginx

此命令将下载 nginx 镜像(如果尚未下载)并创建一个容器,将容器的80端口映射到主机上的8080端口。然后,您可以打开 http://localhost:8080/index.html  来查看默认的“Welcome to nginx!”网站。

为了使NGINX容器能够托管自定义网页资源,您可以将本地目录挂载到Docker容器内部。

将以下HTML代码保存到名为 index.html 的文件中:

<html>
    <body>
        Hello from Octopus!
    </body>
</html>

接下来,运行以下命令将当前目录以只读方式挂载到NGINX容器内的 /usr/share/nginx/html 目录下:

docker run -v $(pwd):/usr/share/nginx/html:ro -p 8080:80 nginx

再次打开 http://localhost:8080/index.html,您将看到显示自定义HTML页面。

Docker镜像的一个好处是能够将所有相关文件捆绑到一个可分发的单个构件中。为了实现这一好处,您必须基于NGINX镜像创建一个新的Docker镜像。

基于NGINX创建自定义镜像

要创建您自己的 Docker 映像,请将以下文本保存到名为 的文件中 Dockerfile

FROM nginx
COPY index.html /usr/share/nginx/html/index.html

Dockerfile 包含构建自定义 Docker 映像的说明。这里你使用 FROM 命令将你的镜像基于NGINX镜像,然后使用命令COPY将你的 index.html 文件复制到该 /usr/share/nginx/html 目录下的新镜像中。

使用以下命令构建新映像:

docker build . -t mynginx

这将构建一个名为 的新图像 mynginx 。使用以下命令运行新映像:

docker run -p 8080:80 mynginx

请注意,这次您没有挂载任何目录。但是,当您打开 http://localhost:8080/index.html  自定义 HTML 页面时,会显示该页面,因为它嵌入在您的自定义图像中。

NGINX 的功能远不止托管静态文件。要解锁此功能,您必须使用自定义 NGINX 配置文件。

高级 NGINX 配置

NGINX 通过配置文件公开其功能。默认 NGINX 映像附带一个简单的默认配置文件,旨在托管静态 Web 内容。该文件位于 /etc/nginx/nginx.conf 默认映像中,具有以下内容:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}


无需详细了解该配置文件,但有一行有趣的内容指示 NGINX 从该 /etc/nginx/conf.d 目录加载其他配置文件:

include /etc/nginx/conf.d/*.conf;

默认/etc/nginx/conf.d文件将 NGINX 配置为 Web 服务器。具体来说,location / 块加载文件 /usr/share/nginx/html 就是您之前将 HTML 文件安装到该目录的原因:

server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

您可以利用说明加载任何 *.conf 配置文件来自 /etc/nginx 定义 NGINX。/nginx-health 在此示例中,您通过侦听端口 90 的自定义位置添加运行状况检查,该位置使用 HTTP 200 OK响应对路径的请求。

将以下文本保存到名为 的文件中 health-check.conf

server {
    listen       90;
    server_name  localhost;

    location /nginx-health {
        return 200 "healthy\n";
        add_header Content-Type text/plain;
    }
}

修改 Dockerfile 将配置文件复制到 /etc/nginx/conf.d

FROM nginx
COPY index.html /usr/share/nginx/html/index.html
COPY health-check.conf /etc/nginx/conf.d/health-check.conf

使用以下命令构建图像:

docker build . -t mynginx

使用命令运行新映像。请注意 9090 上公开的新端口:

docker run -p 8080:80 -p 9090:90 mynginx

现在开放 http://localhost:9090/nginx-health。返回健康检查响应以表明 Web 服务器已启动并正在运行。

上面的示例使您的自定义图像基于默认 nginx 图像。然而,还有其他变体可以提供更小的图像尺寸而不牺牲任何功能。

选择 NGINX 变体

默认 nginx 镜像基于Debian。不过NGINX也提供了基于Alpine的镜像。

  • NGINX:github.com/nginxinc/docker-nginx/blob/master/Dockerfile-debian.template

  • Alpine:github.com/nginxinc/docker-nginx/blob/master/Dockerfile-alpine.template

Alpine 经常用作 Docker 镜像的轻量级基础。要查看 Docker 镜像的大小,必须首先将它们拉到本地工作站:

docker pull nginx
docker pull nginx:stable-alpine

然后您可以使用以下命令查找图像尺寸:

docker image ls

由此,您可以看到 Debian 镜像的大小约为 140 MB,而 Alpine 镜像的大小约为 24 MB。这大大节省了图像尺寸。

要将您的图像基于 Alpine 变体,您需要更新 Dockerfile

FROM nginx:stable-alpine
COPY index.html /usr/share/nginx/html/index.html
COPY health-check.conf /etc/nginx/conf.d/health-check.conf

使用以下命令构建并运行图像:

docker build . -t mynginx
docker run -p 8080:80 -p 9090:90 mynginx

再次打开 http://localhost:9090/nginx-health  http://localhost:8080/index.html  查看网页。一切都像以前一样继续工作,但您的自定义图像现在小得多。

结论

NGINX 是一个功能强大的 Web 服务器,官方 NGINX Docker 镜像允许 DevOps 团队在 Docker 中托管自定义 Web 应用程序。NGINX 还支持高级场景,因为它能够读取复制到自定义 Docker 映像中的配置文件。

在这篇文章中,您学习了如何创建托管静态 Web 应用程序的自定义 Docker 映像,添加高级 NGINX 配置文件以提供运行状况检查端点,并比较 Debian 和 Alpine NGINX 映像的大小。

相关资源

  • NGINX Docker 镜像源代码(github.com/nginxinc/docker-nginx)

  • Dockerfile 参考(docs.docker.com/engine/reference/builder/)文章来源地址https://www.toymoban.com/diary/docker/515.html

到此这篇关于使用NGINX Docker镜像构建和运行Web应用程序的教程的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/docker/515.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
如何通过事务隔离级别实现最佳性能
上一篇 2023年11月08日 23:32
Ubuntu服务器上安装Docker,创建、启动、停止和删除容器的步骤指南
下一篇 2023年11月09日 00:37

相关文章

  • Docker(镜像、容器、仓库)工具安装使用命令行选项及构建、共享和运行容器化应用程序

    👧个人主页:@小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 🔑本章内容:Docker工具安装使用、命令行选项及构建、共享和运行容器化应用程序时的主要步骤 记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~ 提示:以下是本篇文章正文内容,下面案例可供参考 以下是在常

    2024年02月05日
    浏览(50)
  • 快速入门:使用 Spring Boot 构建 Web 应用程序

    本文将讨论以下主题: 安装 Java JDK、Gradle 或 Maven 和 Eclipse 或 IntelliJ IDEA 创建一个新的 Spring Boot 项目 运行 Spring Boot 应用程序 编写一个简单的 Web 应用程序 打包应用程序以用于生产环境 通过这些主题,您将能够开始使用 Spring Boot 并创建自己的 Web 应用程序。 Spring Boot是一个

    2024年02月07日
    浏览(59)
  • 使用Docker构建分布式应用程序

    作者:禅与计算机程序设计艺术 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。 传统的应用分为三层结构:应用运行环境、应用逻辑和资源管理,Doc

    2024年02月08日
    浏览(49)
  • 解释 RESTful API,以及如何使用它构建 web 应用程序。

    RESTful API是一种利用HTTP协议进行通信的Web API设计风格,它采用了一组统一且可缓存的操作,包括GET、POST、PUT、DELETE等,通过URL来定位资源,以及使用JSON、XML等格式来传输数据,以实现系统之间的数据交互和资源共享。 使用RESTful API构建Web应用程序,首先需要设计API的URL、

    2024年02月11日
    浏览(50)
  • 使用PostgreSQL构建强大的Web应用程序:最佳实践和建议

    PostgreSQL是一个功能强大的开源关系型数据库,它拥有广泛的用户群和活跃的开发社区。越来越多的Web应用选择PostgreSQL作为数据库 backend。如何充分利用PostgreSQL的特性来构建健壮、高性能的Web应用?本文将给出一些最佳实践和建议。 一、选择合适的PostgreSQL数据类型 PostgreSQL提供

    2024年02月12日
    浏览(58)
  • 解释 RESTful API,以及如何使用它构建 web 应用程序

             RESTful API stands for Representational State Transfer Application Programming Interface. It is a set of principles and guidelines for building web services that provide data in a standard format, typically JSON or XML. RESTful API emphasizes on uniformity, scalability, reliability, performance, and flexibility. It operates on HTTP and follo

    2024年02月14日
    浏览(47)
  • Docker容器学习:Dockerfile制作Web应用系统nginx镜像

    目录 编写Dockerfile 1.文件内容需求: 2.编写Dockerfile: 3.开始构建镜像  4.现在我们运行一个容器,查看我们的网页是否可访问 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜像 1.文件内容需求: 基于centos基础镜像。 指定作者信息。 安装nginx服

    2024年02月11日
    浏览(52)
  • Elasticsearch:使用在本地计算机上运行的 LLM 以及 Ollama 和 Langchain 构建 RAG 应用程序

    无需 GPU 的隐私保护 LLM。在本博客中,我将演示使用不同的工具 Ollama 构建的 RAG 应用程序。 与本文相关的所有源代码均已发布在 github上。 请克隆存储库以跟随文章操作。我们可以通过如下的方式来克隆: Ollama 是一个轻量级且灵活的框架,专为在个人计算机上本地部署 LL

    2024年04月16日
    浏览(40)
  • Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序

    Nest是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它是基于Express.js构建的,并且提供了多种新特性和抽象层,可以让开发者更加轻松地构建复杂的应用程序。 本文将介绍Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序。 模块 在Nest中,模块

    2024年02月02日
    浏览(95)
  • 什么是RESTful API,以及如何它使用构建 web 应用程序(InsCode AI 创作助手)

    RESTful API 是一种基于 REST(Representational State Transfer,表征状态转移) 架构风格的 API,它使用 HTTP 协议的方法(GET,POST,PUT,DELETE)来实现资源的创建、读取、更新和删除。通过这种方式,API 可以更加简单和灵活,使得不同编程语言之间的交互更加容易。 使用 RESTful API 构建

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包