docker中部署nginx, 而后nginx中部署静态资源文件, 上网搜了下, 以为的搜到的文章讲的不是很清晰, 因此本身写一篇.html
注: Docker版本以下:前端
Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:11:19 2017 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:09:53 2017 OS/Arch: linux/amd64 Experimental: false
本人使用的是ubuntu18, 已经安装了docker, 以后要有nginx镜像, 我使用的nginx镜像是nginx:1.14linux
先后端分离, 前端单独部署在nginx中, 可是安装nginx, 看了教程, 感受要装不少东西, 步骤不少...因为服务器上装了docker, 因此咱们就用nginx容器了, 服务器上再也不手动安装nginx.nginx
用docker的卷,将nginx容器的目录挂载到host机器的本地文件中, 这样咱们只须要修改host中对应目录的文件便可, 方便管理.docker
List-1.1 使用docker volume create 卷名建立数据卷ubuntu
xx@xx-ubuntu:/opt/software/nginx/html$ docker volume create nginx xx@xx-ubuntu:/opt/software/nginx/html$ docker volume ls DRIVER VOLUME NAME local nginx
以下的List-1.2所示, 使用docker volume inspect nginx命令查看刚才建立的数据卷nginx, 能够看到这个数据卷对应到本地的/var/lib/docker/volumes/nginx/_data目录, 后面会去查看这个目录, 下面的内容中会涉及后端
List-1.2 浏览器
xx@xx-ubuntu:/opt/software/nginx/html$ docker volume inspect nginx [ { "CreatedAt": "2018-12-18T20:18:41+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/nginx/_data", "Name": "nginx", "Options": {}, "Scope": "local" } ]
执行以下List-2.1中的命令, 这里值得注意的是"-v nginx:/etc/nginx "这个参数, 这个的意思是将数据卷nginx挂载到容器的/etc/nginx目录bash
List-2.1 服务器
xx@xx-ubuntu:/opt/software/nginx/conf$ docker run -d -v nginx:/etc/nginx -p 80:80 --name nginx nginx:1.14
查看数据卷nginx对应的本地目录(根据List-1.2咱们得知数据卷nginx对应的本地目录), 以下List-2.2所示, 多出来不少东西, 这些文件都是nginx的. 咱们来查看nginx.conf这个文件, 如List2.3所示, 可知关键是/etc/nginx/conf.d目录下的.conf文件, 默认有个default.conf, 咱们拷贝default.conf, 重命名为hello.conf, 内容以下List-2.5所示
List-2.2 要用root去查看
root@xx-ubuntu:/var/lib/docker/volumes/nginx/_data# ll total 48 drwxr-xr-x 3 root root 4096 12月 18 20:18 ./ drwxr-xr-x 3 root root 4096 12月 18 20:18 ../ drwxr-xr-x 2 root root 4096 12月 18 20:21 conf.d/ -rw-r--r-- 1 root root 1007 11月 6 21:28 fastcgi_params -rw-r--r-- 1 root root 2837 11月 6 21:28 koi-utf -rw-r--r-- 1 root root 2223 11月 6 21:28 koi-win -rw-r--r-- 1 root root 5170 11月 6 21:28 mime.types lrwxrwxrwx 1 root root 22 11月 6 21:28 modules -> /usr/lib/nginx/modules -rw-r--r-- 1 root root 643 11月 6 21:28 nginx.conf -rw-r--r-- 1 root root 636 11月 6 21:28 scgi_params -rw-r--r-- 1 root root 664 11月 6 21:28 uwsgi_params -rw-r--r-- 1 root root 3610 11月 6 21:28 win-utf
List-2.3 用root用户查看
root@xx-ubuntu:/var/lib/docker/volumes/nginx/_data# more nginx.conf ... #包含/etc/nginx/conf.d目录下全部.conf结尾的文件 include /etc/nginx/conf.d/*.conf; }
List-2.4 用root用户去操做
root@xx-ubuntu:/var/lib/docker/volumes/nginx/_data/conf.d# ll total 16 drwxr-xr-x 2 root root 4096 12月 18 20:21 ./ drwxr-xr-x 3 root root 4096 12月 18 20:18 ../ -rw-r--r-- 1 root root 1093 11月 6 21:28 default.conf -rw-r--r-- 1 root root 1087 12月 18 20:21 hello.conf
List-2.5 其它没必要要的内容被我删除了
root@xx-ubuntu:/var/lib/docker/volumes/nginx/_data/conf.d# more hello.conf server { #listen的值修改成本身要的端口 listen 3002; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { #root的值修改成本身的就能够了,表示这个目录下有咱们要访问的静态资源 root /opt/html; index index.html index.htm; } }
上述的完成后, 咱们在本地目录下建个index.html, 以下List-2.6所示
List-2.6
xx@xx-ubuntu:/opt/software/nginx/html$ ll total 12 drwxr-xr-x 2 mjduan mjduan 4096 12月 18 20:24 ./ drwxr-xr-x 4 mjduan mjduan 4096 12月 18 20:22 ../ -rw-r--r-- 1 mjduan mjduan 171 12月 18 20:24 index.html
以后咱们删除以前建立的容器nginx, 再建立一个容器, 以下List-2.7所示:
List-2.7
xx@xx-ubuntu:/opt/software/nginx/conf$ docker rm nginx nginx xx@xx-ubuntu:/opt/software/nginx/conf$ docker run -d -v nginx:/etc/nginx -v /opt/software/nginx/html:/opt/html -p 3002:3002 -p 80:80 --name nginx nginx:1.14
说明: List-2.7中, "-v nginx:/etc/nginx"是将数据卷nginx挂载到容器的/etc/nginx目录, "-v /opt/software/nginx/html:/opt/html"是将本地的/opt/software/nginx/html目录挂载到容器的/opt/html目录, 因为咱们须要3002端口(List-2.5中设置的),因此须要映射出来.
以后浏览器中访问3002端口, 以下图2.1所示:
图2.1 看到的是List-2.6中index.html
到这里,基本就结束了,咱们要部署静态文件,只须要放在目录/opt/software/nginx/html下就能够了,咱们不须要在host机器上安装nginx及其依赖.