docker的学习历程-docker网络(docker中无法install问题解决)

Docker 网络原理

启动docker服务发现docker虚拟网卡
docker0

遇到问题

查看容器内部网卡信息时报错,阉割版的linux系统ip指令也没有(脑裂)
指令未找到
尝试在容器内安装ip相关指令,发下apt更新失败
ip指令安装
推测可能是域名无法解析,修改docker配置文件

vim /etc/docker/daemon.json

添加dns解析服务器地址
dns配置
重启docker服务,发现安装成功
成功
其次为了提高下载速度可以配置国内镜像源

cat <<EOF >/etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
EOF
#更新可用软件包信息
apt update

更新apt信息

回归主题

启动新容器nginx01,nginx02,进入容器查看网卡
nginx01网卡信息
nginx02网卡信息
查看宿主机ip地址,发现docker容器的网卡在宿主机中存在对应信息
宿主机网卡信息
由上图发现新启动的容器,与docker01网卡在同一网段,相互之间可以通信
两个容器相ping
使用命令查看两个容器的网卡信息

docker inspect nginx01
docker inspect nginx02

nginx01的网卡信息
nginx2的网卡信息
发现两个容器的网关都是docker0的ip值,且网络模式均为bridge,所以可以粗略画出网络通信图
原理图

由于容器启动后ip地址会变动,为了建立稳定的通信方式,需要使用容器名进行通信,这里可以使用–link可以达到实现通过容器名ping通。

docker rm -f nginx02
docker run -d -P --name nginx02 --link nginx01 nginx
#也可以给将要连接到的容器起别名,相当于在nginx02中访问new_name就是访问nginx01
#docker run -d -P --name nginx02 --link new_name:nginx01 nginx
docker exec nginx02 apt update && install iputils-ping -y
docker exec nginx02 ping nginx01

容器名ping通
查看nginx02容器的/etc/hosts文件,发现–link实际上的实现原理,是做了一个host映射,将nginx01指向了ip:172.17.0.2。
nginx02的hosts文件
如果存在大量容器之间需要通信使用–link比较麻烦,而且–link的连接是单向的
单向连接

容器互联(自定义网络)

解决–link配置麻烦的问题,我们可以使用自定义网络。

#查看所有的docker网络
docker network ls

network查看
我们每次启动容器时都会有一个默认参数–net指定网络模式,默认的网络的模式是bridge,我们创建自己的网络后就可以用–net自定自定义网络。

# driver指定网络模式,subnet指定子网掩码,geteway指定网关
 docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet

自定义网络
新启动两个容器,使用自定义网络

docker run -d -P --name nginx03 --net mynet nginx
docker run -d -P --name nginx04 --net mynet nginx
# 查看自定义网络详细信息
docker inspect network mynet

自定义网络启动容器
使用ping命令发现,自定义网络中的容器可以相互之间使用容器名ping通,修复了docker0网络与–link的不足,而且使用十分简单
自定义网络ping相互ping通

网络联通(不同网络中的容器通信)

实现了同一网络中容器的自由通信,那是否也可以实现不容网络中容器的通信呢?

网络联通提问

操作方法

# 将nginx01与mynet网络连通
docker network connect mynet nginx01
# 查看mynet网络信息
docker network inspect mynet

mynet网络
插卡mynet网络信息发现,将nginx01与网络mynet联通,只是将nginx01增加了一个mynet网络内的ip地址,这就是同一个容器存在两个ip.

测试
测试结果
发现不同网络中的容器可以通过容器名ping通,至此实现了不同网络之间容器的互联。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值