大家好,今天小编来为大家解答快速上手 NGINX Docker 镜像这个问题,很多人还不知道,现在让我们一起来看看吧!
本教程将介绍NGINX官方Docker镜像以及如何使用它。我们将首先在本地运行静态Web 服务器,然后构建自定义映像来容纳Web 服务器及其需要提供服务的文件。最后,我们将介绍如何为简单的REST API 创建反向代理服务器,并解释如何与您的团队共享图像。
[[338779]]
先决条件要完成本教程,您需要满足以下条件:
免费的Docker 帐户您可以注册一个免费的Docker 帐户(https://hub.docker.com/)并免费获得无限的公共存储库。
下载和安装Docker 以在本地运行Docker 的说明(https://docs.docker.com/desktop/)。
用于编辑文件的IDE 或文本编辑器。我推荐VSCode (https://code.visualstudio.com/Download)。NGINX官方镜像Docker 官方镜像是托管在Docker Hub 上的一组精选的Docker 存储库,已扫描漏洞并由Docker 员工和上游维护人员进行维护。
官方镜像是Docker 新用户入门的好地方。这些图像有清晰的记录,促进最佳实践,并且是针对最常见的用例而设计的。
你不妨看一下NGINX官方镜像(https://hub.docker.com/_/nginx)。打开常用浏览器并登录Docker。如果您还没有Docker 帐户,可以免费创建一个帐户(https://hub.docker.com/signup)。
图1
现在,点击nginx 结果即可查看图像详细信息。
在“图像详细信息”屏幕上,您可以查看图像的描述和自述文件。您还可以通过单击“标签”选项卡来查看所有可用标签。
图2
运行基本的Web服务器你不妨使用NGINX官方镜像来运行一个基本的Web服务器。运行以下命令来启动容器。
$dockerrun-it --rm-d-p8080:80 --namewebnginx 运行上述命令后,您开始将容器作为守护进程(-d) 运行,并在主机网络上发布端口8080。您还使用--name 选项命名容器web。
打开您常用的浏览器并导航至http://localhost:8080。您应该看到以下NGINX 欢迎页面。
图3
这很好,但是运行Web 服务器的目的是为我们自己的自定义html 文件提供服务,而不是默认的NGINX 欢迎页面。
让我们停止容器并查看提供我们自己的HTML 文件。
$dockerstopweb添加自定义HTML默认情况下,Nginx 会在容器内的/usr/share/nginx/html 目录中查找要提供服务的文件。我们需要将html文件放入这个目录中。一个非常简单的方法是使用已安装的卷。安装卷后,我们可以链接本地计算机上的目录并将该目录映射到正在运行的容器。
您还可以创建一个自定义html 页面并使用nginx 镜像为其提供服务。
创建一个名为site-content 的目录。在该目录中添加index.html 文件并添加以下html:
!doctypehtmlhtmllang='en'headmetacharset='utf-8'titleDockerNginx/title/headbodyh2HellofromNginxcontainer/h2/body/html 现在运行以下命令,与上面的命令相同,但现在我们添加了-v 标志来创建绑定挂起加载卷。这会将我们的本地目录~/site-content 本地挂载到正在运行的容器,该容器位于/usr/share/nginx
$dockerrun-it --rm-d-p8080:80 --nameweb-v~/site-content:/usr/share/nginx nginx 打开你常用的浏览器并导航到http://localhost:8080,你应该可以浏览你在浏览器窗口中可以看到上面的html。
图4
构建自定义的NGINX镜像绑定挂载是本地运行并将文件共享到正在运行的容器的绝佳选择。但是如果我们想同时移动图像和移动html文件怎么办?
要构建自定义镜像,我们需要创建一个Dockerfile 并向其中添加命令。
在同一目录中,创建一个名为Dockerfile 的文件并粘贴以下命令。
FROMnginx:latestCOPY./index.html/usr/share/nginx/html/index.html 我们开始使用基础镜像来构建自定义镜像。在第1 行,您可以看到我们使用FROM 命令来执行此操作。这会将nginx:latest 映像拉到本地计算机上,然后在其上构建自定义映像。
您会注意到我们没有将ENTRYPOINT 或CMD 添加到Dockerfile 中。我们将使用基本NGINX 映像提供的底层ENTRYPOINT 和CMD。
要构建映像,请运行以下命令:
$dockerbuild-twebserver.build 命令将告诉Docker 执行Dockerfile 中的命令。您将在终端中看到类似的输出,如下所示:
图5
现在我们可以在容器中运行图像,但这一次我们不必创建绑定安装来包含html。
$dockerrun-it --rm-d-p8080:80 --namewebwebserver 打开浏览器并导航到http://localhost:8080,确保html 页面正确提供。
设置反向代理服务器开发人员的常见场景是在反向代理后面运行REST API。这样做的原因有很多,但主要原因之一是在与前端应用程序启动不同的网络或IP 上运行API 服务器。然后,您可以保护该网络并仅允许来自反向代理服务器的流量。
为了简化和节省空间,我在React.js 中创建了一个简单的前端应用程序,在Node.js 中创建了一个简单的后端API。运行以下命令从GitHub 提取代码。
$gitclonehttps://github.com/pmckeetx/docker-nginx.git 克隆存储库后,在常用的IDE 中打开该项目。查看前端目录中的Dockerfile。
FROMnode:12.18.2asbuildARGREACT_APP_SERVICES_HOST=/services/mWORKDIR/appCOPY./package.json/app/package.jsonCOPY./package-lock.json/app/package-lock.jsonRUNyarninst allCOPY.RUNyarnbuildFROMnginxCOPY./nginx/nginx.conf/etc /nginx/conf.d/default.confCOPY--from=build/app/build/usr/share/nginx/html 我们在frontend/nginx/nginx.conf 文件中配置了一个反向代理。
服务器{listen80;server_namefrontend;location/{#ThiswouldbethedirectorywhereyourReactapp's staticfilesarestoredatroot/usr/share/nginx/html;try_files$uri/index.html;}location/services/m{proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For $proxy_add_ x_forwarded_for;proxy_set_headerX-NginX-Proxytrue;proxy_passhttp://backend:8080/services/m;proxy_ssl_session_reuseoff;proxy_set_h eaderHost$http_host;proxy_cache_bypass$http_upgrade;proxy_redirectoff;}} 正如您在第二个位置部分中看到的,所有流量都流向/services /米将通过proxy_pass访问http://backend:8080/services/m。
项目根目录下有一个Docker Compose文件,该文件会启动前后端服务。您可能希望启动应用程序并测试反向代理是否正常工作。
$docker-compose-up使用默认驱动程序创建网络“docker-nginx_frontend”使用默认驱动程序创建网络“docker-nginx_backend”Creatingdocker-nginx_frontend_1.doneCreatingdocker-ngi_1.doneAttachingtodocker-nginx_backend_1,docker-nginx_frontend_1frontend_1|/docker-entrypoint.sh:配置完成;准备启动backend_1|列表eningonport8080 你可以看到nginx Web 服务器启动了,backend_1 服务也启动了,监听8080 端口。
打开浏览器并导航到http://localhost。您应该看到以下页面:
图6
打开开发人员工具窗口并单击“网络”选项卡。现在返回浏览器并输入实体名称,可以是任何内容。我将使用“小部件”。然后单击“提交”按钮。
在开发者工具窗口中,单击小部件的网络请求,您可以看到该请求是针对http://localhost 而不是http://localhost:8080。
图7
打开终端,您会发现来自浏览器的请求被代理到backend_1 服务并得到正确处理。
图8
运送镜像现在不妨在Docker 上共享镜像,以便我们团队中的其他人可以拉取它并在本地运行它。这也是与团队之外的其他人(例如测试人员和企业主)共享应用程序的好方法。
要将映像推送到Docker 存储库,请运行docker tag 命令,然后运行docker push 命令。您首先需要使用您的Docker ID 登录。如果您没有免费帐户,可以在此处创建一个帐户(https://hub.docker.com/)。
$dockerlogin$dockertagnginx-frontenddockerid/nginx-frontend$dockerpushdockerid/nginx-frontend
结论原标题:如何使用官方NGINX Docker Image,作者:Peter McKee
OK,关于快速上手 NGINX Docker 镜像和的内容到此结束了,希望对大家有所帮助。
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7393.html
用户评论
感觉学习下NGINX Docker镜像挺方便的,可以快速部署网站。
有11位网友表示赞同!
对容器化技术不太熟悉,不知道这个博客能讲解清楚吗?
有14位网友表示赞同!
想自己搭建一个站点服务器,NGINX一直是我的首选,Docker镜像更省心。
有19位网友表示赞同!
我尝试过用官方Docker镜像部署应用,感觉挺稳的。
有9位网友表示赞同!
最近在学习 Docker ,正好看到这个教程,打算跟着步骤试一试
有15位网友表示赞同!
使用官方镜像确实靠谱,不用担心版本冲突什么的。
有6位网友表示赞同!
NGINX配置其实不太简单,希望这篇博客能详细说明各种参数的理解。
有19位网友表示赞同!
Docker镜像是基于 Ubuntu 的吧?希望能介绍下环境搭建方面的知识点。
有15位网友表示赞同!
我之前是用虚拟机部署 NGINX ,现在想尝试 Docker ,看看速度是不是更快。
有14位网友表示赞同!
官方镜像维护好,更新及时,很放心使用。
有11位网友表示赞同!
这篇文章能涵盖一些常用的 NGINX 配置吗?例如 rewrite 规则什么的
有15位网友表示赞同!
Docker 命令经常会用很多缩写,希望教程能够解释清楚,方便新手理解
有20位网友表示赞同!
使用 Docker 部署应用,安全性方面需要注意什么?博客里有相关解答吗?
有10位网友表示赞同!
学习下如何在 NGINX 配置中实现负载均衡。
有14位网友表示赞同!
部署网站时,使用哪个镜像更合适?官方的还是第三方社区版本的?
有6位网友表示赞同!
希望教程能介绍一下如何监控 NGINX 的运行状态。
有20位网友表示赞同!
如果想要修改 NGINX 的配置文件,该怎么操作呢?
有10位网友表示赞同!
想尝试在 Docker 中部署其他类型的应用,比如 PHP 、Python ,有没有类似的官方镜像?
有17位网友表示赞同!
学习 Docker 以后,感觉开发效率确实提高了,期待更多 Docker 工具和技术的应用!
有8位网友表示赞同!