Docker创建一个Nginx服务器的方法步骤

 更新时间:2019年01月04日 14:43:42   作者:roverliang  
使用Dokcer可以很好的对镜像进行管理,创建和使用容器。这篇文章主要介绍了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

大功告成

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • docker-compose配置并部署redis服务的实现

    docker-compose配置并部署redis服务的实现

    本文主要介绍了docker-compose配置并部署redis服务的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Docker中的集群管理与应用方式

    Docker中的集群管理与应用方式

    这篇文章主要介绍了Docker中的集群管理与应用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • 基于jib-maven-plugin插件快速构建微服务docker镜像的方法

    基于jib-maven-plugin插件快速构建微服务docker镜像的方法

    这篇文章主要介绍了基于jib-maven-plugin快速构建微服务docker镜像的方法,对于 Java 程序来说使用 jib-maven-plugin 插件来构建镜像还是非常方便的,本文通过实例代码详细讲解,需要的朋友可以参考下
    2023-02-02
  • 如何下载docker日志到本地

    如何下载docker日志到本地

    这篇文章主要介绍了如何下载docker日志到本地问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • docker如何运行redis

    docker如何运行redis

    文章详细介绍了如何使用Docker下载、配置和启动Redis镜像,包括指定版本、创建挂载目录、修改配置文件(如启用持久化、设置密码等)以及启动容器的步骤
    2024-11-11
  • 如何解决docker容器启动失败

    如何解决docker容器启动失败

    在本片文章中小编给各位整理的是关于如何解决docker容器启动失败相关内容,有兴趣的朋友们可以参考下。
    2020-03-03
  • 如何下载docker镜像包

    如何下载docker镜像包

    这篇文章主要介绍了如何下载docker镜像包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 浅析SpringBoot打包上传到docker并实现多实例部署(IDEA版)

    浅析SpringBoot打包上传到docker并实现多实例部署(IDEA版)

    这篇文章主要介绍了SpringBoot打包上传到docker并实现多实例部署(IDEA版),本文通过图文并茂实例详解的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Docker多容器连接(以Tomcat+Mysql为例)

    Docker多容器连接(以Tomcat+Mysql为例)

    这篇文章主要介绍了Docker多容器连接(以Tomcat+Mysql为例),Docker提供了多个容器直接访问的方法,可以使多个容器直接通过网络端口进行访问
    2017-03-03
  • docker create命令的用法说明

    docker create命令的用法说明

    这篇文章主要介绍了docker create命令的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论