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,成对匹配。

  1. 整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);
  2. 每个容器实例内部也有一块网卡,每个接口叫eth0;
  3. docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。

通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。

image-20230531100952009

7.3.2.host

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。

容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口

image-20230531101035519

使用命令启动时不能添加端口映射,否则会报一个警告
错误
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、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

image-20230531100805132

当共享的那一台容器挂机之后,这台容器也不会有网卡和ip了

7.3.5.自定义网络

自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

自定义桥接网络,自定义网络默认使用的是桥接网络bridge

实现服务名可以互相ping通

①新建自定义网络

 docker network create cc

image-20230531102341655

②新建容器

新建容器加入新建的自定义网络

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

image-20230531102512484

③测试

image-20230531102636077

image-20230531102645950

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.来启动并运行整个应用程序,完成一键部署上线

posted @   22-10-21  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示