转:https://blog.csdn.net/gezhonglei2007/article/details/51627821

原文地址:https://docs.docker.com/engine/userguide/networking/work-with-networks/

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

就使用--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

(转)Docker network命令的更多相关文章

  1. Docker - 命令 - docker network

    概述 docker network 命令 背景 newwork 是 docker 的一种资源 经常会使用 需要整理命令 1. 引入 概述 docker run 时, 将容器端口映射到宿主机 场景 启动 ...

  2. Docker: docker network 容器网络

    容器网络命令 : docker network --help 常用的是 docker network create/ls/rm/inspect 容器网络类型,一共有以下5种 bridge–net=br ...

  3. 【docker】docker network常用命令参数

    1.帮助命令 docker network --help 2.查看docker默认三种网络 docker network ls 3.创建自定义网络,如果不指定,默认创建类型为bridge类型 dock ...

  4. Docker 网络命令

    docker network create docker network connect docker network ls docker network rm docker network disc ...

  5. docker 常用命令和使用

    首先安装Docker CE 在ubantu上,参照https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-reposito ...

  6. docker 小技巧 docker network create br-name 指定IP地址

    在某些情况下,使用 docker network create br-name 命令创建网络的时候,会创建一个新的网桥,该网桥的默认IP地址为172.18.0.0\16(或相临的IP地址段) 这个ip ...

  7. CentOS docker 常用命令

    yum install docker 安装服务 systemctl start docker.service 启动服务 systemctl enable docker.service 开机启动服务 d ...

  8. docker 系列 - 基础镜像环境和Docker常用命令整理

    =======================docker 基础镜像环境 alpine=======================可以使用 docker search 命令搜索指定的 image, ...

  9. docker 搭建lnmp环境以及docker常用命令

    1.首先docker 的基本操作. 2.然后命令深入,网络映射. 3.访问docker 内的应用 端口映射网桥之类. docker pull hub.c.163.com/library/php:7.0 ...

随机推荐

  1. Bootstrap 学习笔记5 进度条媒体对象和well组件

    代码: <ul class="media-list"> <li class="media"> <div class="m ...

  2. [LeetCode] 137. Single Number II (位操作)

    传送门 Description Given an array of integers, every element appears three times except for one, which ...

  3. .NET简单三层的理解

    1.UI 表示层 :就是我们看到的网站前台2.BLL 业务逻辑层:很简单 也很重要 处理逻辑问题 简单程序看不出啥效果3.DAL 数据访问层: 写数据连接和执行的SQL语句4.MODEL 模型层:封装 ...

  4. dubbo入门和springboot集成dubbo小例子

    从零开始搭建springboot-dubbo的例子 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案 一. Dubbo的简单介绍 1. ...

  5. TCL环境检查

    set w [open 1.txt w+] foreach a [info var] { if { [llength [array name $a]]==0 } { puts $w $a:[set $ ...

  6. vector中数据释放崩溃问题

    struct LINE { char securityID[32]; /*!< 证券代码 */ int64_t dateTime; /*!< 日期时间(日期变化)YYYYMMDDhhmms ...

  7. 【学习总结】Python-3-字符串函数-strip()方法

    参考: 菜鸟教程-Python3-Python字符串-strip()方法 语法: str.strip([chars]); 参数: chars -- 移除字符串头尾指定的字符序列. 返回值: 返回移除字 ...

  8. linux性能分析工具Vmstat

  9. 给定中序和后序遍历,求前序序列(C++递归方式实现)

    问题: 输入后序和中序,求中序遍历. 算法: void f2(string &pre,string in, string post) { ) //序列为空结束 return; ; //根节点 ...

  10. Java EE模式和MVC

    Java EE模式 什么是模式? 开发过程中总结出来的约定俗成的"套路". Java EE经历的模式 model1模式 技术组成:JSP+JavaBean model1的弊端:随着 ...