IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 使用docker时以挂载配置的方式配置nginx配置文件 -> 正文阅读

[系统运维]使用docker时以挂载配置的方式配置nginx配置文件

使用Docker获取nginx并挂载配置文件实现静态资源服务器的搭建

镜像获取

首先还是先pull到资源

docker pull nginx

回车后得到一行乱码就代表得到最新版的nginx镜像,乱码是镜像ID,打开docker桌面可视化工具,可以看到:在这里插入图片描述

因为这边是用的docker里面的镜像nginx,想配置它的配置文件其实有点麻烦,当然第一时间能想到的就是进入到容器里面然后修改里面的.conf文件,这需要用到vim等工具,我认为太麻烦了,通过挂载我们本地的配置文件可以更方便直观快速的进行配置。

配置文件的获取

你当然可以选择自己其他服务器上面的nginx文件来进行挂载,当然如果你没有的话,问题也不大。首先你需要自己开辟几个目录来设置与容器里面的目录对应。比如像我这样的:

在这里插入图片描述

  • 注意你刚创建的目录里面当然是出了文件夹什么都没有的,我的那些资源也是通过复制从容器中得到的,一开始只需要对自己的需求做好相应的文件目录就行了

虽然我这边用的是Mac操作系统,但是对于这些操作其实对于什么操作系统都一样的,不会因为OS不同导致操作的不互通。

然后先跑一个临时的容器起来,从里面获取配置资源。

docker run --name nginx-temp -p 1080:80 -d nginx
  • -p: 将容器中的80端口映射到我本地的1080端口,这个看个人喜好了。

接下来就是复制资源了:

docker cp nginx-temp:/etc/nginx/nginx.conf ~/docker/nginx
docker cp nginx-temp:/etc/nginx/conf.d ~/docker/nginx/conf
docker cp nginx-temp:/usr/share/nginx/html ~/docker/nginx/www
docker cp nginx-temp:/var/log/nginx ~/docker/nginx/logs

前面的地址是容器中的地址,后面的是要将那个文件夹放在哪个文件夹下,使用本地路径或者使用绝对路径或者相对路径都可以。值得一提:Mac上获得绝对路径的操作键是command+option+C

这时候本地目录下就应该获得完整的资源了。

挂载配置文件

并不用急着去配置文件,因为一旦挂载上,我们在本地做的操作都会映射到容器内:

docker run \
--name nginx \
-p 1080:80 \
-v ~/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v ~/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v ~/docker/nginx/www/html:/usr/share/nginx/html \
-v ~/docker/nginx/logs:/var/log \
-d \
--privileged=true nginx

#我在ubuntu下的挂载方式
docker run \
--name nginx \
-p 1080:80 \
-v /home/lighthouse/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/lighthouse/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/lighthouse/docker/nginx/www/html:/usr/share/nginx/html \
-v /home/lighthouse/docker/nginx/logs:/var/log \
-d \
--privileged=true nginx

这里有个坑就是需要提前把目录挂载出去,不然访问一直都是404…

首先一点,需要保证存放静态资源的这个路径,在nginx镜像里面是确实存在的,并且映射到宿主机对应的文件夹上。

比如说在镜像里面,所有的静态资源都在**/usr/share/nginx/html** 这个地方,我们在本地的**~/docker/nginx/www/html** 设置了挂载,那么我们在本地存入了任何资源,在镜像里面都会有一份对应的资源存在。

修改配置文件

不同于windows上面本地配置文件,这边复制出来的资源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;
    
}

看最后一行,它还包含了conf.d文件下所有conf文件,这就是为什么之前还要特意整一个conf.d文件夹的原因,打开文件夹可以看到一个default.conf文件,在这里面配置我需要的url映射功能。

server {
    listen       80;
    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;
    }
   ########################################################################
   #location /img/ {
	 #       alias  /usr/share/nginx/html/static/images/;
   #         #alias  /Users/weizhile/docker/nginx/www/html/static/images/;
	 #       autoindex  on;
   # }
	 ########################################################################
    #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;
    }

我框出来的就是我的需求,访问localhost:1080/img/ 时可以遍历容器中所有静态图片资源:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lWHapzWE-1665577478866)(img/WX20221001-125757@2x.png)]

我使用的是alias,在nginx中root和alias主要区别就在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到容器文件上面。alias是一个目录别名的定义,root是uri的上层目录的定义。

比如说我的例子中

location /img/ {
	        alias  /usr/share/nginx/html/static/images/;
	        autoindex  on;
}

如果要使用root的话,可以这样子更改:

location /images/ {
	        root  /usr/share/nginx/html/static;
	        autoindex  on;
}

主要注意一点:配置alias时,结尾一定要用 / ,否则会找不到文件,并且uri不要和具体路径上的文件夹重名。

测试

接下来进入到容器里面进行测试

首先进入容器内部

docker exec -it nginx /bin/bash

在这里插入图片描述

可以看到有这些资源,因为static我之前已经建立好了,这次就打算在挂载好的本地/html目录下创建一个新的test文件夹,看能否成功

在这里插入图片描述

在这里插入图片描述

可以看到是成功了。

然后尝试在本地加入新的资源test.jpg
在这里插入图片描述

在这里插入图片描述

镜像中查看已经看到文件了。

在这里插入图片描述

在location/img下可以正常得到test.jpg的资源。

  • 当然如果你需要在别的地方配置本地资源目录的话,也没问题,在挂载的时候设置好就行了。

到现在为止,挂载配置就算是完成了。

2022/10/10

使用腾讯云,ubuntu系统下挂载完成 仅耗时10分钟,十分开心。

🤪

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 13:11:55  更:2022-10-17 13:15:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 6:28:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码