zoukankan      html  css  js  c++  java
  • 【Docker-4】-Docker启动nginx

    目录

    1. 准备知识
    2. 准备工作
    3. Docker网路
    4. 运行
    5. --help

    一、准备知识

    Docker 运行Nginx。Nginx是一个web服务器,需要持久运行

    前台挂起或后台运行:前台可以通过ctrl+C关闭进程,进程关闭,镜像也会关闭,所以要选择后台运行

    进入容器内部:看看什么情况

    二、准备工作

    1、安装nginx

    从国内https://hub.daocloud.io下载安装

    docker pull daocloud.io/library/nginx

    参看是否安装成功:

    2、运行:docker run daocloud.io/library/nginx

    发现啥都没有出现,其实已经运行了,这种方式是前台运行的情况。

    3.1、再打开一个窗口,查看运行的情况:

    status是up,表示nginx在运行,

    3.2 docker stop 35129

    关闭ID为35129开头的进程。

    4、运行docker run -d daocloud.io/library/nginx

    这个是后台运行的方式

    5、进入容器的内部(调试,看日志等)docker exec

    5.1 获取帮助:docker exec --help

    Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

    比较常用的-i以交互模式运行容器,通常与 -t 同时使用; -t分配一个伪终端,多个option可以写道一起,比如下面的命令:

    5.2 docker exec -it 439b7119631a bash

    进入439b7119631a ,即是4步开启的nginx所在的容器。

    5.3 ls pwd

    和Linux一样,查看文件和打印当前工作目录

    5.3 which nginx

    查看路径:

    5.4 exit

    退回原来的界面

    三、Docker网路

    3.1 网络类型:

    隔离,Linux使用namespace用于文件隔离 pid namespace隔离进程,network namespace就是用来隔离网络的。容器会分配一个独立模式,有四种模式:

    1. Bridge(默认):bridge模式是Docker默认的网络设置,此模式会为每一个容器 分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
    2. Host:不会创建独立的network namespace。Docker容器中的进程处于宿主机的网络环境中,相当于Docker容器和宿主机共同用一个network namespace,使用宿主机的网卡、IP和端口等信息。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
    3. None:没有网络,Docker不会和外界进行通讯。Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
    4. Container:Container模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

    3.2 端口映射:

    Host模式:相当于和主机共享接口,不需要做映射。

    Bridge模式:主机的端口到网桥,网桥映射到桥接模式的虚拟网口

    四、运行

    docker run -d -p 8080:80 daocloud.io/library/nginx

    -p:前面8080是主机的端口,容器的端口是80,

    netstat -na | grep 8080

    这条命令在windows下的docker不能映射出来,也不能从网页访问(具体实现方法见文末附件),临时从Vmware的虚拟机,在Linux上面安装好docker后,进入root权限,执行上述步骤,发现能成功映射,如下图所示:

    再网址上输入:localhost:8080,能成功进入nginx,表明已经运行成功,如下图所示:

    docker run -d -P daocloud.io/library/nginx

    注意这里使用大写的P,表示使用随机端口取映射,操作如下图所示:

    目前启动的即使随机端口:

    五、Docker Debug tips

    1、Docker 起不来,怎么办?

    ---$docker run –v

    2、看log日志

    ---$docker logs [container_id]

    3、Inspect获取容器/镜像的元数据

    $docker inspect [container_id]

    4、在Docker实例中执行shell命令

    $docker exec -it [container_id] bash

    附件:Window下无法对docker容器进行端口映射

    1、问题原因

      docker是运行在Linux上,我们在Windows系统中运行docker,实际上是先在Windows下先安装了一个Linux环境,然后在这个环境中运行的docker。所以,访问服务中使用的localhost指的是这个Linux环境的地址,而不是我们的Windows。

    2、解决方法:

    QuickStart终端 执行docker-machine ip default,找到Window系统下的Linux环境的地址,如下图:

    本机浏览器用 上图返回的地址+端口号访问服务192.168.99.100:8080

       

  • 相关阅读:
    一些鲜为人知的编程真相
    一些鲜为人知的编程真相
    Ruby 1.9不会杀死Python
    Boost.Asio和ACE之间关于Socket编程的比较
    Effective C++第17条:要在单独的语句中使用智能指针来存储由new创建的对象
    Ruby 1.9不会杀死Python
    Boost智能指针——weak_ptr
    对象生死劫 - 构造函数和析构函数的异常
    Protocol Buffers:Google 的数据交换格式
    根据出生日期计算年龄
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/12733336.html
Copyright © 2011-2022 走看看