docker网络

in 笔记 with 0 comment

docker网络分层

image.png
image.png

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
image.png

容器之间如何通信

sudo docker network ls 列举当前机器上docker有哪些网络
image.png
sudo docker network inspect 查看docker中某网络详情

安装网桥工具bridge-utils

yum install -y bridge-utils
brctl show 查看桥接
image.png

创建容器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
image.png

新建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>
image.png

测试

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 /bin/bash

退出docker 在宿主机访问 5000应用

curl localhost:5000

image.png
image.png

学习资料

https://coding.imooc.com/class/189.html