4.网络与compose
7.网络
7.1.介绍
容器间的互联和通信以及端口映射
容器lP变动时候可以通过服务名直接网络通信而不受到影响
docker启动后,会默认创建三种网络模式bridge、host、none
7.2.常用命令
docker network ls:查看网络
docker network inspect 网络模式名字:查看网络源数据
docker network rm 网络模式名字:删除网络
docker network create 自定义网络名字:创建自定义网络
7.3.网络模式
docker容器内部的ip是有可能会发生改变的
7.3.1.bridge
虚拟网桥,默认为该模式。 为每一个容器分配、设置IP等,并将容器连接到一个docker0
Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
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……代表网卡一,网卡二,网卡三……,lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址
3.网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。
- 整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);
- 每个容器实例内部也有一块网卡,每个接口叫eth0;
- docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。
通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。
7.3.2.host
容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。
容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。
使用命令启动时不能添加端口映射,否则会报一个警告
错误
docker run -d -p 8083:8080 --network host xxx
正确
docker run -d --network host xxx
如果需要访问这个容器,就跟在主机上装了这个容器一样访问即可
7.3.3.none
禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)
容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,IP等。
在none模式下,并不为Docker容器进行任何网络配置。
也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo
需要我们自己为Docker容器添加网卡、配置IP等。
7.3.4.container
新创建的容器不会创建自己的网卡和配置自己的lP,而是和一个指定的容器共享IP、端口范围等。
新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
当共享的那一台容器挂机之后,这台容器也不会有网卡和ip了
7.3.5.自定义网络
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
自定义桥接网络,自定义网络默认使用的是桥接网络bridge
实现服务名可以互相ping通
①新建自定义网络
docker network create cc
②新建容器
新建容器加入新建的自定义网络
docker run -d -p 8081:8080 --network cc --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network cc --name tomcat82 billygoo/tomcat8-jdk8
③测试
8.compose
8.1.介绍
Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。
Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。
服务:一个个应用容器实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器
工程:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
8.2.常用命令
docker-compose -h:查看帮助
docker-compose up:启动所有docker-compose服务
docker-compose exec yml里面的服务id :进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps:展示当前docker-compose编排过的运行的所有容器
docker-compose top:展示当前docker-compose编排过的容器进程
docker-compose logs yml里面的服务id:查看容器输出日志
docker-compose restart:重启服务
docker-compose start:启动服务
docker-compose stop:停止服务
docker-compose up -d :启动所有docker-compose服务并后台运行
docker-compose down:停止并删除容器、网络、卷、镜像。
docker-compose config :检查配置
docker-compose config -q :检查配置,有问题才有输出
8.3.使用步骤
1.编写Dockerfile定义各个微服务应用并构建出对应的镜像文件使用docker-compose.yml
2.定义一个完整业务单元,安排好整体应用中的各个容器服务。最后,执行docker-compose up命令
3.来启动并运行整个应用程序,完成一键部署上线
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义