Docker:利用Docker搭建一个nginx服务

news2025/7/8 17:39:34

文章目录

  • 搭建一个nginx服务
    • 认识nginx服务
      • Web服务器
      • 反向代理服务器
      • 高性能特点
    • 安装nginx
    • 启动nginx
    • 停止nginx
    • 查找nginx镜像
    • 拉取nginx镜像,启动nginx站点
    • 其他方式拉取nginx镜像信息
    • 通过 DIGEST 拉取镜像

搭建一个nginx服务

首先先认识一下nginx服务:

NGINX是一款高性能的Web服务器和反向代理服务器软件,同时也可用作邮件代理服务器。它最初由俄罗斯程序员Igor Sysoev开发,以其高并发处理能力、低内存消耗和出色的性能优化而闻名。

认识nginx服务

Web服务器

作为Web服务器,NGINX负责处理来自客户端(如浏览器)的HTTP请求,将这些请求映射到服务器上的文件或其他资源,然后返回HTTP响应给客户端。这个过程中,NGINX可以处理静态内容,如HTML、CSS、JavaScript文件等,直接返回给用户。对于动态内容,比如PHP脚本或Python应用生成的内容,NGINX通常会将请求转发给后端的应用服务器(如PHP-FPM或uWSGI)来处理,然后再将后端的响应返回给客户端。

在这里插入图片描述

反向代理服务器

作为反向代理服务器,NGINX接收客户端的请求,并将其转发给内部网络中的一个或多个服务器。这个过程对客户端是透明的,客户端不知道实际处理请求的是哪个后端服务器。这种配置有助于负载均衡,即通过分散请求到多个服务器来提高网站的可用性和扩展性。此外,反向代理还可以用于SSL/TLS加密卸载、缓存内容、安全防护(如DDoS攻击防护)等功能。

高性能特点

  • 事件驱动模型:与传统的每个连接/请求一个线程的模型不同,NGINX使用了异步事件驱动架构,这意味着它可以同时处理大量连接而无需为每个连接创建单独的线程或进程,从而大大提高了效率和可伸缩性。
  • 高并发能力:设计上特别适合处理高并发连接,尤其在处理静态内容和作为代理服务器时表现优异。
  • 低资源消耗:由于其高效的架构,NGINX可以在有限的硬件资源下服务更多的客户端连接,降低了运行成本。

总之,NGINX是一个强大且灵活的工具,广泛应用于现代互联网架构中,无论是简单的静态网站托管,还是复杂的分布式系统部署,都能见到它的身影。

如上所示,是nginx服务的基本介绍,那么下面就借助Docker完成nginx服务

安装nginx

apt install nginx -y

启动nginx

使用

nginx

就能启动nginx,此时访问一下nginx:

在这里插入图片描述
当看到这个界面,就说明nginx已经启动成功了

停止nginx

使用kill命令就可以把进程停止

查找nginx镜像

docker search nginx

拉取nginx镜像,启动nginx站点

root@VM-24-7-ubuntu:~# docker pull nginx:1.23.3
1.23.3: Pulling from library/nginx
f1f26f570256: Pull complete 
84181e80d10e: Pull complete 
1ff0f94a8007: Pull complete 
d776269cad10: Pull complete 
e9427fcfa864: Pull complete 
d4ceccbfc269: Pull complete 
Digest: sha256:f4e3b6489888647ce1834b601c6c06b9f8c03dee6e097e13ed3e28c01ea3ac8c
Status: Downloaded newer image for nginx:1.23.3
docker.io/library/nginx:1.23.3

此时本地就会有nginx的镜像信息

root@VM-24-7-ubuntu:~# docker images;
REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE
nginx                         latest    4f67c83422ec   9 days ago      188MB
hello-world                   latest    d2c94e258dcb   13 months ago   13.3kB
myregistry.com/myhelloworld   latest    d2c94e258dcb   13 months ago   13.3kB
nginx                         1.23.3    ac232364af84   14 months ago   142MB

接着运行镜像

docker run --name nginx1 --rm -it -p 80:80 nginx:1.23.3 bash

运行镜像之后,此时就会进入到容器中进行运行,比如:

在这里插入图片描述
此时我们检查一下操作系统的版本:

root@47a7ad5b7c9f:/# cat /etc/*release*
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

就会发现,此时的版本不是Ubuntu,我们再开一个新的shell看一下当前版本的操作系统

test@VM-24-7-ubuntu:~$ cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

这才是本地shell,说明我们的Docker服务已经运行成功了,此时已经进入到了容器的shell当中

我们在容器shell中启动nginx服务:

root@47a7ad5b7c9f:/# nginx
2024/06/08 03:23:53 [notice] 9#9: using the "epoll" event method
2024/06/08 03:23:53 [notice] 9#9: nginx/1.23.3
2024/06/08 03:23:53 [notice] 9#9: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2024/06/08 03:23:53 [notice] 9#9: OS: Linux 5.15.0-106-generic
2024/06/08 03:23:53 [notice] 9#9: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2024/06/08 03:23:53 [notice] 10#10: start worker processes
2024/06/08 03:23:53 [notice] 10#10: start worker process 11
2024/06/08 03:23:53 [notice] 10#10: start worker process 12

然后我们从另外一个shell中去查看当前ip的80端口的信息:

test@VM-24-7-ubuntu:~$ curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

此时就会发现,当前的服务上已经部署成功了,使用网页进行访问也是如此,并且还和前面的网页不一样,更说明了这是在容器中运行的:

在这里插入图片描述
断开服务,再进行访问,就会发现异样:

test@VM-24-7-ubuntu:~/wechat$ curl 127.0.0.1
curl: (7) Failed to connect to 127.0.0.1 port 80 after 0 ms: Connection refused

其他方式拉取nginx镜像信息

拉取某个组织或者用户定制的镜像:

docker pull xxx/nginx:1.23.4

通过 DIGEST 拉取镜像

首先要明确一个概念,为什么要有DIGEST?它和版本号有什么区别?

DIGEST 不仅仅是版本号那么简单,它是对镜像内容的直接反映。想象一下,即使两个 app 版本号相同,但如果编译时所依赖的库文件或代码有细微差异,它们的实际二进制内容就会不同。DIGEST 就像是对这个最终打包产物的“指纹”,哪怕是最微小的改动,都会导致 DIGEST 发生变化。

所以,通过 DIGEST 拉取镜像,不仅仅是在选择不同的“版本号”,而是确保你获取到的镜像与你期望的镜像内容完全一致,哪怕是同一个标签下的镜像有了更新也不例外。

所以我们尝试拉取一个DIGEST:

在这里插入图片描述

root@VM-24-7-ubuntu:~# docker pull nginx@sha256:d7573e9b475c64dbf09dac0808517e8d5a919918aa772ceca381091365a970aa
docker.io/library/nginx@sha256:d7573e9b475c64dbf09dac0808517e8d5a919918aa772ceca381091365a970aa: Pulling from library/nginx
3f9582a2cbe7: Pull complete 
1c3cdc1adeef: Pull complete 
0d20c7b11e51: Pull complete 
2f98bdf28b77: Pull complete 
90f8f705fe4d: Pull complete 
66350be01a8b: Pull complete 
Digest: sha256:d7573e9b475c64dbf09dac0808517e8d5a919918aa772ceca381091365a970aa
Status: Downloaded newer image for nginx@sha256:d7573e9b475c64dbf09dac0808517e8d5a919918aa772ceca381091365a970aa
docker.io/library/nginx@sha256:d7573e9b475c64dbf09dac0808517e8d5a919918aa772ceca381091365a970aa

此时查看本地镜像:

root@VM-24-7-ubuntu:~# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE
nginx                         latest    4f67c83422ec   9 days ago      188MB
hello-world                   latest    d2c94e258dcb   13 months ago   13.3kB
myregistry.com/myhelloworld   latest    d2c94e258dcb   13 months ago   13.3kB
nginx                         1.23.3    ac232364af84   14 months ago   142MB
nginx                         <none>    8c9eabeac475   15 months ago   142MB

就会有不同版本的nginx了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS 简单内核实现1 前言

文章目录 0、写在前面1、参考资料2、准备工作2.1、STM32 空工程2.2、创建 RTOS 文件目录 3、约定4、专栏目录5、项目仓库 0、写在前面 为深入理解 RTOS 内核工作机制&#xff0c;笔者制作了名为 “FreeRTOS 内核简单实现” 的项目专栏 &#xff0c;目标为自己动手从 0 到 1 编…

第二证券股市资讯:苹果,重回第一!

苹果以弱小的优势&#xff0c;从头夺回市值榜首宝座。 当地时间6月13日周四&#xff0c;美股三大股指涨跌纷歧&#xff0c;纳指与标普500指数均录得接连第四日上涨&#xff0c;而且再创前史新高。 周四&#xff0c;美国5月份生产者价格指数&#xff08;PPI&#xff09;意外下…

Apache Doris单机快速安装(已踩坑)

官方文档&#xff1a;https://doris.incubator.apache.org/zh-CN/docs/get-starting/quick-start/ 环境&#xff1a; 操作系统&#xff1a;CentOS7.6 X86_64 JDK&#xff1a;Oracle jdk1.8.0_351 1.版本下载 从 doris.apache.org 下载相应的 Doris 安装包&#xff0c;并且解压…

碎片化知识如何被系统性地吸收?

一、方法论 碎片化知识指的是通过各种渠道快速获取的零散信息和知识点&#xff0c;这些信息由于其不完整性和孤立性&#xff0c;不易于记忆和应用。为了系统性地吸收碎片化知识&#xff0c;可以采用以下策略&#xff1a; 1. **构建知识框架**&#xff1a; - 在开始吸收之前&am…

吉时利Keithley2611B单通道SMU数字源表

Keithley吉时利2611B数字源表 2611B、2612B、2614B 系统 Sourcemeter SMU 仪器 2611B、2612B 和 2634B 系统 Sourcemeter SMU 仪器为 30W DC / 200W 脉冲 SMU&#xff0c;支持 10A 脉冲&#xff0c;1.5A 至 100fA 和 200V 至 100nV DC。所有 2600B SMU 均配备吉时利 TSP 脚本…

硬件开发笔记(十八):核心板与底板之间的连接方式介绍说明:板对板连接器

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139663096 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

基于SSD的安全帽检测

目录 1. 作者介绍2. SSD算法介绍2.1 SSD算法网络结构2.2 SSD算法训练过程2.3 SSD算法优缺点 3. 基于SSD的安全帽检测实验3.1 VOC 2007安全帽数据集3.2 SSD网络架构3.3 训练和验证所需的2007_train.txt和2007_val.txt文件生成3.4 模型训练3.5 GUI界面3.6 结果展示3.7 文件下载 4…

C#版 iText7——画发票PDF(完整)

显示描述&#xff1a; 1、每页显示必须带有发票头、“销售方和购买方信息” 2、明细填充为&#xff1a;当n≤8 行时&#xff0c;发票总高度140mm&#xff0c;每条发票明细行款高度4.375mm&#xff1b; 当8<n≤12行时&#xff0c;发票高度增加17.5mm&#xff0c;不换页&#…

人工智能内容生成元年-AI绘画原理解析

随着人工智能技术的飞速发展&#xff0c;AI绘画作为其引人注目的应用领域&#xff0c;正在以惊人的速度崭露头角。从最初的生成对抗网络&#xff08;GAN&#xff09;到如今的深度学习&#xff0c;AI绘画技术在艺术创作、设计等领域展现出了无限的可能性。其独特的算法和智能化特…

构建 deno/fresh 的 docker 镜像

众所周知, 最近 docker 镜像的使用又出现了新的困难. 但是不怕, 窝们可以使用曲线救国的方法: 自己制作容器镜像 ! 下面以 deno/fresh 举栗, 部署一个简单的应用. 目录 1 创建 deno/fresh 项目2 构建 docker 镜像3 部署和测试4 总结与展望 1 创建 deno/fresh 项目 执行命令…

情侣飞行棋系统微信小程序+H5+微信公众号+APP 源码

情侣飞行棋系统&#xff1a;浪漫与策略并存的双人游戏 &#x1f3b2; 一、引言&#xff1a;寻找爱情的乐趣 在繁忙的生活中&#xff0c;情侣们总是渴望找到一种既能增进感情又能带来乐趣的活动。而“情侣飞行棋系统”正是这样一个完美的选择。它结合了传统飞行棋的玩法和情侣…

接口自动化测试工程化——了解接口测试

什么是接口测试 接口测试也是一种功能测试 我理解的接口测试&#xff0c;其实也是一种功能测试&#xff0c;只是平时大家说的功能测试更多代指 UI 层面的功能测试&#xff0c;而接口测试更偏向于服务端层面的功能测试。 接口测试的目的 测试左移&#xff0c;尽早介入测试&a…

失眠焦虑?这些小妙招助你重拾宁静之夜

在这个快节奏的时代&#xff0c;失眠与焦虑似乎成了不少人的“常客”。每当夜幕降临&#xff0c;躺在床上却辗转反侧&#xff0c;思绪万千&#xff0c;仿佛整个世界的喧嚣都涌入了脑海。&#x1f4ad; 其实&#xff0c;放松心情&#xff0c;调整心态&#xff0c;是缓解失眠焦虑…

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分&#xff1a;显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏&#xff08;Edit Text&#xff09;&#xff1a;位于界面顶部中央&#xff0c;用于显示用户输入的表达式和…

Java聚合快递系统对接云洋系统快递小程序APP公众号系统源码

聚合快递对接云洋系统小程序&#xff1a;一键解决物流难题 一、引言&#xff1a;为何选择聚合快递对接&#xff1f; 在电商日益繁荣的今天&#xff0c;物流成为了连接卖家与买家的关键桥梁。然而&#xff0c;面对市场上琳琅满目的快递公司&#xff0c;如何高效、便捷地进行快…

Fluid 1.0 版发布,打通云原生高效数据使用的“最后一公里”

作者&#xff1a;顾荣 前言 得益于云原生技术在资源成本集约、部署运维便捷、算力弹性灵活方面的优势&#xff0c;越来越多企业和开发者将数据密集型应用&#xff0c;特别是 AI 和大数据领域应用&#xff0c;运行于云原生环境中。然而&#xff0c;云原生计算与存储分离架构虽…

低代码组件扩展方案在复杂业务场景下的设计与实践

组件是爱速搭的前端页面可视化模块的核心能力之一&#xff0c;它将前端研发人员从无休止的页面样式微调和分辨率兼容工作中解放了出来。 目前&#xff0c;爱速搭通过内置的上百种功能组件&#xff08;120&#xff09;&#xff0c;基本可以覆盖大部分中后台页面的可视化设计场景…

什么是数字人大?一分钟带你了解!

在数字化浪潮席卷全球的今天&#xff0c;中国作为数字经济的领跑者&#xff0c;正积极推动数字技术与国家治理体系的深度融合。其中&#xff0c;“数字人大”作为新时代国家治理体系和治理能力现代化的重要一环&#xff0c;正逐步成为推动民主法治建设、提升人大工作效能的新引…

ThinkPHP5.0 apache服务器配置URL重写,index.php去除

本地环境wamp .htaccess文件代码 <IfModule mod_rewrite.c>Options FollowSymlinks -MultiviewsRewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule> 踩过这个坑&a…

不用下软件,51建模网上传模型就能直接在网页预览!

在数字化时代&#xff0c;3D建模和渲染技术日益成为各行各业不可或缺的工具。然而&#xff0c;传统的建模和预览流程往往需要用户安装复杂的软件&#xff0c;这不仅增加了技术门槛&#xff0c;也限制了模型在不同设备间的共享和查看。 为了解决这一痛点&#xff0c;51建模网凭…