`

docker network

 
阅读更多
docker network所有子命令如下:

docker network create
docker network connect
docker network ls
docker network rm
docker network disconnect
docker network inspect
创建网络
在安装Docker Engine时会自动创建一个默认的bridge网络docker0。
此外,还可以创建自己的bridge网络或overlay网络。

bridge网络依附于运行Docker Engine的单台主机上,而overlay网络能够覆盖运行各自Docker Engine的多主机环境中。

创建bridge网络比较简单如下:

# 不指定网络驱动时默认创建的bridge网络
docker network create simple-network
# 查看网络内部信息
docker network inspect simple-network
# 应用到容器时,可进入容器内部使用ifconfig查看容器的网络详情

但是创建一个overlay网络就需要一些前提条件(具体操作请参考Docker容器网络相关内容):
- key-value store(Engine支持Consul、Etcd和ZooKeeper等分布式存储的key-value store)
- 集群中所有主机已经连接到key-value store
- swarm集群中每个主机都配置了下面的daemon参数
- –cluster-store
- –cluster-store-opt
- –cluster-advertise
然后创建overlay网络:

# 创建网络时,使用参数`-d`指定驱动类型为overlay
docker network create -d overlay my-multihost-network
1
2
就使用--subnet选项创建子网而言,bridge网络只能指定一个子网,而overlay网络支持多个子网。

在bridge和overlay网络驱动下创建的网络可以指定不同的参数,具体请参考:https://docs.docker.com/engine/userguide/networking/work-with-networks/

连接容器
创建三个容器,分别前两个使用默认网络启动容器,第三个使用自定义bridge网络启动。
然后再将第二个容器添加到自定义网络。这三个容器的网络情况如下

第一个容器:只有默认的docker0
第二个容器:属于两个网络——docker0、自定义网络
第三个容器:只属于自定义网络
说明:通过容器启动指定的网络会覆盖默认bridge网络docker0。

# 创建三个容器 conTainer1,container2,container3
docker run -itd --name=container1 busybox
docker run -itd --name=container2 busybox
# 创建网络mynet
docker network create -d bridge --subnet 172.25.0.0/16 mynet
# 将容器containerr2连接到新建网络mynet
docker network connect mynet container2
# 使用mynet网络来容器container3
docker run --net=mynet --ip=172.25.3.3 -itd --name=container3 busybox

# 查看这三个容器的网络情况
docker network inspect container1 # docker0
docker network inspect container2 # docker0, mynet
docker network inspect container3 # mynet

默认网络与自定义bridge网络的差异
默认网络docker0:网络中所有主机间只能用IP相互访问。通过--link选项创建的容器可以对链接的容器名(container-name)作为hostname进行直接访问。
自定义网络(bridge):网络中所有主机除ip访问外,还可以直接用容器名(container-name)作为hostname相互访问。

# 进入container2内部
docker attach container2
ping -w 4 container3 # 可访问
ping -w 4 container1 # 不可访问
ping -w 4 172.17.0.2 # 可访问container1的IP
# Ctrl+P+Q退出容器,让container2以守护进程运行


默认网络与自定义bridge网络在容器连接的差别
在默认网络中使用link(legency link),有如下功能:
- 使用容器名作为hostname
- link容器时指定alias: --link=<Container-Name>:<Alias>
- 配合--icc=false隔离性,实现容器间的安全连接
- 环境变量注入

自定义网络中使用docker net提供如下功能:
- 使用DNS实现自动化的名称解析
- 一个网络提供容器的安全隔离环境
- 动态地attach与detach到多个网络
- 支持与--link选项一起使用,为链接的容器提供别名(可以是尚不存在链接容器,与默认容器中–link使用的最大差别)

默认网络中的link是静态的,不允许链接容器重启,而自定义网络下的link是动态的,支持链接容器重启(以及IP变化)
因此,使用--link时链接的容器,在默认网络中必须提前创建好,而自定义网络下不必预先建好。

使用docker network connetct将容器连接到新网络中时,用参数--link链接相同的容器时,可以指定不同的别名,它们是针对不同网络的。

# 运行容器使用自定义网络,同时使用--link链接尚不存在的container5容器
docker run --net=mynet -itd --name=container4 --link container5:c5 busybox
# 创建容器container5
docker run --net=mynet -itd --name=container5 --link container4:c4 busybox
# 虽然是相同容器,但是在不同的网络环境连接中可以不同的alias链接
docker network connect --link container5:foo local_alias container4
docker network connect --link container4:bar local_alias container5

指定容器在网络范围的别名(Network-scoped alias)
Network-scoped alias就是指定容器在可被同一网络范围内的其他容器访问的别名。
不同于link别名的是,link别名是由链接容器的使用者提供的,只有它自己可使用;
而指定网络范围内别名,是由容器提供给网络中其它容器使用的。

Network-scoped alias:同一网络中的多个容器可以指定相同的别名,在使用的当然只有第一个指定别名的容器才生效,
只有当第一个容器关闭时,指定相同别名的第二个容器的别名才会开始生效。

docker run --net=mynet -itd --name=container6 --net-alias app busybox
docker network connect --alias scoped-app local_alias container6
docker run --net=isolated_nw -itd --name=container7 --net-alias app busybox
docker network connect --alias scoped-app local_alias container7
# 在container4中
docker attach container4
ping app # 访问container6的IP
# 从container4中以守护进程运行退出:Ctrl+P+Q
docker stop container6
docker attach container4
ping app # 访问的container7的IP

断开网络与移除网络
# 容器从mynet网络中断开(它将无法再网络中的容器container3通讯)
docker network disconnect mynet container2
# 测试与容器container3失败
docker attach container2
ping contianer3 # 访问失败

在多主机的网络环境中,在将容器用已移除的容器名称连接到网络中时会出现container already connected to network的错误,
这时需要将新容器强制移除docker rm -f,重新运行并连接到网络中。

移除网络要求网络中所有的容器关闭或断开与此网络的连接时,才能够使用移除命令:

# 断开最后一个连接到mynet网络的容器
docker network disconnet mynet container3
# 移除网络
docker network rm mynet



原文链接https://blog.csdn.net/gezhonglei2007/article/details/51627821
分享到:
评论

相关推荐

    docker 一图带你看懂docker network

    在使用dokcer的时候,虽然不常用`docker network`,但也往往避免不了配置网络。 一张图带你搞定docker 网络的常用配置。

    解决Docker network Create加–subnet后遇到问题

    Docker network Create加–subnet后,使用docker network ls查看,在刚刚新建的网络上没看到driver,使用docker network inspect 查看详细信息,会看到好多地方都没数据,特别是driver,不加–subnet,一切又正常。...

    Docker Network 之自定义网桥

    单机多容器最佳通信方式—自定义网桥。与默认docker0网桥的比较 1.更好的隔离性与互操作性,无需暴露端口,同一自定义bridge 下的容器可以互相访问所有端口 ...docker network create redis-net  docker netwo

    使用docker网络相关命令.docx

    如示例所示,`docker network create simple-network` 创建了一个名为`simple-network`的bridge网络。默认情况下,这会创建一个本地作用域(Scope: local)的桥接网络,驱动器类型为`bridge`,并分配一个子网(如`...

    一键shell脚本搭建docker redis 集群(cluster)

    为了新手小伙伴发愁集群... "`docker network ls | grep redis | awk '{print $1}'`"] && docker network create redis --subnet 172.18.0.0/16 --gateway 172.18.0.1 #查看网卡信息 docker network ls | grep redis

    Docker容器技术-自定义网桥网络.pptx

    Docker提供了一种灵活的方式来创建自定义的网络,这可以通过`docker network create`命令实现。这个命令允许我们定义网络的类型(如bridge、overlay等)、子网、IP范围以及其他网络参数。例如,创建一个名为`my_...

    qingcloud-docker-network-master.zip

    2. 创建网络:使用Docker CLI创建一个基于Qingcloud SDN的网络,例如`docker network create --driver qingcloud --opt subnet=192.168.0.0/16 mynet`。 3. 运行容器:在创建的网络上启动Docker容器,例如`docker ...

    Docker单机桥接网络详解.pdf

    例如,对于Linux环境中的`bridge`网络,`docker network inspect bridge`会显示网络的名称、ID、创建时间、驱动类型等,还会显示其与内核中的`docker0`网桥的关联。 创建自定义的单机桥接网络可以使用`docker ...

    Docker 手册(Docker Handbook).pdf

    本手册提供了关于如何创建和管理Docker网络的步骤,包括使用docker network命令创建自定义网络。还探讨了Rancher网络,一种用于管理Docker容器网络的开源平台,以及扁平网络如何在swarm模式下实现路由。 存储管理...

    Learning.Docker.Networking.17852809

    Docker provides the networking primitives that allow administrators to specify how different containers network with each application and connect each of its components, then distribute them across a...

    docker使用手册

    docker network inspect [网络ID] ``` - **创建自定义网络**: ```bash docker network create --driver=overlay --subnet=10.88.0.0/24 --gateway=10.88.0.1 net3 ``` - **将容器绑定到自定义网络**: ```bash ...

    docker-network-tools:Docker网络工具。 支持浮动IP,网络名称空间同步,OVS和linux网桥

    docker-网络工具 Docker网络工具。 支持浮动IP,网络名称空间同步,OVS和linux网桥。 概念 该脚本适用于docker网络管理脚本。 docker的网络是基于NAT的,但它可以像openstack之类的东西一起使用。 是的,Float IP .....

    Docker单机桥接网络详解.docx

    `docker network inspect`命令能提供更详细的信息,包括网络的创建时间、驱动类型、子网配置等。 在Linux系统中,Docker的Bridge驱动是建立在Linux内核的成熟Linux Bridge技术之上,确保了高性能和稳定性。默认的`...

    Docker on Windows

    over with Docker SwarmMaster security in-depth with the Docker platform, making your apps more secureBuild a Continuous Deployment pipeline by running Jenkins in DockerDebug applications running in ...

    容器网络实验手册1

    容器网络实验手册1 ...在实验中,我们学习了 Docker 网络相关的命令,包括 docker network create、docker network inspect、docker network connect、docker exec 等。这些命令都是容器网络管理的基础命令。

    VMWARE配置net网络及安装Docker.docx

    在本文档中,我们主要探讨了如何在VMware中配置静态网络以...而安装Docker则需要满足最低内核版本要求,更新软件源,安装Docker软件包,启动服务并验证其状态。这些步骤对于在虚拟化环境中运行Docker容器是至关重要的。

    docker-overlay网络部署1

    可以使用`docker network ls`检查网络列表,看到网络类型为“global”。 接下来,可以在任何主机上运行容器并将其连接到`ov_net1`网络,例如: ``` docker run -itd --name bbox1 --network ov_net1 busybox ``` ...

    Learning Docker Networking(PACKT,2016)

    Docker provides the networking primitives that allow administrators to specify how different containers network with each application and connect each of its components, then distribute them across a...

    创建docker容器,配置容器ip桥接,在容器内安装tomcat

    `docker network create -d bridge mybridge` 然后,需要将容器连接到桥接网络: `docker run -it --name mycontainer --net mybridge centos:7` 四、 在容器内安装 Tomcat 服务 要在容器内安装 Tomcat 服务,...

    zabbix 离线docker 部署

    #!/bin/bash deploy_dir=. # 修改为zabbix server IP ... SERVER_IP=192.168.2.110 ... docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net ## 1. Start empty MySQL server insta

Global site tag (gtag.js) - Google Analytics