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

这篇具有很好参考价值的文章主要介绍了【云原生】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
##指定映射端口

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka 【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka 

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

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka 

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

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

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

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

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

先关闭容器,然后查看容器的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]#

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

vim hostconfig.json 

"HostPort":"5566"

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

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

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka 

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

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

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

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

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

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

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

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


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

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

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

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

 【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

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

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

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

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

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

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

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

创建数据卷的时候 将宿主机的目录挂载到了数据卷中,然后再将新的容器将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

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

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

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

#创建并运行源容器取名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进行通信

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka

【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联,云原生,docker,容器,分布式,数据库,运维,kafka 文章来源地址https://www.toymoban.com/news/detail-823574.html

到了这里,关于【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker容器修改端口映射

    (1) 在不删除现有容器的情况下, 修改原有容器的端口映射; (2) 创建容器的时候指定了一个端口映射, 但是创建之后的容器存在多个端口映射; 1 首先创建一个容器并指定端口映射; 2 实际容器存在连个端口映射 1、停止容器 docker stop 容器id 2、停止docker服务

    2024年02月08日
    浏览(43)
  • docker容器添加对外映射端口

    在容器首次启动是,可通过-p参数(-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如: 上述命令将容器内的80端口映射到宿主机的8088端口。 参数说明 -d 表示后台运行容器 -t 为docker分配一个伪终端并绑定到容器的标准输入上 -i 是让容器

    2024年02月09日
    浏览(36)
  • docker 容器修改端口和目录映射

    一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 这里是将容器内的80端口映射到宿主机的8088端口 参数说明 -d 表示后台运行容器 -t 为docker分配一个伪终端并绑定到容器的标准输入上

    2024年04月26日
    浏览(50)
  • Docker给容器添加新端口映射

    Docker容器创建后,其网络配置通常是固定的,包括端口映射。基于Docker的原生工具,一旦容器启动,就无法直接修改其端口映射。然而,有几种方法可以解决需要对现有容器添加新端口映射的问题。 最直接的方法是创建一个新的容器,并在创建时指定所有需要的端口映射。这

    2024年03月28日
    浏览(51)
  • 如何修改docker容器的端口映射

    要修改 Docker 容器的端口映射,你需要停止并删除现有的容器,然后使用新的端口映射重新运行容器。以下是详细步骤: 停止容器 : 使用 docker stop 命令停止正在运行的容器。替换 container_id 为你要停止的容器的 ID 或者容器的名称。 删除容器 : 使用 docker rm 命令删除已停止

    2024年02月22日
    浏览(37)
  • Docker修改容器已经映射的端口

    Docker启动容器后,需要新增或者修改端口映射 修改配置文件更改端口 关闭容器 需要先关闭Docker,否则配置不生效 查看容器挂载目录 修改配置 修改 hostconfig.json 文件 修改 config.v2.json 文件 并不需要修改Ports,只有在你没有stop容器时,Ports才会有值,如果关闭了容器,就是空数

    2024年02月05日
    浏览(46)
  • docker 容器如何查看正在运行容器的端口映射

    1、查看docker容器的版本 2、查看正在运行的容器 3、查看容器的端口映射 总结:到此就完成了查看正在运行容器的端口映射.

    2024年02月12日
    浏览(41)
  • Docker中对已存在运行的容器修改端口映射和容器卷映射

    一、初次创建容器,指定宿主机和容器端口的映射,如下示例: 二、对已存在运行容器,更改端口 方式一:(删了原来的,根据image重做) 1、停止容器 2、将容器打包成镜像 3、用“一”中的命令,通过新镜像开启新容器 方式二:(直接修改现有容器) 1、停止容器 2、查找

    2024年02月16日
    浏览(45)
  • docker为已启动的容器添加端口映射

    针对已运行的容器添加端口映射 1、查看容器是否映射端口 有端口映射: 无端口映射: 2、查看容器完整Id 3、进入docker容器目录查看 4、根据得到的容器完整id进入目录 目录中分别有两个文件: hostconfig.json 和 config.v2.json ,直接查看文件内容比较混乱可以下载到本机,使用

    2024年02月16日
    浏览(45)
  • 修改docker容器端口映射到主机的方法

    如何修改已经创建好的容器的映射端口 我们都知道docker在创建时可以指定端口映射,但是容器一旦创建好,就没有命令支持直接修改映射端口。如果我们已经对容器里面的内容已经做了一定更改,不能删除进行重建,怎么办呢?通常间接的办法是,保存镜像,再创建一个新的

    2024年02月14日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包