当前位置: 首页 » 综合知识 » it知识 » 正文

Docker网络命令怎么使用

发布时间:2023-07-24 以下文章来源于网友投稿,内容仅供参考!

docker network create
docker network connect
docker network ls
docker network rm
docker network disconnect
docker network inspect

创建网络

zane@zane-v:~$ docker network create simple-network
zane@zane-v:~$ docker network inspect simple-network
 {
  "name": "simple-network",
  "id": "8bf58f43c56622d1100f7da9ef6506e45a4aa68556b586311f3756130c311d75",
  "scope": "local",
  "driver": "bridge",
  "enableipv6": false,
  "ipam": {
   "driver": "default",
   "options": {},
   "config": [
    {
     "subnet": "172.20.0.0/16",
     "gateway": "172.20.0.1/16"
    }
   ]
  },
  "internal": false,
  "containers": {},
  "options": {},
  "labels": {}
 }

进入一个键值存储。引擎支持consul,etcd,zookeeper.
在群集中的每个主机上正确配置的deamon引擎

支持overlay网络的docker选项:

--cluster-store-opt

使用--subnet选项直接指定子网络,在bridge网络中只可以指定一个子网络,而在overlay网络中支持多个子网络。
除了--subnet,还可以指定:--gateway,--ip-range,--aux-address选项。

$ docker network create -d overlay \
--subnet=192.168.0.0/16 \
--subnet=192.170.0.0/16 \
--gateway=192.168.0.100 \
--gateway=192.170.0.100 \
--ip-range=192.168.1.0/24 \
--aux-address="my-switch=192.168.1.6" \
--aux-address="my-nas=192.170.1.6" \

如何要创建自己定制的网络,docker也是支持很多选项的。
可以指定网络的端口号:

$ docker run -d -p --name redis --network my-network redis
 
$ docker ps
container id image mand created status ports names
bafb0c808c53 redis "/entrypoint.sh redis" 4 seconds ago up 3 seconds 172.23.0.1:32770->6379/tcp redis

连接容器

可以连接已存在的容器到一个或者多个网络中。一个容器可以连接到多个不同网络驱动的网络中。
当连接一旦建立,容器便可以可其他的容器通讯,通过ip 或者 容器名称。

基本容器网络实例:

1.创建两个容器,container1 和 container2

$ docker run -itd --name=container1 busybox
 
$ docker run -itd --name=container2 busybox

zane@zane-v:~$ docker network create -d bridge --subnet 172.25.0.0/16 isolated_nw

3.连接container2到这个网络,然后验证一下:

zane@zane-v:~$ docker network connect isolated_nw container2
 
zane@zane-v:~$ docker network inspect isolated_nw
 {
  "name": "isolated_nw",
  "id": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b",
  "scope": "local",
  "driver": "bridge",
  "enableipv6": false,
  "ipam": {
   "driver": "default",
   "options": {},
   "config": [
    {
     "subnet": "172.25.0.0/16"
    }
   ]
  },
  "internal": false,
  "containers": {
   "e9bce535ae32945f5e43340facdb6c16c93d92119e85b61c6cb7a5379a0caf63": {
    "name": "container2",
    "endpointid": "ef7244d32484407c3ec4aa30b7bdb0a6cbe3dbbfedc03e5c856ad20a08af172f",
    "macaddress": "02:42:ac:19:00:02",
    "ipv4address": "172.25.0.2/16",
    "ipv6address": ""
   }
  },
  "options": {},
  "labels": {}
 }

注意container2,自动分配到了ip地址。此时container1,仍然连接在默认的bridge网络。

4.启动第三个container,但是这是使用--ip 选项指定它的ip地址,

zane@zane-v:~$ docker run --network=isolated_nw --ip=172.25.3.3 -itd --name=container3 busybox

5.检查container3使用的是哪个网络:

 "networks": {
    "isolated_nw": {
     "ipamconfig": {
      "ipv4address": "172.25.3.3"
     },
     "links": null,
     "aliases": [
      "adf68dd9e09c"
     ],
     "networkid": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b",
     "endpointid": "71d5d272d056b6111a83f0843a10d1944f1648f34d5099258d5865d053a939b0",
     "gateway": "172.25.0.1",
     "ipaddress": "172.25.3.3",
     "ipprefixlen": 16,
     "ipv6gateway": "",
     "globalipv6address": "",
     "globalipv6prefixlen": 0,
     "macaddress": "02:42:ac:19:03:03"
    }
   }
  }

6.检查container2使用的是哪个网络:

"networks": {
    "isolated_nw": {
     "aliases": [
      "e9bce535ae32"
     ],
     "endpointid": "ef7244d32484407c3ec4aa30b7bdb0a6cbe3dbbfedc03e5c856ad20a08af172f",
     "gateway": "172.25.0.1",
     "globalipv6address": "",
     "globalipv6prefixlen": 0,
     "ipamconfig": {},
     "ipaddress": "172.25.0.2",
     "ipprefixlen": 16,
     "ipv6gateway": "",
     "links": null,
     "macaddress": "02:42:ac:19:00:02",
     "networkid": "a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b"
    }
   },

注意:container2 在两个网络中间,它加入了默认bridge网络,当你在创建它的时候,然后又连接它到了isolation_nw.

一个容器可以连接到多个网络中

7.使用docker attach 命令连接一个正在运行的容器,然后查看

zane@zane-v:~$ docker attach container2
/ # ifconfig -a
eth1  link encap:ethernet hwaddr 02:42:ac:19:00:02 
   inet addr:172.25.0.2 bcast:0.0.0.0 mask:255.255.0.0
   inet6 addr: fe80::42:acff:fe19:2/64 scope:link
   up broadcast running multicast mtu:1500 metric:1
   rx packts:86 errors:0 dropped:0 overruns:0 frame:0
   tx packets:8 errors:0 dropped:0 overruns:0 carrier:0
   collisions:0 txqueuelen:0
   rx bytes:11780 (11.5 kib) tx bytes:648 (648.0 b)
 
eth2  link encap:ethernet hwaddr 02:42:ac:11:00:03 
   inet addr:172.17.0.3 bcast:0.0.0.0 mask:255.255.0.0
   inet6 addr: fe80::42:acff:fe11:3/64 scope:link
   up broadcast running multicast mtu:1500 metric:1
   rx packets:23 errors:0 dropped:0 overruns:0 frame:0
   tx packets:8 errors:0 dropped:0 overruns:0 carrier:0
   collisions:0 txqueuelen:0
   rx bytes:3809 (3.7 kib) tx bytes:648 (648.0 b)
 
lo  link encap:local loopback 
   inet addr:127.0.0.1 mask:255.0.0.0
   inet6 addr: ::1/128 scope:host
   up loopback running mtu:65536 metric:1
   rx packets:0 errors:0 dropped:0 overruns:0 frame:0
   tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
   collisions:0 txqueuelen:0
   rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)

8.可以通过容器名称来相互连接

/ # ping -w 4 container3
ping container3 (172.25.3.3): 56 data bytes
64 bytes from 172.25.3.3: seq=0 ttl=64 time=0.077 ms
64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.049 ms
64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.047 ms
64 bytes from 172.25.3.3: seq=3 ttl=64 time=0.054 ms

虽然container1 和 container2 都在bridge网络中,但是他们是不支持 容器名称通信的。

zane@zane-v:~$ docker attach container2
/ # ping container3
ping container3 (172.25.3.3): 56 data bytes
64 bytes from 172.25.3.3: seq=0 ttl=64 time=0.042 ms
64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.050 ms
64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.063 ms
--- container3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.042/0.051/0.063 ms
 
/ # ping -w 4 container1
ping: bad address 'container1'
 
/ # ping -w 4 172.17.0.2
ping 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.104 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.052 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.127 ms
64 bytes from 172.17.0.2: seq=3 ttl=64 time=0.057 ms
 
--- 172.17.0.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.052/0.085/0.127 ms

注意退出attach 时,使用ctr-p + ctr-q.
如果使用ctr-d 则会stop container.

zane@zane-v:~$ docker attach container3
/ # ping -w 4 172.17.0.2
ping 172.17.0.2 (172.17.0.2): 56 data bytes
 
--- 172.17.0.2 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss

上面的实验我们知道,用户自定义的网络,是可以相互解析容器名的,也就是可以用容器名来相互同行。

定义网络别名 --link=container-name:alias

1.断开container2和isolated_nw的连接,然后

zane@zane-v:~$ docker network disconnect isolated_nw container2

zane@zane-v:~$ docker network rm simple-network

创建网络 docker network create simple-network

overlay网络条件 进入一个键值存储

支持overlay网络的docker选项 --cluser-store

指定子网络,网关,地址范围

将容器添加到网络中 docker network connect isolated_nw container2

连接一个正在运行的容器 docker attach

attach 的退出 ctr p + ctr q

默认bridge网络不支持,容器名称通信,其他网络支持; 使用link 来支持默认网络的容器名称通信

断开连接

docker network disconnect isolated_nw container2

删除网络

docker network rm simple-network

检测网络

docker network inspect isolated_nw

  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师