Docker微服务实战
通过IDEA新建一个普通微服务模块
把包放到linux机器里
pwd
通过dockerfile发布微服务部署到docker容器
dockerfile的内容
防火墙
Docker网络
网络主机
是什么?
网桥virbr0
常用基本命令
能干嘛
网络模式
最后都和u3一样了
结论:docker容器内部的ip是有可能发生变化的,没有人用分给用的人了
Docker平台架构图解
整体说明:
从其架构和运行流程来看,Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。
Docker运行的基本流程为:
1,用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。
2,Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client请求。
3,Docker Engine 执行Docker内部的一系列工作,每一项工作都是以一个Job的形式存在。
4,Job的运行过程中,当需要容器镜像时,通过网络管理驱动Netowrk driver创建并配置Docker容器网络环境。
6,当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Execdriver来完成。
7,Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。
docker network 之bridge
案例说明:
bridge
是什么?
Docker默认会创建一个docker0网桥(其上有一个docker0内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
#查看bridge网络的详细信息。并通过grep获取名称项。
docker network inspect bridge | grep name
ifconfig
说明:
没有ipv4,docker0是各个container的网关。
1.Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
2.docker run 的时候,没有指定network的话默认使用的网桥模式就是bridge。使用的就是docker0.
在宿主机ifconfig,就可以看到docker0和自己create的network(后面讲)eth0,eth1,eth2,代表网卡1,网卡2,网卡3.lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址。
3网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。
3.1整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);
3.2每个容器实例内部也有一块网卡,每个接口叫eth0;
3.3docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一配对。
通过上述所述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。
代码
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
docker ps
ip addr
host
是什么?
直接使用宿主机的IP地址与外界进行通信,不再需要额外进行NAT转换
案例
说明:容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。
docker run -d -p 8083:8080 --network host --nmae tomcat83 billygoo/tomcat8-jdk8
正确:docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
无之前的配对显示了,看容器实例内部
docker exec
没有设置-p的端口映射了,如何访问启动的tomcat83??
用的是宿主机的
http://宿主机IP:8080/
在CentOS里面用默认的火狐浏览器访问容器内的tomcat83看到访问成功。因为此时容器的IP借用主机的,所以容器共享主机网络IP。这样的好处是外部主机与容器可以直接通信。
none
是什么?:禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)
在none模式下,并不为Docker容器进行任何网络配置。
也就是说,这个Docker容器没有网卡,IP,路由等信息,只有一个lo
需要我们自己为Docker容器添加网卡,配置IP等。
案例:
docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8
container网络模式:
新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口范围等。同样,两个容器除了网络方面,其他的如文件系统。进程列表等还是隔离的。
docker run -d -p 8085:8080
--name tomcat85 billygoo/tomcat8-jdk8
docker run -d -p 8086:8080 --network container:tomcat85 --name tomcat86 billygoo/tomcat8-jdk8
运行结果:
Alpine Linux
自定义网络
过时的link
是什么
案例
问题
5。Docker-compose容器编排
是什么?
Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排
可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件。
docker-compose。yml,写好多个容器之间的调用关系。然后,只要一个命令。就能
同时启动,关闭这些容器。
能干嘛?
去哪下
安装
卸载