运行环境: MAC
Docker 版本:
Docker version 17.12.0-ce, build c97c6d6
一启动 Nginx 服务器
启动 Nginx 服务器, 并进入模拟终端
docker run - p 8080 : 80--name nginx_web - it nginx / bin / bash
二了解 Nginx 镜像的配置文件位置
日志文件位置:/var/log/nginx
配置文件位置: /etc/nginx
资源存放的位置: /usr/share/nginx/html
上面的配置路径是我电脑上的虚拟 linux 中地址, 请各位读者, 也自己去看下自己的配置位置
三修改 Nginx 的默认首页, 测试是否可以运行
重要提示: 对于不想折腾的同学, 可以直接从第四步来运行
- /usr/share/nginx/html
- echo "<h1>Hello Docker</h1>" > index.html
到这里有的朋友, 可能会发现, 我访问 localhost:8080 端口, 第一次出现了 Nginx 的欢迎界面, 而第二次就出现了 404 提示
关于这个问题, 本文不展开详序, 如果不明白的, 可以参考:
docker 运行 nginx 为什么要使用 daemon off
docker 容器运行后退出, 怎么才能一直运行?
Docker run 命令的使用方法
Docker 执行 docker run 之后, 先在当前操作系统的基础上, 虚拟化了一个精简版的 linux(仅仅包含系统运行的最精简功能), 然后加载我们的 Nginx 镜像当 Nginx 镜像加载到我们的虚拟 Linux 环境中时, 相当于在系统里执行了一个脚本, 而这个脚本就是 Nginx
由于默认的 Nginx 是不作为守护进程运行的所以当 Docker 内监听到 80 端口的请求后, 完成之后, 就退出了 Nginx 的进程该容器内只有一个进程, 并且是非守护的, 执行完请求进程就销毁了那么这个容器也就没有存在的必要了, 所以 Docker 中这个服务也就停掉了这也就是我们执行 docker top 看不到当前运行的容器的原因
作为暂时解决 Nginx 只执行一次就退出的问题, 我们可以进入交互式终端, 执行 nginx & 让 nginx 作为守护进程后台运行
查看我们正在运行的容器
- roverliang$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
如果什么内容都没有, 说明当前没有正在运行的容器
查看已经运行结束的容器
- roverliang$ docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 5bff285f60b3 nginx "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago nginx_web
重新启动我们刚刚启动过的容器
docker start nginx_web
进入到我们的容器内部
- docker attach nginx_web
- echo "<h1>Hello Docker</h1>" > /usr/share/nginx/html/index.html
- nginx &
然后 使用快捷键 control + Q 退出当前的容器
之后我们在浏览器再次访问: http://localhost:8080/
折腾了这么久, 终于看到我们期望的的内容了
Hello Docker
四将前面 Nginx Demo 变成一个可以玩的 Demo
先创建我们本机需要映射的文件夹
mkdir - p docker_study / log docker_study / etc docker_study / html
注意: 在自己的家目录创建
复制我们 docker 中 nginx 的配置文件
docker cp 65bc23f952db: /etc/nginx / /Users/roverliang / docker_study / etc /
关闭掉我们的容器
docker stop nginx_web
删除掉我们的练习的 demo, 我们重新来构建一个可以用的
docker rm nginx_web
将 Nginx 镜像和我们本机的目录进行映射, 方便我们修改文件
docker run - p 8080 : 80--name nginx_web - v / Users / roverliang / docker_study / log / :/var/log / nginx - v / Users / roverliang / docker_study / etc / nginx.conf: /etc/nginx / nginx.conf - v / Users / roverliang / docker_study / html / :/usr/share / nginx / html - it - d nginx / bin / bash\
运行到这里, 我们可能还是会发现访问 http://localhost:8080/ 没有内容但是不要急, 解决问题的过程, 就是学习新东西的过程, 继续网上查资料, 参考如下:
Docker 运行 nginx
摘抄文中让我豁然开朗的一段:
我之前运行的时候, 一般都采用交互式:
-i 保证容器的 stdin 开启 - t 为容器生成一个 tty 终端, 在命令的最后加一个 / bin/bash 来保证可以交互但是实际上, nginx 并没有运行, 导致我以为容器的端口绑定不是持久化的
接下来我们需要关掉, 并删除我们的容器, 再按照如下的命令重启一个:
docker run - p 8080 : 80--name nginx_web - v / Users / roverliang / docker_study / log / :/var/log / nginx - v / Users / roverliang / docker_study / etc / nginx.conf: /etc/nginx / nginx.conf - v / Users / roverliang / docker_study / html / :/usr/share / nginx / html - d nginx
五修改 Nginx 配置, 解析一个网站
修改我们刚刚复制过来的 nginx 配置
- cd /Users/roverliang/docker_study/etc
- vim nginx.conf
在 Http 模块中添加如下配置:
- server
- {
- listen 80;
- server_name www.test_nginx.com;
- index index.html;
- root /usr/share/nginx/html;
- }
然后回到宿主机, 绑定 host 127.0.0.1 www.test_nginx.com
大功告成
来源: http://www.bubuko.com/infodetail-2491955.html