docker network 基本命令

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker 是一款开源的容器化平台,可以轻松地创建、部署和管理应用程序的容器。下面是 Docker 常用命令手册的概述: 1. docker version:显示 Docker 版本信息。 2. docker info:显示 Docker 系统信息,包括容器、镜像和存储驱动等。 3. docker images:列出本地所有镜像。 4. docker pull [IMAGE_NAME[:TAG]]:从 Docker 仓库拉取镜像,默认为最新版本。 5. docker search [KEYWORD]:在 Docker 仓库中搜索关键字相关的镜像。 6. docker run [OPTIONS] [IMAGE_NAME[:TAG]] [COMMAND]:创建并运行一个新容器。 7. docker start [CONTAINER_NAME/CONTAINER_ID]:启动一个已存在的容器。 8. docker stop [CONTAINER_NAME/CONTAINER_ID]:停止一个正在运行的容器。 9. docker restart [CONTAINER_NAME/CONTAINER_ID]:重启一个容器。 10. docker rm [CONTAINER_NAME/CONTAINER_ID]:删除一个已停止的容器。 11. docker rmi [IMAGE_NAME/IMAGE_ID]:删除一个本地镜像。 12. docker ps [OPTIONS]:列出正在运行的容器。 13. docker logs [CONTAINER_NAME/CONTAINER_ID]:查看一个容器的日志。 14. docker exec [OPTIONS] [CONTAINER_NAME/CONTAINER_ID] [COMMAND]:在运行中的容器中执行命令。 15. docker commit [CONTAINER_NAME/CONTAINER_ID] [REPOSITORY[:TAG]]:将容器变为一个新的镜像。 这些是 Docker 中常用的基本命令。还有许多其他命令可以用来管理、监控和调试 Docker 容器和镜像。根据实际需求,可以进一步了解和使用这些命令来提高工作效率和便捷性。 ### 回答2: Docker是一种轻量级的容器化技术,可以快速构建、部署和管理应用程序。下面是一些常用的Docker命令: 1. docker run:运行一个容器。可以指定镜像名称、端口映射、卷挂载等参数来创建一个容器的实例。例如:docker run -p 8080:80 nginx。 2. docker ps:列出当前正在运行的容器。可以使用docker ps -a命令来查看所有的容器,包括已停止的。 3. docker images:列出本地的镜像。可以使用docker images -a命令来查看所有的镜像,包括中间层。 4. docker pull:从远程仓库中拉取一个镜像到本地。例如:docker pull ubuntu。 5. docker stop:停止一个正在运行的容器。可以使用容器ID或者容器名称来指定停止的容器。 6. docker rm:删除一个已经停止的容器。可以使用容器ID或者容器名称来指定要删除的容器。 7. docker rmi:删除一个本地的镜像。可以使用镜像ID或者镜像名称来指定要删除的镜像。 8. docker exec:在一个正在运行的容器中执行命令。例如:docker exec -it <容器ID> /bin/bash。 9. docker build:利用Dockerfile来构建一个镜像。例如:docker build -t myimage:1.0 . 10. docker push:将一个本地的镜像推送到远程仓库。例如:docker push myimage:1.0。 这只是一些常用的Docker命令,还有很多其他有用的命令和参数可以用来创建、管理和监控容器。熟练掌握这些命令可以更好地使用Docker进行应用程序的开发和部署。 ### 回答3: Docker是一个开源的容器化平台,可以将应用程序和其依赖项打包成一个轻量级、可移植的容器,方便在不同的环境中进行部署和运行。以下是Docker常用命令的简要手册: 1. docker run:创建并启动一个新的容器。可以指定容器的名称、镜像和其他选项,如端口映射、数据卷等。 2. docker stop:停止一个运行中的容器。可以指定容器名称或容器ID来停止指定的容器。 3. docker rm:删除一个已经停止的容器。可以指定容器名称或容器ID来删除指定的容器。 4. docker ps:列出当前运行中的容器。使用选项 -a 可以列出所有的容器,包括已停止的。 5. docker images:列出本地的镜像。使用选项 -a 可以列出全部的镜像,包括中间层镜像。 6. docker pull:从Docker仓库中下载一个镜像。 7. docker push:将一个本地的镜像推送到Docker仓库。 8. docker build:使用Dockerfile构建一个镜像。 9. docker exec:在运行中的容器中执行命令。 10. docker logs:查看容器的日志输出。 11. docker network:管理Docker的网络资源。 12. docker volume:管理Docker的数据卷。 13. docker-compose:通过一个YAML文件定义和管理多个容器的组合(服务)。 这只是Docker常用命令的简要手册,Docker拥有更多的功能和命令,可以根据具体需求进行深入学习和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值