【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联

目录

一、端口映射(相当于添加iptables的DANT)

二、数据卷创建(宿主机目录或文件挂载到容器中)

三、数据卷容器(多个容器通过同一个数据卷容器为基点,实现所有容器数据共享)

四、容器互联(可以通过容器名称或连接别名通信)


一、端口映射(相当于添加iptables的DANT)

在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务的。

端口映射机制将容器内的服务提供给外部网络访问,实际上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可以访问容器内的服务。

两种方式

[root@localhost ~]#docker run -d --name test01 -P nginx:test
###随机映射端口 (从32768开始)

[root@localhost ~]#docker run -d --name test02 -p 1314:80 nginx:test
##指定映射端口

 

 

原理:实际上就是创建了一条iptables规则DNAT规则

 

拓展:如何针对已经自定义的端口号,修改为新的端口号

方式一:将当前容器打包成镜像,重新指定映射端口,创建新的容器

就是类似于容器迁移 先快照保存,然后在本地导入,再重新docker run 去指定映射端口,但是容器的ip会变化,除非把原有的容器删除,然后再通过自定义网络模式去指定相同的ip

方式二:直接在原容器上进行修改

先关闭容器,然后查看容器的Id,然后进去docker管理容器的目录,修改hostconfig.json和config.v2.json文件;然后重启docker,重启容器。这种方式,一旦重启docker会让所有的容器停止。

##停止容器
[root@localhost opt]#docker stop test01
test01

##查看容器的id
[root@localhost opt]#docker inspect test01 |grep Id
        "Id": "0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e",

##进入docker管理容器的库目录
[root@localhost opt]#cd /var/lib/docker/containers/0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e

[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#ls
0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e-json.log  config.v2.json   hostname  mounts       resolv.conf.hash
checkpoints                                                                hostconfig.json  hosts     resolv.conf

##修改hostconfig.json 配置文件和config.v2.json配置文件
[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#vim hostconfig.json 

[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#vim config.v2.json 

##重启docker
[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#systemctl restart docker.service 

##查看容器端口是否修改
[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#docker inspect test01|grep 5566
                        "HostPort": "5566"

##重启容器
[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#docker start test01
test01

[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS         PORTS                                   NAMES
0a242c04664b   nginx:test01   "nginx -g 'daemon of…"   5 minutes ago   Up 4 seconds   0.0.0.0:5566->80/tcp, :::5566->80/tcp   test01
[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#curl 192.168.20.10:5566
this is test01
[root@localhost 0a242c04664bb5242624b5d40defa2e1b3936e510b5d60ea043bf880f659e31e]#

vim hostconfig.json 

"HostPort":"5566"

vim config.v2.json
##如果有的话
"HostPort":"5566"

 

拓展:关于-p指定端口映射,还有很多方式

二、数据卷创建(宿主机目录或文件挂载到容器中)

因为容器的数据是临时的,一旦容器被删除,数据将永久丢失。想要将容器中的数据持久化,可以将宿主机目录挂载到容器中。

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

宿主机的目录可以同时挂载到多个容器中,可以实现基于宿主机将容器之间的数据进行共享!!

注意:一般只建议在创建容器时进行挂载,不建议启动容器后再挂载。因为启动容器后再挂载的话,需要修改配置文件,且不一定能挂载成功。

docker run -d -v 宿主机目录:数据卷  镜像名称:标签   #将宿主机目录挂载到容器中
 #注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
 #挂载后的目录默认可读可写
 ##如果想要修改为只读,那么为
docker run -d -v 宿主机目录:数据卷:ro  镜像名称:标签


也可以直接创建单独的数据卷,不挂载
 docker run -v 数据卷              #在容器内创建数据卷

 容器通过宿主机作为基点,可以实现文件共享 

宿主机的目录可以同时挂载到多个容器中,可以实现基于宿主机将容器之间的数据进行共享!!

 

 宿主机挂载到容器目录中,并设置为只读

 #如果希望挂载后的目录为只读目录,可以在挂载时加:ro参数
 docker run -v 宿主机目录:数据卷:ro    #将宿主机目录挂载到容器中,只可读

三、数据卷容器(多个容器通过同一个数据卷容器为基点,实现所有容器数据共享)

直接创建数据卷,也可以创建多个数据卷。让容器之间基于数据卷容器,实现数据共享

docker run -itd --name cc01 -v /data -v /mnt nginx:test01
##在cc01容器中创建两个数据卷

docker exec -it test01 sh
##进入容器完成测试文件编写

 #使用--volumes-from 来挂载cc01容器中的数据卷到新的容器cc02和cc03中
[root@localhost data]#docker run -d --name cc02 --volumes-from cc01 nginx:test01

[root@localhost data]#docker run -d --name cc03 --volumes-from cc01 nginx:test01

创建数据卷的时候 将宿主机的目录挂载到了数据卷中,然后再将新的容器将test01容器的数据卷挂载到新创建的容器中

这样既可以实现数据的持久化,同时性能比较高,因为容器之间的通信比较块

#创建数据卷容器test01。创建/usr/share/nginx/html数据卷。
docker run -d --name test01 -v /data/:/usr/share/nginx/html:ro nginx:test01
 
 #使用--volumes-from 来挂载test01容器中的数据卷到新的容器test03和test04中
docker run -d --name test03 -p 9998:80 --volumes-from test01 nginx:test01

docker run -d --name test04 -p 9997:80 --volumes-from test01 soscscs/myapp:v1

##可以进去查看目录 
docker exec -it test03 sh 
cd /usr/share/nginx/html
ls
完成验证

##因为做了端口映射
或者使用curl 访问ip

四、容器互联(可以通过容器名称或连接别名通信)

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之问建立一条隧道,接收容器可以看到源容器指定的信息。

#创建并运行源容器取名test01
docker run -d --name test01 nginx:test01
 #创建并运行接收容器取名test02,使用--link选项指定连接容器test01以实现容器互联。

 docker run -itd --name test02 --link test01:aa centos:7 /bin/bash
 ##--link 容器名:连接的别名
 ​
 #进test02容器,ping test01,通过容器名称或者别名都可以通信
 docker exec -it test02 bash
ping test01
ping aa 
 #可以看到c1容器的IP地址
 ​
#创建容器test03,没有与test01做互联
docker run -d --name test03 nginx:test01
 docker exec -it test03 bash      #进入容器c5
 #通过c1的容器名称和别名,都无法和c1通信
/ # ping test01
ping: bad address 'test01'
/ # ping aa
ping: bad address 'aa'
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
 #只能通过IP进行通信

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/346640.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker容器引擎(2)

目录 一.批量删除镜像,容器 二.Docker 网络实现原理 随机映射端口(从32768开始) 访问自己: 在10服务器上配置路由转发: 指定映射端口: 查看容器的输出和日志信息: 将宿主机目标|文件挂载…

司铭宇老师:员工心态培训:正确对待工作的七种心态:让你在工作中游刃有余

员工心态培训:正确对待工作的七种心态:让你在工作中游刃有余 工作,是我们生活的核心组成部分。它不仅关乎我们的物质生活,更影响着我们的精神世界。如何在工作中找到平衡,实现自我价值,成为许多人心中的困…

oracle19.22的patch已发布

2024年01月16日,oracle发布了19.22的patch 具体patch如下 Reserved for Database - Do not edit or delete (Doc ID 19202401.9) 文档ID规则如下 19(版本)+年份(202x)+(季度首月01,04,07,10).9 往期patch no信息和下载参考文档 oracle 19C Release Update patch num…

Allegro因为精度问题导致走线未连接上的解决办法

Allegro因为精度问题导致走线未连接上的解决办法。还有在用Allegro进行PCB设计时,因为不小心操作移动了芯片,导致导线和引脚未连接上,也可以使用这个方法。 选择菜单Tools→Derive Connectivity(获取连接) 跳出下面的对话框, Convert Line to Connect Lines

SQL注入实战:宽字节注入

一、宽字节概率 1、单字节字符集:所有的字符都使用一个字节来表示,比如 ASCII编码(0-127) 2、多字节字符集:在多字节字符集中,一部分字符用多个字节来表示,另一部分字符(可能没有)用 单个字节来表示。 3、宽字节注入是利用mysql的一个特性…

人工智能在教学领域中有哪些运用?

人工智能在教学领域中可以有以下几种运用: 1. 智能辅助教学:利用人工智能技术开发出智能辅助教学系统,根据学生的学习状态和知识背景,提供个性化的学习路径和推荐的学习资源,帮助学生更好地掌握知识。 2. 自适应评估…

如何使用宝塔面板配置Nginx反向代理WebSocket(wss)

本章教程,主要介绍一下在宝塔面板中如何配置websocket wss的具体过程。 目录 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 2、代理配置内容 三、注意事项 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 map $http_upgrade $connection_…

Biotin-PEG4-TSA,生物素-PEG4-酪胺,用于标记蛋白质、核酸等生物分子

您好,欢迎来到新研之家 文章关键词:Biotin-PEG4-Tyramide,Biotin-PEG4-TSA,生物素-PEG4-酪胺,Biotin PEG4 Tyramide,Biotin PEG4 TSA 一、基本信息 产品简介:Biotin PEG4 Tyramide is compos…

【力扣每日一题】力扣2859计算k位置下标对应元素的和(bitCount源码分析及实现)

题目来源 力扣2859计算k位置下标对应元素的和 题目概述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1…

老子云-三维模型优化

轻量化服务 减面模式 适用于家装、游戏、电商产品等需要保留部件且精细结构多的模型 保留原始模型网格对象、UV和动画,仅使模型网格更轻量,新增GPU减面模式(限时体验),省时更精细 合并模式 不保留原始模型网格和动画,适用于数…

【linux】远程桌面连接到Debian

远程桌面连接到Debian系统,可以使用以下几种工具: 1. VNC (Virtual Network Computing) VNC(Virtual Network Computing)是一种流行的远程桌面解决方案,它使用RFB(Remote Framebuffer Protocol&#xff0…

系统引导程序 Boot Loader——学习笔记

基于嵌入式Linux 的完整系统软件由三个部分组成:系统引导程序、Linux 操作系统内核和文件系统。 系统引导程序 Boot Loader 是系统加电后运行的第一段软件代码,它的作用是加载操作系统或者其他程序到内存中,并将控制权交给它们。 Boot Load…

nodejs学习计划--(六)包管理工具

包管理工具 1. 介绍 包是什么 『包』英文单词是 package ,代表了一组特定功能的源码集合包管理工具 管理『包』的应用软件,可以对「包」进行 下载安装 , 更新 , 删除 , 上传 等操作 借助包管理工具,可以快…

无人机航迹规划(五):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

SpringMVC第四天(SSM整合)

SSM整合流程 1.创建工程 2.SSM整合 ①Spring SpringConfig package com.cacb.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import;…

解析半导体放电管TSS的原理与应用?|深圳比创达电子

随着电子技术的迅速发展,半导体放电管(TSS)已成为电路保护的重要组件。本文旨在全面深入解析半导体放电管TSS的原理与应用,帮助读者更好地理解这一关键元件。 一、半导体放电管TSS的概念与原理 半导体放电管TSS是一种用于保护电…

sheng的学习笔记-神经网络

基础知识 基础知识-什么是分类问题 分类问题是根据已有数据,判断结果是正的还是负的(1或者0),比如: • 根据肿瘤大小,判断肿瘤是良性的还是恶性的 • 根据客户交易行为,判断是否是恶意用户 • 根据邮件情况…

司铭宇老师:手机门店销售培训:手机销售的技巧和方法

手机门店销售培训:手机销售的技巧和方法 在当今这个信息化的时代,手机已经成为了我们生活中不可或缺的一部分。作为手机销售人员,如何在这个竞争激烈的市场中突出重围,实现销售目标,是每一位销售人员都需要思考的问题。…

Unity出AAB包资源加载过慢

1)Unity出AAB包资源加载过慢 2)Unity IL2CPP打包,libil2cpp.so库中没有Mono接口 3)如何在URP中正确打出Shader变体 4)XLua打包Lua文件粒度问题 这是第370篇UWA技术知识分享的推送,精选了UWA社区的热门话题&…

Dify学习笔记-知识库(六)

1、知识库 大多数语言模型采用较为陈旧的训练数据,并且对每次请求的上下文有长度限制。例如 GPT-3.5 是基于 2021 年的语料进行训练的,且有每次约 4K Token 的限制。这意味着开发者如果想让 AI 应用基于最新的、私有的上下文对话,必须使用类…