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

news2024/11/14 6:08:26

目录

一、端口映射(相当于添加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进行通信

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尝试给docker ubuntu22.04镜像添加远程访问桌面

实在时不愿折腾,但是ubuntu 镜像没有桌面,有些操作实在太难受了,效率也不高。硬着头皮上吧。幸亏这是个docker的镜像。要是个虚拟机,这折腾来去,直接崩溃了。docker的好处就是立马就能从头来过,秒级的删除安…

Hive常见问题汇总

Hive和Hadoop的关系 Hive 构建在 Hadoop 之上, HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任务,如&…

07 队列

目录 1.队列 2.实现 3.OJ题 1. 队列 只允许在一段进行插入数据操作,在另一端进行数据删除操作的特殊线性表,队列具有先进先出FIFO(First In Firtst Out),插入操作的叫队尾,删除操作的叫队头 2. 实现 队列…

PWM调光 降压恒流LED芯片FP7127:为照明系统注入新能量(台灯、GBR、调光电源、汽车大灯)

目录 一、降压恒流LED芯片FP7127 二、降压恒流LED芯片FP7127具有以下特点: 三、降压恒流LED芯片FP7127应用领域: LED照明和调光的新纪元随着LED照明技术的不断发展,人们对于照明调光的需求也越来越高。PWM调光技术作为一种常用的调光方法&…

微软 AD 介绍 | 安全建议 | 防护

介绍: 什么是Active Directory(AD)? Active Directory 是由 微软开发的目录服务,用于存储和管理网络中的资源,如计算机、用户、组和其他网络对象。允许组织管理员轻松地管理和验证网络中的用户和计算机。 …

解决Sublime Text V3.2.2中文乱码问题

目录 中文乱码出现情形通过安装插件来解决乱码问题 中文乱码出现情形 打开一个中文txt文件,显示乱码,在File->Reopen With Encoding里面找不到支持简体中文正常显示的编码选项。 通过安装插件来解决乱码问题 安装Package Control插件 打开Tool->…

[IO复用] IO复用问答

记录一下IO复用相关的基础知识。 文章目录 阻塞和非阻塞同步和异步为什么使用IO复用什么是IO复用IO复用有哪些方式select IO复用poll IO复用epoll IO复用什么时候用select 或者 epoll? select、poll、epoll的区别Windows中的IO复用Reactor模式C10K问题C10M问题 面试…

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用

系列文章目录 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 在一个人体姿态估计的任务中,需要用深度学习模型…

【Vue3】组件通信

Vue3组件通信和Vue2的区别: 移出事件总线,使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西,合并到$attrs中了。$children被砍掉了。 1. props 若 父传子:属性值是非函数。若 子传父&…

【解决】IntelliJ IDEA 重命名 Shift + F6 失效

IntelliJ IDEA 重命名 Shift F6 失效 问题解决 问题 Idea 重命名 Shift F6 ,一直没反应 解决 调查发现原因是微软新版的输入法冲突了。需要设置【使用以前版本的微软拼音输入法】解决兼容性。 设置 -> 时间和语言 -> 区域 -> 语言选项 -> 键盘选项…

ELK之使用Grafana读取ES集群的Nginx日志进行分析展示

一、前提: 直通车 ------------>↓↓↓↓↓↓ 需要ES集群 https://blog.csdn.net/wdy_2099/article/details/125441436需要filebeat https://blog.csdn.net/wdy_2099/article/details/125445893需要logstash https://blog.csdn.net/wdy_2099/article/details/1…

技术变革下职业危机

方向一:技术变革 1.人工智能(AI):AI技术的快速发展正在改变各个行业。AI在医疗诊断、金融分析、客户服务以及物流管理等方面都有广泛应用,提高了效率和准确性。但同时也引发了一些道德和道德问题,比如隐私…

Redis的五种常用数据类型详解及相关面试问题

目录 Redis的五种常用数据类型详解 简述 Redis五种基本数据类型 String字符串 常用命令 应用场景 Hash散列表 常用命令 使用场景 List链表 常用命令 应用场景 Set( 集合) 常用命令 应用场景 SortedSet( 有序集合) zset 常用命令介绍 应用场景 面试题常问的数…

【MySQL】打开科技创新的第一生产力

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-EtRkflNU19AGWAkT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

景联文科技大模型数据集更新!教育题库新增高质量数学题、逻辑推理题及英文题

苏格拉底曾以“点燃火焰”的理念来诠释教育。随着大语言模型在教育中的不断应用,教育与AI的深度融合,让我们看到了“点燃火焰”的理念的更多可能性。 大语言模型可以通过与学生的互动,为他们提供个性化的学习体验,更好地满足学习需…

Maven简述

Maven是用于管理和构建Java项目的工具,提供了一套标准化的项目结构,提供了一套标准化的构建流程,提供了一套依赖管理机制,通过Maven使得所有IDE构建的项目结构完全一样,让项目可以通用。 项目名称下分为src 和 pom.xm…

差分进化算法求解基于移动边缘计算 (MEC) 的无线区块链网络的联合挖矿决策和资源分配(提供MATLAB代码)

一、优化模型介绍 在所研究的区块链网络中,优化的变量为:挖矿决策(即 m)和资源分配(即 p 和 f),目标函数是使所有矿工的总利润最大化。问题可以表述为: max ⁡ m , p , f F miner …

Linux系统SSH远程管理服务

目录 一、SSH服务介绍 1、SSH协议是什么? 2、SSH的优点 3、SSH的客户端与服务端 4、SSH的原理 4.1 公钥首次连接原理 4.2 ssh加密通讯原理 4.2.1 对称加密 4.2.2 非对称加密 4.2 ssh远程登录 二、服务端配置 1、常见配置项 1.1 修改默认端口 1.2 禁止…

Transformer and Pretrain Language Models3-1

content transformer attention mechanism transformer structure​​​​​​​ pretrained language models language modeling pre-trained langue models(PLMs) fine-tuning approaches PLMs after BERT applications of masked LM frontiers of PLMs …

【Godot4自学手册】第四节动画状态机-AnimationTree

各位同学大家好!今天继续学习Godot4,本节将要学习AnimationTree,来实现控制主人公的动画。 一、AnimationPlay节点介绍 Godot引擎通过AnimationPlay节点实现了最灵活的动画系统,它几乎可以给godot中的任意节点的任意属性添加动画…