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

多容器运行

  1. 网络互联(默认容器与容器之间、容器和主机之间不会进行网络互联)
  • 容器和主机之间的网络互联(通过-p参数端口映射来实现)
  • 容器和容器之间的网络互联(通过多容器运行来实现)
  1. 容器和容器之间的互联
  • 直接创建两个容器,查看是否能够互相访问
  • 当两个容器都可以联通网络的时候,可以通过ip地址来互相访问
# 分别在两个终端创建两个容器a1、a2
sudo docker run -it --name a1 alpine ash
sudo docker run -it --name a2 alpine ash
# 再打开一个终端,通过命令查看两个容器的ip地址(默认容器的网络模式是bridge)
docker network inspect bridge # 分别在两个容器中执行 ping ip地址 的命令,能ping通
# 再次分别在两个容器中执行 ping 容器名 的命令,不能ping通

以上实验说明容器之间不能通过name访问对方

  • 通过自定义网络的形式创建容器 ,查看是否能够互相访问
#创建自定义的网络模式
docker network create --driver bridge testnet
# 查看网络模式信息(会出现自己创建的testnet)
docker network ls
# 分别在两个终端创建两个容器a3、a4
docker run -it --name a3 --network testnet alpine ash
docker run -it --name a4 --network testnet alpine ash
# 再打开一个终端,通过命令查看两个容器的ip地址(默认容器的网络模式是bridge)
docker network inspect bridge # 分别在两个容器中执行 ping ip地址 的命令,能ping通
# 再次分别在两个容器中执行 ping 容器名 的命令,能ping通

使用名字进行ping 的原因:两个容器通过名字ping通有意义,因为ip会变,ip不好记,但是电脑(容器)的名字比较固定,知道名字后,两个容器就能通信,程序也会比较固定

  • 同时启动多个容器,并将他们互联(docker compose)
# 创建docker-compose.yml文件和workspace文件夹
mkdir workspace && nano docker-compose.yml
    • 在docker-compose.yml中写入以下信息
services: # 容器/服务jupyter:image: jupyter/scipy-notebook:latest  # Jupyter Notebookcontainer_name: jupyter_notebookports:- "8888:8888"volumes:- ./workspace:/home/jovyan/work  # 共享目录environment:- JUPYTER_ENABLE_LAB=yescommand: start-notebook.sh --NotebookApp.token=''api:image: python:3.9-slim  # 轻量级 Pythoncontainer_name: fastapi_serverports:- "8000:8000"volumes:- ./workspace:/app  # 共享目录,FastAPI 可以访问 Jupyter 代码working_dir: /appcommand: >sh -c "pip install fastapi uvicorn && uvicorn main:app --host 0.0.0.0 --port 8000 --reload"
    • 在workspace文件夹下创建main.py文件,并写入以下信息:
# 在 workspace/main.py 里写入以下代码
from fastapi import FastAPIapp = FastAPI()@app.get("/") 
def home():return {"message": "FastAPI is running!"}@app.get("/predict/{x}")
def predict(x: float):return {"input": x, "prediction": x + 2} 
    • 在本机目录下输入以下命令创建、运行多个容器
# 同时启动多个容器
docker compose up 
# 浏览器输入 http://localhost:8888,查看容器运行信息
# 浏览器输入 http://localhost:8000,查看容器运行信息# 在打开一个终端查看网络模式,发现自动创建一个自定义的网络模式(其中就是启动的多个容器所遵循的网络模式)
docker network ls
    • 在jupyter notebook中输入以下python代码,查看是否能够请求到另一个容器
import requests# FastAPI 的服务地址(使用容器名 "api")
url_1 = "http://api:8000"# 调用根路径,即在浏览器中请求http://api:8000/
r1 = requests.get(f"{url_1}/")
print("GET /:", r1.json())# 调用 /predict 接口
# 相当于在浏览器内请求http://api:8000/predict/{x}
x = 10
r2 = requests.get(f"{url_1}/predict/{x}")
print(f"GET /predict/{x}:", r2.json())
    • 将同时启动的所有容器停掉
# 发现容器记录和临时创建的自定义的网络模式全部被删除
docker compose down

相关文章:

  • Python训练营打卡DAY20
  • Android应用隐私合规:解决极光推送SDK提前收集WiFi信息问题
  • 三维底座+智能应用,重构城市治理未来
  • 【计算机视觉】OpenCV项目实战:get_inverse_perspective:基于OpenCV的透视图转化为不同平面
  • Uniapp编写微信小程序,使用canvas进行绘图
  • 企业如何将钉钉付款单高效集成到金蝶云星空?
  • 数智读书笔记系列032《统一星型模型--一种敏捷灵活的数据仓库和分析设计方法》
  • 开源数字人框架 AWESOME - DIGITAL - HUMAN:技术革新与行业标杆价值剖析
  • 从“山谷论坛”看AI七剑下天山
  • 十三、基于大模型的在线搜索平台——整合function calling流程
  • 【大语言模型ChatGPT4/4o 】“AI大模型+”多技术融合:赋能自然科学暨ChatGPT在地学、GIS、气象、农业、生态与环境领域中的应用
  • 捌拾叁- 量子傅里叶变换
  • 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读
  • CSS:盒子模型
  • C# NX二次开发:宏录制实战讲解(第一讲)
  • 当当网Top500书籍信息爬取与分析
  • CSS transition过渡属性
  • # 交换排序:从冒泡到快速排序的深度解析
  • 全新UI彩虹外链网盘系统源码v5.6/前后端美化模板/整站+模版文件
  • 何时需要import css文件?怎么知道需要导入哪些css文件?为什么webpack不提示CSS导入?(导入css导入规则、css导入规范)
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役
  • 纽约大学朗格尼医学中心的转型带来哪些启示?
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 视频|漫画家寂地:古老丝路上的文化与交流留下的独特印记
  • 深圳下调公积金利率,209万纯公积金贷款总利息减少9.94万
  • 趣看 | 五一黄金周:你拍风景,拍风景的人在拍你