系列学习 docker 之第 6 篇 —— 了解挂载的概念,在 docker 里挂载 Nginx 目录(简单有效)

第三篇博客已经讲解了如何下载 Nginx:https://blog.csdn.net/BiandanLoveyou/article/details/116336906

因为笔记本使用 wifi 连接,IP 地址经常变动,就自己捣鼓着把 CentOS 的IP地址固定。如果你们的 CentOS7 的 IP 地址经常变动,可以参考我的博客设置静态IP地址:https://blog.csdn.net/BiandanLoveyou/article/details/116384534

这里说明一下,每一个 docker 容器,相当于一个完整的操作系统,比如我们进入到已下载的 Nginx 容器里:

步骤如下:

1、先启动 Nginx 容器(这里宿主机的端口号是 81,映射到 Nginx 容器的端口号是 80)

docker run -d -p 81:80 nginx

结果: 

浏览器访问地址:http://192.168.0.105:81/

 

2、查询 Nginx 容器的ID:

docker ps

结果:

3、进入到 Nginx 容器里:

 docker exec -it c552520e3c80 /bin/bash

结果:

4、进入到容器后,依次进入到目录:etc/nginx

cd etc/nginx/

然后使用 ls 命令罗列出目录包含的内容:

使用 vi 命令打开 nginx.conf

提示我们缺少 vi 命令。这里说一下,docker 容器相当于一个完整的操作系统,但是如果我们想要在每个 docker 容器里都搞一套完整操作系统,那是大可不必。因此我们讲解一个挂载的概念。

 

什么是挂载?

Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。

挂载:指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件,在 windows 下就可以理解为:添加到桌面快捷方式!

纠正一个误区,并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。总之,Linux 系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载。

 

OK,理解了挂载的概念,我们就这样设想:将 nginx 容器里的 nginx.conf 文件挂载到宿主机上某个位置,我们就可以直接操作宿主机的 nginx.conf 文件了。修改宿主机的 nginx.conf 文件,就会直接覆盖 nginx 容器里的 nginx.conf 文件了。其它的文件也是类似这个思想。

 

首先,我们要知道挂载 nginx 的哪些目录。一般来说,我们需要挂载 nginx 的 nginx.conf、default.conf、index.html 以及一些日志文件。

我们进入 nginx 的容器里查看:etc 目录下,是存放配置文件的,如: nginx.conf、default.conf。而 usr 目录是存放一些页面文件的,如 index.html。可以自行去看。这里不多说。

 

然后,我们先在宿主机上创建要挂载的目录,我们约定 Nginx 挂载在宿主机的 /data/nginx 目录上:

mkdir -p /data/nginx/{conf,conf.d,html,logs}

结果(宿主机上的 data 目录下创建 nginx 要挂载的目录):

这时候创建的都是空目录。我们使用 docker cp 命令,将刚才启动的 nginx 容器的相关配置文件复制到宿主机上。

不知道 docker cp 命令如何使用?查看这里:https://www.runoob.com/docker/docker-cp-command.html

1、复制 nginx.conf 文件:注意,这里的 957a81fb3aa3 是上面启动的 nginx 容器的ID,需要根据实际情况修改。

docker cp 957a81fb3aa3:/etc/nginx/nginx.conf /data/nginx/conf

这时候,打开 nginx.conf 文件可以看到 include 发现这里的具体配置在conf.d 目录下,而 conf.d 目录只有一个 default.conf 文件,因此还需要挂载 default.conf。

 

2、复制 default.conf 文件

docker cp 957a81fb3aa3:/etc/nginx/conf.d/default.conf /data/nginx/conf.d/

查看 default.conf 文件,发现 location 里使用到的页面,都是 /usr/share/nginx/html 目录下的,因此还需要挂载 html 目录,如果不挂载 html 目录,会引发 502 网关错误,排查了一天才知道!

 

3、在 /data/nginx/html 目录下,创建 index.html 文件,内容如下:(可以在 html 目录下,使用 vi index.html 命令创建,进入 i 模式,然后粘贴进来。)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Nginx 挂载</title>
</head>
<body>
    <h1>Welcome to nginx!如果你看到这个页面,说明 Nginx 挂载成功!</h1>
</body>
</html>

OK,接下来就是重头戏了。

我们先删除旧的 nginx 容器,使用命令 docker ps -a 找出 nginx 容器ID,使用 docker rm -f 容器ID 删除。

docker ps -a
docker rm -f 容器ID

然后,我们使用下面的命令,启动 nginx 容器:

docker run --name mynginx -d -p 80:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/logs:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html -d docker.io/nginx

命令说明:

-d:后台运行容器,并返回容器ID

-p:指定端口映射,格式为:主机(宿主)端口:容器端口。我们映射 80 端口,浏览器就无需输入端口号了。

-v:表示目录的挂载,我们这里挂载 nginx.conf 文件(这个是必须的),日志文件目录,前端页面目录。

结果:

验证:在浏览器地址输入:http://192.168.0.105/    说明,这里的 IP 地址是你的 CentOS 的IP地址,如果经常变动,可以查看我的博客设置静态的IP地址:https://blog.csdn.net/BiandanLoveyou/article/details/116384534

如果无法访问到,请查看你的防火墙。这里有防火墙的命令参考:https://blog.csdn.net/BiandanLoveyou/article/details/116399225

OK,Nginx 挂载就这样简单的搞定了!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值