Docker(第四部分)

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

自定义网络

是什么
案例

问题

5。Docker-compose容器编排

是什么?

Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排

可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件。

docker-compose。yml,写好多个容器之间的调用关系。然后,只要一个命令。就能

同时启动,关闭这些容器。

能干嘛?
去哪下

安装

卸载

核心概念

Compose使用的三个步骤

Compose常用命令
Compose编排微服务
相关推荐
小的~~4 分钟前
k8s使用本地docker私服启动自制的flink集群
docker·flink·kubernetes
pyliumy5 分钟前
rsync 全网备份
linux·运维·服务器
苹果醋326 分钟前
SpringCloud系列之一---搭建高可用的Eureka注册中心
运维·nginx
诚诚k32 分钟前
docker存储
运维·docker·容器
sorel_ferris34 分钟前
Ubuntu-24.04中Docker-Desktop无法启动
linux·ubuntu·docker
ggb199936 分钟前
【python的坑】vpn下,python request报错 check_hostname requires server_hostname
linux·运维·服务器
小O_好好学1 小时前
vi | vim基本使用
linux·编辑器·vim
-SGlow-1 小时前
Linux相关概念和重要知识点(4)(自举、vim)
linux·运维·vim
多多*1 小时前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
卑微的码蚁1 小时前
服务器相关问题
运维·服务器