Docker搭建一个nginx服务的实现

 更新时间:2024年08月08日 10:25:51   作者:海绵宝宝de派小星  
Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,本文主要介绍了Docker搭建一个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/" rel="external nofollow" >nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/" rel="external nofollow" >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了

到此这篇关于Docker搭建一个nginx服务的实现的文章就介绍到这了,更多相关Docker搭建nginx服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 从零开始使用Dapr简化微服务的示例

    从零开始使用Dapr简化微服务的示例

    本文以net6和dapr1.5为基础,搭建一个dapr的简单使用示例。对Dapr简化微服务的简单使用感兴趣的朋友跟随小编一起学习下吧
    2021-11-11
  • 详解Docker私有仓库最简便的搭建方法

    详解Docker私有仓库最简便的搭建方法

    本篇文章主要介绍了Docker私有仓库最简便的搭建方法,具有一定的参考价值,有兴趣的可以了解一下。
    2017-02-02
  • Docker Compose详细介绍

    Docker Compose详细介绍

    Docker Compose是一个用于定义和运行多个Docker容器的工具。它可以让用户轻松地定义和管理多个容器的配置,并且可以通过简单的命令来启动、停止和重启这些容器。在本文中,我们将详细介绍Docker Compose的使用和功能
    2023-04-04
  • Docker 容器操作指令汇总详解

    Docker 容器操作指令汇总详解

    这篇文章主要介绍了Docker 容器操作指令汇总详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • dockerfile发布springboot项目实践

    dockerfile发布springboot项目实践

    使用Docker的其中一个目的,是为了更加简单,方便的部署我们编写的服务,本文主要介绍了dockerfile发布springboot项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 快速修改运行中的docker容器端口映射的三种方式

    快速修改运行中的docker容器端口映射的三种方式

    当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则,那么这种情况我们该怎么处理呢?今天教如何修改运行中的docker容器的端口映射,感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • Docker容器应用中,10个要不得的坏习惯

    Docker容器应用中,10个要不得的坏习惯

    这篇文章主要介绍了Docker容器的应用中,10个要不得的坏习惯,帮助大家更好的理解和使用docker,感兴趣的朋友可以了解下
    2020-08-08
  • docker 上传镜像到hub仓库的操作步骤

    docker 上传镜像到hub仓库的操作步骤

    这篇文章主要介绍了docker 上传镜像到hub仓库的操作步骤,首先Docker Hub需要登录到 Docker Hub,具体操作方法跟随小编一起看看吧
    2024-07-07
  • 清理docker磁盘空间的方法总结(附详细讲解)

    清理docker磁盘空间的方法总结(附详细讲解)

    docker 镜像特别容易占空间,稍微不注意可能磁盘爆满,所以本文给大家详细介绍了如何清理 docker 磁盘空间,并通过代码示例给大家讲解的非常详细,需要的朋友可以参考下
    2024-02-02
  • Docker 解决获取容器获取的时间不是本地时间的问题

    Docker 解决获取容器获取的时间不是本地时间的问题

    这篇文章主要介绍了Docker 解决获取容器获取的时间不是本地时间的问题的相关资料,需要的朋友可以参考下
    2016-11-11

最新评论