#1 测试静态网站(单个容器)
(1)创建Dockerfile并使用该Dockerfile创建镜像。
(2)从该镜像中启动容器。启动时,将本地卷挂载到容器中(通过-v选项)。
(3)修改本地卷中的文件,访问容器来查看。
#2 构建并测试Web应用程序(多个容器)
# 示例一、接收URL参数,并以JSON返回 老路子:使用Dockerfile创建容器。启动一个容器,并使用-v挂载外部卷。访问容器来测试。
# 示例二、连接Redis服务,存储输入的URL参数 创建一个项目,项目中连接Redis服务,Host: db,Post: 6379,并将请求参数写入Redis中。
使用Dockerfile创建一个Redis镜像。从镜像启动容器。使用docker port命令查看端口,使用Redis的客户端工具进行测试。
将应用程序连接到Redis容器,实际上是「组网」,使二者能互相连接。共有三种方法:
使用Docker「内部网络」。不灵活,也不够强大。不推荐使用。
使用Docker「Networing」从Docker 1.9开始,使用docker networking命令。推荐使用的方法。
使用Docker「链接」。是一个抽象层,可以将具体容器链接到一起来进行通讯。在Docker 1.9之前版本推荐使用的方法。
推荐使用「Docker Networking」,而不是「Docker链接」的原因:
「Docker Networking」可以跨宿主机;
「Docker Networking」无需事先创建容器,也不必关心容器的运行顺序;
「Docker Networking」可以在无需更新连接的情况下,对停止、启动或重启容器。而「Docker链接」,则需要更新一些配置,或者重启相应的容器来维护Docker容器之间的链接。
# 内部网络
这属于Docker自身的网络栈。常见的就是把「容器的端口」映射到「宿主机的端口」。还有一种用法就是内部网络。
安装Docker时,会默认创建了docker0网口,它是一个虚拟网桥,连接容器和宿主机,分配私有IP地址,网段172.17.0.0/16,如果被占用,则会在172.16.0.0到172.31.0.0之间选择一个。每个容器都会在这个接口上分配一个IP地址。Docker会为每一个容器创建一个veth*的接口,这个接口一端连接到「容器内的eth0」,一端桥接到「宿主机的docker0」。这样Docker就创建了一个虚拟子网,连通的宿主机器和各个容器,这样它们之间就可以互相操作了。
追踪路由可以发现,流量从「容器内的eth0」到「veth*接口」,到了「docker0」。[……]