docker网络

1、内容概要

11、linux网络原理
2
32、docker网络
4
53、多个容器互联项目(nginx代理django)

2、Linux网络原理

 1docker网络严重依赖于linux网络
2
3容器之间相互隔离
4
5为了支持网络协议栈的多实例,linux提供了一个网络名称空间(Network Namespace)。不同的网络名称完全隔离。
6
7容器之间的网络互通问题?
8
9实现两个不同的网络名称空间互联的方式
101、veth设备对
11    veth设备必须是成对出现。
12
13    1、创建名称空间
14         [root@localhost ~]# ip netns add test01
15
16           # 查看创建的名称空间
17         [root@localhost ~]# ip netns list
18         test01
19
20    2、创建veth设备对
21        [root@localhost ~]# ip link add veth type veth peer name veth001
22        # 查看
23        [root@localhost ~]# ip a
24    3、绑定名称空间
25        [root@localhost ~]# ip link set veth001 netns test01
26        # 进入test01名称空间
27        [root@localhost ~]# ip netns exec test01 bash
28        # 查看
29        [root@localhost ~]# ip a
30        # 要记得退出
31
32
33    4、分配IP
34        [root@localhost ~]# ip netns exec test01 ip addr add 10.0.0.111/20 dev veth001
35        [root@localhost ~]# ip addr add 10.0.0.112/20 dev veth
36
37
38    5、重启
39        [root@localhost ~]# ip netns exec test01 ip link set dev veth001 down
40        [root@localhost ~]# ip netns exec test01 ip link set dev veth001 up
41
42        [root@localhost ~]# ip link set dev veth down
43        [root@localhost ~]# ip link set dev veth up
44
45    6、测试
46        [root@localhost ~]# ping 10.0.0.111
47
482、网桥
49
503、iptables
51
524、ipvs

3、docker网络

 1就是为了实现容器互联的。
2
31、host模式
4    将容器网络绑定到宿主主机上。也就是说宿主主机上的网络直接绑定到容器内。
5    [root@localhost ~]# docker run -d --network host nginx 
6    这时我们可以通过192.168.15.100直接访问到容器里面的nginx
7
82、container模式
9    先创建一个容器
10    [root@localhost ~]# docker run -d -it centos
11
12    共享一个容器的网络。
13    [root@localhost ~]# docker run -d --network "container:epic_swirles" nginx
14
15    这时我们进入到centos容器中可以访问到共享容器中的nginx
16    [root@localhost ~]# docker exec -it frosty_pascal bash
17    [root@8c28f7ec62e7 /]# curl 127.0.0.1
18
193、网桥模式
20
21    1、创建网桥
22    [root@localhost ~]# docker network create lhs
23
24    # 查看网桥
25    [root@localhost ~]# docker network ls
26
27    2、使用网桥
28
29    首先先在网桥中创建一个容器
30    [root@localhost ~]# docker run -d -it --network lhs nginx
31
32    在创建另一个容器
33    [root@localhost ~]# docker run -it --network lhs centos
34
35    这时我们在centos容器中可以通过id访问到其他容器中的nginx
36    [root@e8b0bc58189a /]# curl 4f0771ed1e3d 
37
38    如果想要使用名字访问的话必须指定name
39    [root@localhost ~]# docker run -d --name lhs -it --network lhs nginx
40    --name   指定容器名称,将容器名称加入到docker DNS
41
42    [root@e8b0bc58189a /]# curl lhs
43
44
454、none模式
46    这种模式只提供一个回环网络
47    [root@localhost ~]# docker run -it --network none centos
48
495、--link
50    链接一个容器,类似于container模式
51    [root@localhost ~]# docker run -d --name nginxv1 nginx
52    [root@localhost ~]# docker run -it --link "nginxv1:nginxv1" centos
53    [root@localhost ~]# curl nginxv1
54
55    # docker logs 名称   查看日志

4、docker的network

 11、创建网桥
2--subnet    :指定网络的CIDR
3--gateway    :网关
4[root@localhost ~]# docker network create lhs1 --subnet "10.0.0.0/24" --gateway "10.0.0.2"
5[root@localhost ~]# docker run -d -it --name lhs3 --network lhs lnginx 
6网关相同,在同一网络段
7
82、查看网桥
9[root@localhost ~]# docker network ls
10NETWORK ID     NAME        DRIVER    SCOPE
11网桥的ID      网桥的名称    网桥类型   网桥的来源
12
133、查看网桥的详细信息
14docker network inspect [网桥的名称]
15
164、链接网桥
17
18# 创建网桥
19[root@localhost ~]# docker network create lhs3
20# 创建一个容器
21[root@localhost ~]# docker -d --name nginxv2 nginx 
22# 链接网桥
23[root@localhost ~]# docker network connect lhs nginxv2
24[root@localhost ~]# docker run -it --network lhs1 centor
25
265、断开链接
27[root@localhost ~]# docker network disconnect lhs3 nginxv2
28
296、删除网桥
30docker network rm [网桥名称]
31[root@localhost ~]# docker network rm lhs3
32
337、清理网桥
34[root@localhost ~]# docker network prune 

5、案例

 11、分析
2
3Nginx ---> Django
4
5    1、创建网桥
6    docker network create chenyang3
7
8    2、部署Django
9    [root@localhost ~]# docker run -d -it python:3.6 bash
10    2d2d77726f5fadd22472527116300a7ab5bb43c660c7663d7843b2fa0f0afffb
11
12    [root@localhost ~]# docker ps
13    CONTAINER ID   IMAGE        COMMAND   CREATED         STATUS         PORTS     NAMES
14    2d2d77726f5f   python:3.6   "bash"    3 seconds ago   Up 2 seconds             stoic_mcnulty
15
16    [root@localhost ~]# docker exec -it stoic_mcnulty bash
17    root@2d2d77726f5f:/# pip install django
18    root@2d2d77726f5f:/# exit
19
20    [root@localhost ~]# docker commit -a 'A' -m 'A' -p intelligent_darwin python:djangov1
21    [root@localhost ~]# docker run -d --name django -w /opt -v /root/linux/:/opt --network chenyang3 python:djangov1 python manage.py runserver 0.0.0.0:8000
22
23    3、nginx
24
25vim django.conf 
26server {
27    server_name _;
28    listen 80;
29    location / {
30        proxy_pass http://django:8000;
31    }
32}
33
34[root@localhost ~]# docker run -d --name nginx --network chenyang3 -p 8080:80 -v /root/django.conf:/etc/nginx/conf.d/default.conf nginx 
posted @ 2022-01-05 16:48  一叶松  阅读(87)  评论(0编辑  收藏  举报