基于Docker的Nginx的安装与配置

news2025/1/22 9:06:00

基于Docker的Nginx的安装与配置

  • 1 为Nginx创建一个容器
    • 1.1 学习docker run
    • 1.2 通过docker run为Nginx创建并启动一个容器
  • 2 配置Nginx
    • 2.1 学习docker的bind mount技术
    • 2.2 在Nginx容器中找到想修改的文件所在的目录
      • 2.2.1 认识nginx.conf文件
      • 2.2.2 访问Nginx服务,默认返回index.html
    • 2.3 找到后,在主机创建对应的目录,为后续挂载做准备 [在主机的终端进行操作]
      • 2.3.1 创建目录
      • 2.3.2 拷贝文件
      • 2.3.3 在主机中修改Nginx的index.html
    • 2.4 删除就Ngingx容器,重启新Nginx容器
    • 2.5 新Nginx容器,新的index.html

1 为Nginx创建一个容器

  • 实际中,后端代码部署在远端容器中以向外提供后端服务。
  • 类似的,我们可以在本地为Nginx创建一个容器,并提供Nginx服务。

1.1 学习docker run

  • 一般情况,启动一个服务,需要先拉取该服务的镜像,然后为该镜像启动一个容器。这个可以用一条命令来实现:docker run
  • 通过docker --help查看如何使用docker命令:
    在这里插入图片描述
  • 进一步查看:docker run --help
    在这里插入图片描述

Options很多,一般掌握最基本的的,也就够用了。如果遇到不够用的情况,把诉求描述给gpt,让它帮忙写就好了,或者google一下。

1.2 通过docker run为Nginx创建并启动一个容器

  • macOS的shell中执行:
docker run \
--restart always \
--name Nginx \
-d \
-p 80:80 \
nginx

常用参数的详细解释:
(1)--restart always:是设定重启策略,意味着无论容器的退出状态码是什么,Docker都会自动重启这个容器。这样可以保证在Docker进程或主机重启后,容器将自动启动。
(2)--name Nginx:是设定这个新建的Docker容器的名字为"Nginx"。如果不设定,Docker将自动给它分配一个随机的名字。
(3)-d是让这个容器在后台运行,而不是在当前的shell里。
(4)-p 80:80是设定端口映射,将主机的80端口映射到容器的80端口。这样,我们可以通过主机的80端口访问到容器内运行的服务。
(5)nginx是这个新建的Docker容器所使用的镜像的名字。
在这里插入图片描述

  • 通过本地的Docker客户端(Portainer也可以)查看Nginx容器
    在这里插入图片描述
  • 已经可以使用Nginx容器提供的Nginx服务了:
    在这里插入图片描述

2 配置Nginx

不支持定制的软件,不是好软件:)

  • 思路:将Nginx容器中的配置文件拷贝到主机,修改后,再删除之前的Nginx容器,并以“绑定挂载卷”的方式重新启动新Nginx容器,就可以让容器读到更新后的配置文件。
  • 这里直接采用docker的bind mount技术来更新配置文件。

2.1 学习docker的bind mount技术

Docker有两个选项让容器在主机上存储文件,即使在容器停止后文件也能持久保存:volume和 bind mount。

  • bind mount的效果:docker run [省略其他option] -v /path/to/nginx/conf:/etc/nginx/conf.d nginx

将主机上的 /path/to/nginx/conf 目录挂载到 Nginx 容器的 /etc/nginx/conf.d 目录后,在主机的 /path/to/nginx/conf 目录中编辑 Nginx 的配置文件,容器内的 /etc/nginx/conf.d 目录会实时看到这些更改。

  • 因此,要先找到想修改的文件所在的目录。

2.2 在Nginx容器中找到想修改的文件所在的目录

那我们就是要在Nginx容器中通过命令行来交互。

  • 执行命令:docker exec -it Nginx /bin/bash

(1)docker exec:这是Docker的一个命令,用来在运行的容器中执行命令。
(2)-it:这是两个参数,i代表交互模式,t为该命令分配一个伪TTY(终端)
(3)命令含义:在名为Nginx的容器中以交互模式启动一个bash shell
在这里插入图片描述

  • 通过查找Nginx配置相关的资料,可以知道我们要关注:/etc/nginx目录
    在这里插入图片描述

2.2.1 认识nginx.conf文件

在这里插入图片描述

  • /etc/nginx/nginx.conf文件是Nginx的主配置文件。它用于存储和管理nginx服务器的配置信息。在这个文件中,咱可以配置如何处理进入服务器的请求,如何转发这些请求,还可以配置日志、缓存和其他的服务器参数等。
  • 这个文件的配置语法是基于指令和参数的,每行都是一个指令和它的参数。指令之间由分号分隔,而参数之间则由空格分隔。

(1)在Nginx容器中,这个配置文件通常会被映射到宿主机的某个文件,以便于在容器外部进行编辑和管理。【这正是我们要做的】
(2)需要注意的是,任何对这个文件的修改都需要重启Nginx服务才能生效。

  • 在Nginx配置中,include指令用于包含其他配置文件,可以使主配置文件保持清晰和简洁,同时也方便管理和维护。当Nginx启动或重启时,它会读取include指令指定的所有文件,并把这些文件的配置内容合并到主配置文件中。[include /etc/nginx/conf.d/*.conf]

因此,我们不仅要关注nginx.conf,还要关注conf.d目录

2.2.2 访问Nginx服务,默认返回index.html

  • 这个index.html在哪?/usr/share/nginx/html/index.html
    在这里插入图片描述

2.3 找到后,在主机创建对应的目录,为后续挂载做准备 [在主机的终端进行操作]

2.3.1 创建目录

  • mkdir -p ~/docker_mount/nginx/conf/conf.d
  • mkdir -p ~/docker_mount/nginx/html

2.3.2 拷贝文件

  • docker container cp Nginx:/etc/nginx/nginx.conf ~/docker_mount/nginx/conf
  • docker container cp Nginx:/etc/nginx/conf.d/default.conf ~/docker_mount/nginx/conf/conf.d/

(1)/etc/nginx/conf.d/目录下只有default.conf
(2)docker container cp 不支持*,即Nginx:/etc/nginx/conf.d/*是不对的

  • docker container cp Nginx:/usr/share/nginx/html/index.html ~/docker_mount/nginx/html

2.3.3 在主机中修改Nginx的index.html

  • 修改
    在这里插入图片描述
    在这里插入图片描述

2.4 删除就Ngingx容器,重启新Nginx容器

  • 删除:docker stop Nginx && docker rm Nginx
    在这里插入图片描述
  • 以“bind mount”方式重启Nginx容器
docker run \
--restart always \
--name Nginx \
-d \
-v /Users/forrest.../docker_mount/nginx/html:/usr/share/nginx/html \
-v /Users/forrest.../docker_mount/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/forrest.../docker_mount/nginx/conf/conf.d:/etc/nginx/conf.d \
-p 80:80 \
nginx

在这里插入图片描述

2.5 新Nginx容器,新的index.html

在这里插入图片描述

  • 之后直接在主机上修改配置,然后执行:docker stop Nginx && docker start Nginx

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

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

相关文章

光猫(无限路由器)插入可移动硬盘搭建简易版的NAS

1.场景分析 最近查询到了许多有关NAS的资料,用来替代百度云盘等确实有很多优势,尤其是具有不限速(速度看自己配置)、私密性好、一次投入后续只需要电费即可等优势。鉴于手上没有可以用的资源-cpu、机箱、内存等,查询到…

嵌入式软件面试之程序在存储器中的分布

Hi, 大家好,今天阿目分享的是一个嵌入式软件面试的常见问题,内存分布或者说程序在内存中的布局,我们写的程序是按照怎么的准则放在内存中的? 一般有操作系统的嵌入式设备,都会有一个Bootloader, 它负责在上电后初始化…

ubuntu18.04 TensorRT 部署 yolov5-7.0推理

文章目录 1、环境配置2、推理部分2.1、检测2.2、分类2.3、分割2.4、INT8 量化 1、环境配置 链接: TensorRT cuda环境安装 2、推理部分 下载yolov5对应版本的包 https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5 2.1、检测 1、源码模型下载 git clone -b v7.0 …

算法通关村第十六关—滑动窗口与堆结合(黄金)

滑动窗口与堆结合 堆与滑动窗口问题的结合 LeetCode239给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位,返回滑动窗口中的最大值。  对于最大值、K个最大这种场…

Multi-View-Information-Bottleneck

encoder p θ ( z 1 ∣ v 1 ) _θ(z_1|v_1) θ​(z1​∣v1​),D S K L _{SKL} SKL​ represents the symmetrized KL divergence. I ˆ ξ ( z 1 ; z 2 ) \^I_ξ(z_1; z_2) Iˆξ​(z1​;z2​) refers to the sample-based parametric mutual information estimatio…

原子类-入门介绍和分类说明、基本类型原子类

Atomic翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学 反应中是不可分割的。在我们这里Atomic是指一个操作是不可中断的。即使是在多个线程一起执 行的时候,一个操作一旦开始,就不会被其他线程干扰。 基本类型原子类 AtomicInteger:整…

Modelsim10.4安装

简介(了解,可跳过) modelsim是Mentor公司开发的优秀的HDL语言仿真软件。 它能提供友好的仿真环境,采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术,编译仿真速…

P5461 赦免战俘题解

题目 现有2n2n(n≤10) 名作弊者站成一个正方形方阵等候kkksc03的发落。kkksc03决定赦免一些作弊者。他将正方形矩阵均分为4个更小的正方形矩阵,每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免,剩下3个小矩阵中&…

【存储过程和存储函数】MySQL

存储过程和存储函数 一、实验目的 掌握通过SQL语句CREATE PROCEDURE创建存储过程的方法。 掌握使用SQL语句CALL调用存储过程的方法。 掌握使用SQL语句ALTER PROCEDURE修改存储过程的方法。 掌握使用SQL语句DROP PROCEDURE删除存储过程的方法。 掌握使用CREATE FUNCTION创建…

信息检索速通知识点

仅仅是我自己能想到的对这个分类的一个记忆。欢迎指正 首先,最重要的一点,什么是信息检索? 信息检索是从大规模无规则的数据中(主要是文档)中查询用户所需要的信息的过程。 然后,信息检索有哪几种索引呢&am…

机器人行业概况(2)

上篇已经介绍过关于机器人的定义以及分类,下面来看看机器人产业市场规模。 二、国内机器人产业市场规模 中国机器人产业在国家智能制造相关政策的引导下蓬勃发展。在新冠肺炎疫情防控期间,消毒、配送、测温、巡检等各类机器人的“火线上岗”&#xff0…

对写文章的想法

一些思考 思考初心现在错觉想说的话 最后 思考 在CSDN里面写文章已经快半年了啊,虽然更得不多,但每一篇都花费很多时间,写的时候能帮自己查漏补缺,这边找找资料补充一下,都能去拓展自己的知识面,让自己的文…

JDK8终将走进历史,Oracle宣布JDK继续免费

目录 前言Oracle 已免费提供 JDKOracle Java SE 产品最新动态 为什么业界中用JDK8那么多Java SE 8 公共更新结束总结 前言 今天想到上个月无意中听闻到的一句话:JDK8之后收费了,所以大家都用JDK8。当时只觉得这个话说得不对,但因为和说话的人…

基于Java SSM框架实现学生成绩管理系统项目【项目源码+论文说明】

基于java的SSM框架实现学生成绩管理系统演示 摘要 学生成绩是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而学生所在学院多采用半手工管理学生成绩的方式&#…

代码随想录——回溯

系列文章目录 代码随想录——回溯 文章目录 系列文章目录概述组合组合组合III电话号码的字母组合组合总和组合总和II 分割分割回文串** 复原ip地址 子集子集子集II 概述 回溯的本质就是递归遍历,但在完成某一条路之后会撤回到上一层,然后重新选择另一条…

V2022全栈培训笔记(WEB攻防49-WEB攻防-通用漏洞业务逻辑水平垂直越权访问控制脆弱验证)

第49天 WEB攻防-通用漏洞&业务逻辑&水平垂直越权&访问控制&脆弱验证 知识点: 1、水平越权同级用户权限共享 2、垂直越权-低高用户权限共享 3、访问控制-验证丢失&取消验证 4、脆弱验证-Cookie&Token&Jwt等 #前置知识: 1、…

Flask架构--路由和蓝图

学习视频:第二章:路由和蓝图 1 Flask查询路由的方式_哔哩哔哩_bilibili 参考:Flask框架之路由与蓝图的使用_flask 路由和蓝图-CSDN博客 1.路由的概念: 用于将http请求与特定的python函数相匹配。定义路由后,flask程…

虚拟政务大厅有什么好处,搭建虚拟政务大厅需要考虑哪些因素

引言: 在数字化时代,互联网技术推动了各行业发展,政务领域也不例外。虚拟政务大厅作为一种数字化解决方案,不仅改善了政务处理的效率和服务质量,还为政务处理带来了许多其他好处。 一、提高政务处理效率 1.虚拟政务大…

行业内参~移动广告行业大盘趋势-2023年12月

前言 2024年,移动广告的钱越来越难赚了。市场竞争激烈到前所未有的程度,小型企业和独立开发者在巨头的阴影下苦苦挣扎。随着广告成本的上升和点击率的下降,许多原本依赖广告收入的创业者和自由职业者开始感受到前所未有的压力。 &#x1f3…

七、Qt 信号和槽

在QT4以上的版本,在窗体上用可以通过选中控件,然后点击鼠标右键单击按钮,选择“转到槽”。可以自动创建信号和槽。 选择clicked(),并点击 ok Qt Creator会给头文件和代码文件自动添加 这个按钮的单击事件(信号和槽)。 …