系列学习 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 挂载就这样简单的搞定了!

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker部署NGINX挂载目录,你可以按照以下步骤操作: 1. 首先,创建一个用于存储NGINX配置文件和静态文件的目录。假设你创建了一个名为`nginx_data`的目录。 2. 创建一个名为`nginx.conf`的NGINX配置文件,并将其放置在`nginx_data`目录。你可以根据你的需求自定义这个配置文件。 3. 将你的静态文件放置在`nginx_data`目录,例如将HTML、CSS、JavaScript文件等放置在一个名为`static`的子目录。 4. 现在,创建一个Dockerfile来构建NGINX镜像。在Dockerfile,你需要指定NGINX基础镜像、复制`nginx.conf`到相应位置以及挂载`nginx_data`目录。 ```Dockerfile # 使用NGINX基础镜像 FROM nginx # 复制自定义的NGINX配置文件到容器 COPY nginx.conf /etc/nginx/nginx.conf # 挂载目录 VOLUME /path/to/nginx_data:/usr/share/nginx/html # 暴露NGINX默认端口(可选) EXPOSE 80 ``` 请将上述代码的`/path/to/nginx_data`替换为实际的`nginx_data`目录的路径。 5. 使用该Dockerfile构建NGINX镜像。打开终端,进入到包含Dockerfile的目录,然后执行以下命令: ```bash docker build -t mynginx . ``` 这将使用`mynginx`作为镜像名称构建NGINX镜像。请确保在运行此命令之前已经安装了Docker。 6. 构建镜像后,你可以使用以下命令运行NGINX容器并挂载`nginx_data`目录: ```bash docker run -d -p 80:80 -v /path/to/nginx_data:/usr/share/nginx/html --name mynginx-container mynginx ``` 这将在端口80上运行NGINX容器,并将主机上的`nginx_data`目录挂载到容器的`/usr/share/nginx/html`目录。请将上述命令的`/path/to/nginx_data`替换为实际的`nginx_data`目录的路径。 现在,你已经成功部署了一个挂载目录NGINX容器。你可以通过访问`http://localhost`来查看NGINX服务器是否正常工作,并通过修改`nginx_data`目录的文件来更新NGINX配置和静态文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值