zoukankan      html  css  js  c++  java
  • Docker 使用入门,创建一个Nginx服务器

    运行环境: 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 提示。**

    关于这个问题,本文不展开详序,如果不明白的,可以参考:

    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 看不到当前运行的容器的原因。

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

    大功告成

  • 相关阅读:
    UIActivityIndicatorView的详细使用
    iOS开发多线程篇—GCD的常见用法
    UIScrollView的属性总结
    关于UIView的autoresizingMask属性的研究
    Robot FrameWork 教程链接
    数据恢复基础知识
    数据恢复基础知识
    selenium webdriver 学习笔记(三)
    selenium webdriver 学习笔记(二)
    selenium webdriver 学习笔记(一)
  • 原文地址:https://www.cnblogs.com/roverliang/p/8431206.html
Copyright © 2011-2022 走看看