目录
1. docker网络模式
2. 连接容器的三种方法
3. Docker Networking
3.1 创建网络
3.2 查看宿主机中创建的网络
3.3 删除网络
3.4 如何使用网络
4.搭建Nginx
1.准备工作
1.1 拉取镜像
编辑1.2 在宿主机中创建挂载目录
2.准备2个tomcat 容器集群
3.准备 Nginx配置
3.1启动Nginx容器
编辑4.测试访问是否通过
5. 容器之间的互相通信(ping)
5.1 两个容器在同一网段
5.1.1 首先创建一个网段叫mynet
编辑
5.1.2 在镜像images中的centos -7中创建两个同net的容器c1 和 c2,并且查看
编辑
5.1.3 c1 ping c2
编辑5.2
5.1.4 c2 ping c1
5.2 两个容器在不同网段
5.2.1 首先使用bridge(与c1和c2网段不同)创建一个c3容器,并且查看
5.2.2 然后使用c1pingc3,可想而知是不行的,因为不是属于同一个网段,那么就会出些这行提示
5.2.3 如果将c3加到mynet中就可以通过c1 ping c3了
docker安装成功后,会自动创建三个网络,可以通过如下的方式查看:
lisen@ubuntu:~$ sudo docker network ls
[sudo] password for lisen:
NETWORK ID NAME DRIVER SCOPE
8994fe397802 bridge bridge local
436da757b62d host host local
1b2be829b666 none null local
lisen@ubuntu:~$
在运行容器时可以通过--net参数指定网络模式,例如:
host模式: --net=host 容器不会虚拟自己的网卡,使用宿主机的ip和端口
none模式: --net=none 该模式等同于关闭容器的网络功能,一般在不需要网络的批处理任务中才使用
bridge模式: --net=bridge 默认值,如果指定--net参数,则docker就会采用这种模式,这种模式也是最强大灵活,使用的最广的网络模式。
Docker每次创建容器都会同时创建一组互联的网络接口,你可以理解为一根管道的两端, 这组接口一端作为容器的eth0接口,另一端命名类似于veth966865c@if100这样的名字,作为宿主机的一个端口。可以将veth接口的理解为虚拟网线的一端,这个虚拟网线一端插在名为docker0的网桥上,另一端插到容器中。通过这种方式Docker创建了一个虚拟子网,这个虚拟子网被宿主机和所有的Docker容器共享。
注: 可以安装bridge-utils工具查看网桥信息
如: yum install bridge-utils
查看网桥信息: brctl show
docker的最佳实践建议为每个服务创建单独的docker容器,比例:db,redis,应用服务等等,那么不同的服务需要连接以便于作为整体为客服提供服务,例如应用服务需要连接db,redis等。常见的容器连接方法有三种:
Docker的内部网络
Docker1.9之后,可以使用Docker Networking
Docker 链接(Docker link)
1)这三种方式如何选择呢?
Docker的内部网络,这种方式不灵活,在重启容器需要重新配置,所以不推荐使用这种方式;如果使用Docker1.9之前的版本,则应该选择Docker link的方式; 如果使用docker1.9及更高的版本,则推荐使用Docker Networking,这种方式最灵活,功能也是最强大的。
2)Docker link和Docker Networking之间有什么区别呢?
Docker Networking可以连接不同的宿主机上的容器的
Docker Networking可以在不更新连接的情况下,停止,启动,或重启容器
Docker Networking不必事先创建网络,也不关心容器的启动顺序
3)也就是说只要用的docker是1.9版本之后,就应该使用Docker Networking咯?
恭喜你,答对了。
因为我们肯定会使用docker1.9之后的版本(现在docker已到19.04版本甚至更高版本了),所以我们只讲Docker Networking方式
容器之间连接用网络创建,这个网络被称为Docker Networking,是Docker1.9版本之后的新特性。用户可以通过Docker Networking创建自己的网络,容器可以通过这个网络进行通信。
创建一个新的网络可以使用如下的命令:
sudo docker network create app
可以使用如下的方式来查看网络的详细信息
sudo docker network inspect app
sudo docker network ls
sudo docker network rm app
1)启动镜像时指定--net参数
sudo docker run -it --name test --net=app imagename
2)也可以将运行中的容器加入网络
sudo docker network connect app test
app 需要加入的网络名
test 需要加入到网络的容器名
创建好容器后进行测试,测试是否可以通讯 下载一个contos镜像测试
docker pull centos:7
创建两个容器 看是否可以 ping 通
docker run -itd --name ubd centos:7
删除所有 容器
mkdir -p /data/text/nginx/{conf,html,logs}
mkdir -p /data/text/tomcat/{webapps/ROOT,conf,logs}
目录结构
我们在 webapps/ROOT中创建index.html
Nginx+tomcat集群
Nginx+tomcat集群部署示例
docker run -d --name tomcat1 -v /data/text/tomcat/webapps:/usr/local/tomcat/webapps tomcat:9
docker run -d --name tomcat2 -v /data/text/tomcat/webapps:/usr/local/tomcat/webapps tomcat:9
容器的IP可以通过 docker inspect tomcat1 进行查看
修改nginx 配置文件
docker run -d -p 80:80 \
--name nginx -v /data/text/nginx/html/:/usr/share/nginx/html \
-v /data/text/nginx/conf/nginx.conf/:/etc/nginx/nginx.conf \
-v /data/text/nginx/logs/:/var/log/nginx nginx
通过宿主机ip 进行访问
注:c1pingc2,与c1pingc3对比