目录
- 准备知识
- 准备工作
- Docker网路
- 运行
- --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就是用来隔离网络的。容器会分配一个独立模式,有四种模式:
- Bridge(默认):bridge模式是Docker默认的网络设置,此模式会为每一个容器 分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
- Host:不会创建独立的network namespace。Docker容器中的进程处于宿主机的网络环境中,相当于Docker容器和宿主机共同用一个network namespace,使用宿主机的网卡、IP和端口等信息。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
- None:没有网络,Docker不会和外界进行通讯。Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
- 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