Docker 使用入门,建立一个Nginx服务器

运行环境: MAChtml

Docker 版本: Docker version 17.12.0-ce, build c97c6d6linux

1、启动Nginx 服务器

启动Nginx 服务器,并进入模拟终端nginx

docker run -p 8080:80 --name nginx_web -it  nginx /bin/bash

2、了解Nginx 镜像的配置文件位置

日志文件位置:/var/log/nginx
配置文件位置: /etc/nginx
资源存放的位置: /usr/share/nginx/html



上面的配置路径是我电脑上的虚拟linux中地址,请各位读者,也本身去看下本身的配置位置web

3、修改Nginx 的默认首页,测试是否能够运行

重要提示: 对于不想折腾的同窗,能够直接从第四步来运行docker

/usr/share/nginx/html

echo "<h1>Hello Docker</h1>" > index.html



到这里有的朋友,可能会发现,我访问localhost:8080 端口,第一次出现了Nginx 的欢迎界面,而第二次就出现了404 提示。vim

关于这个问题,本文不展开详序,若是不明白的,能够参考:segmentfault

  1. docker运行nginx为何要使用 daemon off
  2. docker容器运行后退出,怎么才能一直运行?
  3. Docker run 命令的使用方法

Docker 执行 docker run 以后,先在当前操做系统的基础上,虚拟化了一个精简版的linux(仅仅包含系统运行的最精简功能),而后加载咱们的Nginx镜像。当Nginx镜像加载到咱们的虚拟Linux环境中时,至关于在系统里执行了一个脚本,而这个脚本就是Nginx。浏览器

因为默认的Nginx 是不做为守护进程运行的。因此当Docker内监听到80端口的请求后,完成以后,就退出了Nginx的进程。该容器内只有一个进程,而且是非守护的,执行完请求进程就销毁了。那么这个容器也就没有存在的必要了,因此Docker 中这个服务也就停掉了。这也就是咱们执行 docker top 看不到当前运行的容器的缘由。bash

做为暂时解决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

4、将前面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

5、修改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

大功告成

相关文章
相关标签/搜索