docker網絡訪問

一 docker網絡訪問

描述:node

  在啓動容器的時候,若是不指定對應的參數,在容器外部是沒法經過網絡來訪問容器內的網絡應用和服務的。當容器中運行一些網絡應用,要讓外部訪問這些應用時,能夠經過-P或者-p參數來指定容器端口映射。當使用-P(大寫)時,docker會隨機映射一個端口到容器內部開放的端口linux

#啓動容器 -d 後臺啓動 -P 隨機映射
[root@Centos-node2 ~]# docker run -d -P nginx
#綁定nginx容器80端口到本地的192.168.10.138:888端口
[root@Centos-node2 ~]# docker run -d -p 192.168.10.138:888:80 --name mynginx1 nginx
#指定udp協議不指定默認tcp
[root@Centos-node2 ~]# docker run -d -p 192.168.10.138:888:80:udp --name mynginx1 nginx
#查看映射端口
[root@Centos-node2 ~]# docker port mynginx1
80/tcp -> 192.168.10.138:888
#指定多個端口
[root@Centos-node2 ~]# docker run -d -p 192.168.10.138:888:80 -p 443:443 --name mynginx1 nginx

二 容器互聯

描述:nginx

    容器間互聯是讓多個容器中應用進行交互的一種方式。docker

2.1.1 --link  運行另一個容器,並link到上面啓動的容器,這個容器被稱爲received container,--link鏈接名爲db的容器,併爲其設置了別名爲:busybox2json

[root@Centos-node3 ~]# docker run -it --name busybox1 busybox
[root@Centos-node3 ~]# docker run -it --link busybox1:busybox2 --name busybox2 busybox
/ # cat /etc/hosts 
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    busybox1 8fe0dce9f160
172.17.0.3    c3a6fda35cb6
/ # ping busybox1
PING busybox1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.107 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.051 ms

2.1.1 三種網絡模式bootstrap

[root@Centos-node3 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
1fb49642b1e6        bridge              bridge              local
fec447af9823        host                host                local
8c6172952391        none                null                local

 bridge  :Docker 安裝時會建立一個 命名爲 docker0 的 linux bridge。若是不指定 --network,建立的容器默認都會掛到 docker0 上。接口 docker0 是一個虛擬的以太網橋,用於鏈接容器和本地宿主網絡。網絡

host : 若是啓動容器的時候使用host模式,那麼這個容器將不會得到一個獨立的Network Namespace,而是和宿主機共用一個Network 。能夠經過--network=host指定使用 host 網絡。 缺點容易發生端口衝突tcp

none: none 網絡就是什麼都沒有的網絡。掛在這個網絡下的容器除了 lo,沒有其餘任何網卡。容器建立時,能夠經過--network=none指定使用 none 網絡。oop

2.1.2 建立一個網絡測試

 1 [root@Centos-node3 ~]# docker network create --driver bridge my_net
 2 aec79181307e4e7708a6a24a7b0f04d6edec067ed6c7853053be8051f9c627fe
 3 #自定義網段IP       
 4 [root@Centos-node3 ~]# docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.1 my_net2
 5 5ad00d340d16d7804865cc1e3e45a3444181878da9c9422fbe1dc658938895e6
 6 
 7 #指定IP地址啓動容器
 8 [root@Centos-node3 ~]# docker run -it --rm --network=my_net2 --ip 192.168.100.10 busybox
 9 WARNING: IPv4 forwarding is disabled. Networking will not work.
10 / # ip a
11 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
12     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
13     inet 127.0.0.1/8 scope host lo
14        valid_lft forever preferred_lft forever
15     inet6 ::1/128 scope host 
16        valid_lft forever preferred_lft forever
17 34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
18     link/ether 02:42:c0:a8:64:0a brd ff:ff:ff:ff:ff:ff
19     inet 192.168.100.10/24 scope global eth0
20        valid_lft forever preferred_lft forever
21     inet6 fe80::42:c0ff:fea8:640a/64 scope link 
22        valid_lft forever preferred_lft forever
23 [root@Centos-node3 ~]# docker network connect my_net2 nginx
24 
25 #共同一個定義網絡能夠互相通訊

2.1.3 docker主機之間容器通訊

[root@Centos-node2 ~]# docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap

#node3 node5主機添加如下配置
[root@Centos-node3 ~]# cat /etc/docker/daemon.json 
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"cluster-store":"consul://192.168.10.138:8500",    #consul地址
"cluster-advertise":"192.168.10.139:2375"             #本機地址

}

驗證:

 

 

建立自定義全局網絡

[root@Centos-node3 ~]# docker network create -d overlay ov_net1
1ce3d31db5dc8865bcfb0d8c06c3c9b6c7a62d8518ce7802263e9acad3ab8b80
[root@Centos-node3 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
af13f853071f        bridge              bridge              local
fec447af9823        host                host                local
aec79181307e        my_net              bridge              local
5ad00d340d16        my_net2             bridge              local
8c6172952391        none                null                local
1ce3d31db5dc ov_net1 overlay global

#node3建立node4查看
[root@Centos-node4 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2035b2339f4d        bridge              bridge              local
832b9c357202        host                host                local
20dfc847adb8        none                null                local
1ce3d31db5dc ov_net1 overlay global

 node3,node4分別啓動容器指定全局網絡測試互通

[root@Centos-node3 ~]# docker run -it --rm --network=ov_net1 busybox
/ # ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=1.322 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=0.395 ms
--- 10.0.0.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.395/0.858/1.322 ms

[root@Centos-node3 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
af13f853071f        bridge              bridge              local
5fd6e9efce57        docker_gwbridge     bridge              local  #隨機 爲了讓容器與外界通訊
fec447af9823        host                host                local
aec79181307e        my_net              bridge              local
5ad00d340d16        my_net2             bridge              local
8c6172952391        none                null                local
1ce3d31db5dc        ov_net1             overlay             global
相關文章
相關標籤/搜索