Fork me on GitHub
秋染蒹葭

docker实践之四:docker的网络

分单机网络和多机网络

网络基础

基于数据包的网络协议,以及7层网络协议,ip和路由,公有ip和私有ip,网络地址转换NAT,ping(检查连接的可达性)和telnet(检查服务的可用性,一般是防火墙的问题,可达但是服务不一定可用)

网络命名空间

实现两个network namespace可以相互ping通

1
2
3
4
5
ip netns list
// 删除
ip netns delete $(name)
// 添加
ip netns add $(name)

veth

Linux container 中用到一个叫做veth的东西,这是一种新的设备,专门为 container 所建。veth 从名字上来看是 Virtual ETHernet 的缩写,它的作用很简单,就是要把从一个 network namespace 发出的数据包转发到另一个 namespace。veth 设备是成对的,一个是 container 之中,另一个在 container 之外,即在真实机器上能看到的。

1
2
3
4
5
6
sudo docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done"
sudo docker run -d --name test1 --link test2 busybox /bin/sh -c "while true;do sleep 3600;done"
link具有方向性,用的并不多,有其他更好的方法
--network可以设置连接的网络
sudo docker network inspect bridge

1
brctl show

两个容器之间如何通信,容器如何访问外网
veth,nat处理

1
docker network create

端口映射

若对外提供一个web服务,将端口映射到本地

1
2
将docker端口,映射到本机的端口
docker run --name web -d -p 80:80 nginx

none与host的network

none:除了本地无法访问
host:共享主机的网络地址空间

多容器复杂应用的部署

单台linux

分模块的放在不同的容器内,确定不同容器的访问关系

1
2
3
4
// -e设置环境变量,用env可以查看
docker run -d --link redis --name flask-redis -e REDIS_HOST=redis zhyjor/flask-redis
docker run -d -p 5000:5000 --link redis --name flask-redis -e REDIS_HOST=redis zhyjor/flask-redis

多机网络

两台linux的话怎么用呢(跨机器overlay网络)

vxlan
etcd,分布式存储

参考资料
Etcd 使用入门
Docker Tutorials and Labs

本文标题:docker实践之四:docker的网络

文章作者:zhyjor

发布时间:2018年11月02日 - 16:11

最后更新:2023年10月11日 - 02:10

原始链接:https://zhyjor.github.io/2018/11/02/docker实践之四:docker的网络/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

🐶 您的支持将鼓励我继续创作 🐶

热评文章