【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

   

posted @ 2020-04-19 20:33  忆凡人生  阅读(4842)  评论(0编辑  收藏  举报