docker网络分层
sudo ip netns list/delete/add/exec 操作本机network namespace
sudo ip link add veth-test1 type veth peer name veth-test2 创建两个veth
sudo ip link set veth-test1 netns test1 把veth1设置给test1 netns
sudo ip link set veth-test2 netns test2
sudo ip netns exec test1 ip link 查看test1的ip
sudo ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1 给veth1设置ip
sudo ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2
sudo ip netns exec test1 ip link set dev veth-test1 up 启动test netns
sudo ip netns exec test2 ip link set dev veth-test2 up
容器之间如何通信
sudo docker network ls 列举当前机器上docker有哪些网络
sudo docker network inspect
安装网桥工具bridge-utils
yum install -y bridge-utils
brctl show 查看桥接
容器之间的link
创建容器test1
sudo docker run -d —name test1 busybox /bin/sh -c “while true;do sleep 3600;done”
创建容器test2并link到test1
sudo docker run -d —name test2 —link test1 busybox /bin/sh -c “while true;do sleep 3600;done”
在test2中ping test1
sudo docker exec -it test2 /bin/sh
ping test1
注意:当创建docker容器的时候会自动连接docker0这个默认的bridge
sudo docker network ls
创建自定义bridge
创建bridge驱动
sudo docker network create -d bridge my-bridge
查看桥接列表
brctl show
新建docker指定bridge
sudo docker run -d —name test3 —network my-bridge busybox /bin/sh -c “while true;do sleep 3600;done”
将之前的docker容器连接到新的bridge上
sudo docker network connect my-bridge test2
查看docker的network列表
sudo docker network ls
再查看一下新的bridge的详情
sudo docker network inspect <network ID>
测试
sudo docker exec -it test3 /bin/sh
ping test2
注意:如果两个容器link到自定义bridge上而不是默认的docker0上则这两个容器就默认建立了link(可以ping容器名字)
练手demo: flask-redis + redis
启动一个redis container
docker run -d —name redis redis
build已经写好的flask-redis的Dockerfile
docker build -t wirechen/flask-redis .
创建flask-redis的container并连接redis
docker run -d -p 5000:5000 —link redis —name flask-redis -e REDIS_HOST=redis wirechen/flask-redis
进入flask-redis交互命令 能ping通redis 也有REDIS_HOST环境变量
docker exec -it
退出docker 在宿主机访问 5000应用
curl localhost:5000