当前位置: 首页 > news >正文

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

文章目录

  • 一、container
    • 应用示例
      • 1.需要共用同一个端口的服务,不适用container方式
      • 2.可用示例
      • 3.停掉共享源的容器,其他容器只有本地回环lo地址
    • 总结
  • 二、自定义网络
    • 应用示例
      • 默认bridge,容器间ip通信
      • 默认bridge,容器间服务名不通
    • 自定义网络
    • 总结
  • 三、尝试看图

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

一、container

应用示例

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

# 启动一个容器,使用默认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.可用示例

# 启动一个容器,使用默认bridge的network
docker run -itd --name alpine alpine:latest /bin/sh
# 启动一个容器,使用alpine 容器的网络
docker run -itd --network container:alpine --name alpine1 alpine:latest /bin/sh

在这里插入图片描述

# 进入容器查看网络
docker exec -it alpine /bin/sh
ifconfig
exit
docker exec -it alpine1 /bin/sh
ifconfig
exit

可以看到两个容器的ip是同一个,他们都是eth0 172.17.0.3
在这里插入图片描述

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

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

在这里插入图片描述

总结

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

二、自定义网络

应用示例

默认bridge,容器间ip通信

# 启动一个容器,默认网络
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

在这里插入图片描述在这里插入图片描述

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

在这里插入图片描述
结论:默认bridge的情况下,使用docker内部分配的ip,容器之间可以通过ip通信

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

docker exec -it u1 /bin/bash
ping u2

在这里插入图片描述
结论:默认bridge的情况下,容器之间不可以通过服务名通信

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

自定义网络

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

在这里插入图片描述在这里插入图片描述

docker exec -it u70 /bin/bash
ping u71

在这里插入图片描述

总结

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

三、尝试看图

学到这里应该能大体看懂这个图了,细品一下吧~
在这里插入图片描述

相关文章:

  • 【自然语言处理】【大模型】 ΨPO:一个理解人类偏好学习的统一理论框架
  • Flink1.17实战教程(第二篇:DataStream API)
  • 云原生机器学习平台cube-studio开源项目及代码简要介绍
  • Python 网络编程之搭建简易服务器和客户端
  • 智慧监控平台/AI智能视频EasyCVR接口调用编辑通道详细步骤
  • andriod安卓水果商城系统课设
  • 程序员如何高效学习技术?
  • 算法设计与分析 | 矩阵连乘
  • 清除conda和pip缓存的方法
  • STM32 基础知识(探索者开发板)--103讲 通用定时器
  • MACBOOK 通过iterm2连接堡垒机跳转服务器
  • 【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果
  • json转换(json与对象互转、json与list互转、JSONObject与Map互转)
  • SketchUp各版本安装指南
  • HackTheBox - Medium - Linux - Jupiter
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 2018一半小结一波
  • Android Volley源码解析
  • CSS居中完全指南——构建CSS居中决策树
  • ERLANG 网工修炼笔记 ---- UDP
  • ESLint简单操作
  • Java反射-动态类加载和重新加载
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Magento 1.x 中文订单打印乱码
  • orm2 中文文档 3.1 模型属性
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 后端_ThinkPHP5
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • AI算硅基生命吗,为什么?
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #{}和${}的区别是什么 -- java面试
  • #pragma pack(1)
  • #vue3 实现前端下载excel文件模板功能
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (七)Java对象在Hibernate持久化层的状态
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (三)mysql_MYSQL(三)
  • (转)C#调用WebService 基础
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .Net Core和.Net Standard直观理解
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET学习全景图
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [CodeForces-759D]Bacterial Melee