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

大功告成

原文地址:https://www.cnblogs.com/roverliang/p/8431206.html

时间: 2024-10-16 22:39:11

Docker 使用入门,创建一个Nginx服务器的相关文章

python网络编程之 创建一个socketserverTCP服务器

#encoding=utf-8#创建一个socketserverTCP服务器#高级模块,简化客户和服务器的实现from SocketServer import (TCPServer as TCP,StreamRequestHandler as SRH)from time import ctime host = ''port = 21567addr = (host,port) #从 SocketServer 的 StreamRequestHandler 类中派生出一个子类class MyReque

Docker实战之创建一个tomcat容器

一.Docker与虚拟机的区别 二.Docker学习步骤 2.1:安装宿主操作系统 在VMVare中安装了Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64) 64位操作系统 建议内核在 3.8 以上,执行uname –r 查看内核如下图所示 2.2:更新系统 Ubuntu在安装的过程中没有指定root用户密码的操作,所以我们需要给root用户一个密码 命令如下 sudo passwd 系统会提示Enter New UNIX OR LINU

Missian指南三:创建一个Missian服务器(使用spring)

在使用Missian时,spring是可选的,但是作者本人强烈推荐和Spring配合使用.Spring是一个伟大的项目,并且它不会对程序在运行时的效率带来任何损耗. Missian在服务器端依赖与Mina,Missian只是提供一个Codec(协议编码解码,兼容TCP和HTTP)和一个Handler(调用Hessian序列化机制来反序列化数据.使用BeanLocator来定位这次调用的Bean).熟悉Mina的朋友会很清楚Codec和Handler的概念:不熟悉的朋友也没关系,按照这个教程一样可

Docker实例:创建一个点到点连接

默认情况下,Docker 会将所有容器连接到由 docker0 提供的虚拟子网中. 用户有时候需要两个容器之间可以直连通信,而不用通过主机网桥进行桥接. 解决办法很简单:创建一对 peer 接口,分别放到两个容器中,配置成点到点链路类型即可. 首先启动 2 个容器: $ sudo docker run -i -t --rm --net=none base /bin/bash [email protected]:/# $ sudo docker run -i -t --rm --net=none

如何在Kubernetes里创建一个Nginx应用

使用命令行kubectl run --image=nginx nginx-app --port=80 创建一个名为nginx-app的应用 结果: deployment.apps/nginx-app created 使用命令行kubectl get pods查看创建结果,状态已经为running: 使用命令行kubectl describe pods查看pod明细: 把pod id记下来: nginx-app-f75d46bd9-q6c76 使用该pod id可以执行一些命令: kubectl

创建一个简单服务器用到的基本函数

一,socket()头文件:#include <sys/socket.h>函数原型:int socket(int domain, int type, int protocol);作用:创建套接字. 参数domain:指定使用何种的地址类型.默认AF_INET.eg: AF_INET IPv4网络通信AF_INET6 IPv6网络通信AF_PACKET 链路层通信AF_UNIX, AF_LOCAL 本地通信 参数type:套接字类型.默认SOCK_STREAM.eg:1.SOCK_STREAM

【webGL】threejs入门 ---创建一个简单立方体

开发环境 Three.js是一个JavaScript库,所以,你可以使用平时开发JavaScript应用的环境开发Three.js应用.如果你没什么偏好的话,我会推荐Komodo IDE. 调试建议使用Chrome或者Firefox浏览器.如果你使用的是Firefox,那么Firebug会是你必不可少的插件:如果你使用的是Chrome,那么直接使用控制台调试即可.这些和JavaScript的调试是相同的,因此本书不作进一步展开. 下载 首先,我们需要在Github下载Three.js的代码. 在

python web编程 创建一个web服务器

这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的 基础知识 要建立一个Web 服务,一个基本的服务器和一个“处理器”是必备的. 基础的(Web)服务器是一个必备的模具.它的角色是在客户端和服务器端完成必要HTTP 交互.在BaseHTTPServer 模块中你可以找到一个名叫HTTPServer 的服务器基本类. 处理器是一些处理主要“Web 服务”的简单软件.它们处理客户端的请求,并返回适当的文件,静

DockerFile创建一个nginx容器的全过程

首先,随便建立一个文件夹,比如我先# mkdir sample,然后我在这个sample里建立一个Dockerfile,内容如下: FROM ubuntu:14.04 MAINTAINER Chris Chan "[email protected]" ENV REFRESHED_AT 2016-12-05 RUN apt-get -y update && apt-get install -y nginx RUN mkdir -p /var/www/html/websit