对于跑在docker里的nginx来说,docker就是一个虚拟机。它访问的,默认是docker里的路径。

假定统信下已安装好docker。

一、在docker中安装nginx

拉取官方的最新版本的镜像

docker pull nginx:latest

查看是否已安装了 nginx

docker images

二、创建并运行一个nginx实例

docker run --name nginx-test -p 8080:80 -d nginx

参数说明:

–name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将宿主机 8080 端口映射到docker容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。

这时候,访问宿主机的8080端口,即可看到效果。
在这里插入图片描述

三、挂载宿主机文件夹

请注意,在这里,niginx运行在docker容器中,并不是运行在宿主机中。每个docker容器,都可以看做是一个虚拟机。它有自己的文件系统,有自己的势力范围。有时,我们使用nginx作为WEB服务器,需要指向发布内容所在文件夹。发布内容不方便传到docker,这时候就需要挂载docker外部文件夹,也就是宿主机的文件夹。

方法如下:
1、创建宿主机文件夹

mkdir -p ~/data/docker/nginx2/conf #存放配置文件
mkdir -p ~/dist #存放web发布内容

2、拷贝nginx配置文件

#nginx-test是前面例子中运行的nginx实例的名字
docker cp nginx-test:/etc/nginx/nginx.conf ~/data/docker/nginx2/conf

注意当前目录不能处于~/data/docker/nginx2/conf,否则拷贝失败,说什么不能覆盖之类。

3、运行nginx并设置挂载目录

docker run --name nginx2 --privileged -it -p 8081:80 \ #宿主机的8080端口已经被上面的例子占用
-v ~/data/docker/nginx2/conf/nginx.conf:/etc/nginx/nginx.conf:ro \ #总配置文件
-v ~/data/docker/nginx2/conf/conf.d:/etc/nginx/conf.d:ro \ #子配置文件
-v ~/dist:/usr/share/nginx/html:rw \ #挂载发布内容文件夹
-v ~/data/docker/nginx2/logs:/var/log/nginx \ #日志
-d nginx 

注意其中的路径,不能为“./“或前面没有”/"等形式的相对路径,应该为“~/“或”/"开头的绝对路径,否则报字符非法错误。

docker run --name nginx-web-main --privileged -it -p 8800:80 \
-v /home/admin/gdhysthj/nginx/conf/web-main.conf:/etc/nginx/nginx.conf:ro \ #配置文件
-v /home/admin/gdhysthj/web-main:/usr/share/nginx/html:rw \ #挂载发布内容文件夹
-v /home/admin/gdhysthj/nginx/logs:/var/log/nginx \
-d nginx

docker --privileged=true 参数作用

大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。

参考文章:docker --privileged=true 参数作用

4、拷贝子配置文件
拷贝过来就好了,不需要做什么修改。本例子中,是先创建了一个nginx-test容器实例,为的就是可以从它这里拷贝配置文件。如果别的地方有现成的配置文件,直接上传到挂载目录(/data/docker/nginx2/conf/)当然也可以。

docker cp nginx-test:/etc/nginx/conf.d/default.conf  /data/docker/nginx2/conf/conf.d

conf/nginx.conf是总的配置文件,它通过底部一句:

include /etc/nginx/conf.d/*.conf; #/etc/nginx/conf.d,这个是docker里的路径。

来引入子配置文件。nginx.conf在前面已经拷贝了,现在拷贝子配置文件。这里面是否存在操作次序,不好说。

docker pull 下来的镜像都默认存在/var/lib/docker/文件夹下。但这个只是镜像,跟我们讨论的主题没有什么关系。nginx镜像相当于类,nginx实例运行于docker容器中。

【注意】注意修改网站配置,在本例中,应该修改 conf.d/下的。

5、测试
创建index.html。从别的地方拷贝现成的过来也可以。

#生成index.html
cd ~/dist
echo "hello world!" > index.html
#查看docker实例情况,获得容器ID
docker ps -a
##重启nginx实例
docker restart nginx实例ID

访问一下。大功告成。
在这里插入图片描述

参考文章:
Docker 安装 Nginx
docker中部署nginx镜像挂载文件夹和文件并解决出错

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐