docker学习(二十一、network使用示例container、自定义)

文章目录

network相关内容:
docker学习(十八、network介绍)
docker学习(十九、network使用示例bridge)
docker学习(二十、network使用示例host、none)
docker学习(二十一、network使用示例container、自定义)

一、container

应用示例

1.需要共用同一个端口的服务,不适用container方式

bash 复制代码
# 启动一个容器,使用默认bridge的network
docker run -itd -p 8082:80 --name ubuntu2 ubuntu:latest /bin/bash
# 启动一个容器,使用ubuntu2容器的网络
docker run -itd -p 8083:80 --network container:ubuntu2 --name ubuntu3 ubuntu:latest /bin/bash

2.可用示例

bash 复制代码
# 启动一个容器,使用默认bridge的network
docker run -itd --name alpine alpine:latest /bin/sh
# 启动一个容器,使用alpine 容器的网络
docker run -itd --network container:alpine --name alpine1 alpine:latest /bin/sh
bash 复制代码
# 进入容器查看网络
docker exec -it alpine /bin/sh
ifconfig
exit
docker exec -it alpine1 /bin/sh
ifconfig
exit

可以看到两个容器的ip是同一个,他们都是eth0 172.17.0.3

3.停掉共享源的容器,其他容器只有本地回环lo地址

bash 复制代码
# 进入容器查看网络
docker stop alpine
docker exec -it alpine1 /bin/sh
ifconfig
exit

总结

  • 新建的容器和已经存在的一个容器共享一个网络ip配置,而不是和宿主机共享;
  • 新创建的容器不会创建自己的网卡,配置自己的ip,而是和一个指定的容器共享IP、端口范围等;
  • 共享源容器如果停掉,其他共享这个网络的容器将只有lo回环地址;
  • container网络可以在容器创建时通过 --network container:容器名或容器ID来指定;
  • 两个容器除了网络方面,其他的如文件、进程列表等还是隔离的。

二、自定义网络

应用示例

默认bridge,容器间ip通信

bash 复制代码
# 启动一个容器,默认网络
docker run -itd -p 8090:80 --name u1 ubuntu:latest /bin/bash
# 启动一个容器,默认网络
docker run -itd -p 8091:80 --name u2 ubuntu:latest /bin/bash
docker exec -it u1 /bin/bash
ip addr
docker exec -it u2 /bin/bash
ip addr
# 在u2中ping u1的ip网络是通的
ping 172.17.0.3

bash 复制代码
docker exec -it u1 /bin/bash
ip addr
# 在u1中ping u2的ip网络是通的
ping 172.17.0.4


结论:默认bridge的情况下,使用docker内部分配的ip,容器之间可以通过ip通信

默认bridge,容器间服务名不通

bash 复制代码
docker exec -it u1 /bin/bash
ping u2


结论:默认bridge的情况下,容器之间不可以通过服务名通信

思考:bridge情况下容器挂了,ip会重新分配,那么使用ip通信是不可靠的,使用服务名又不通,那应该如何解决这个问题呢?

自定义网络

bash 复制代码
docker network ls
docker network create test_network
docker run -itd -p 8070:80 --network test_network --name u70 ubuntu:latest /bin/bash
docker run -itd -p 8071:80 --network test_network --name u71 ubuntu:latest /bin/bash

bash 复制代码
docker exec -it u70 /bin/bash
ping u71

总结

  • 创建network,docker network create 自定义名字
  • 在容器创建时通过 --network 自定义的network名字 来指定;
  • 容器之间可以通过ip或主机名通信

三、尝试看图

学到这里应该能大体看懂这个图了,细品一下吧~

相关推荐
2301_797604241 小时前
学习记录:DAY32
学习
藥瓿亭1 小时前
K8S认证|CKS题库+答案| 6. 创建 Secret
运维·ubuntu·docker·云原生·容器·kubernetes·cks
2302_809798321 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
嵌入式大圣1 小时前
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
运维·docker·容器
蓝婷儿1 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
孔令飞2 小时前
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
ai·云原生·容器·golang·kubernetes
叶子2024222 小时前
学习使用YOLO的predict函数使用
人工智能·学习·yolo
jackson凌2 小时前
【Java学习笔记】SringBuffer类(重点)
java·笔记·学习
极简网络科技3 小时前
Docker、Wsl 打包迁移环境
运维·docker·容器
黑客老李3 小时前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached