分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

Docker 外部访问容器Pp、数据管理volume、网络network 介绍

发布时间:2023-09-06 02:21责任编辑:胡小海关键词:数据管理Docker

Docker 外部访问容器Pp、数据管理volume、网络network 介绍 

外部访问容器

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来 指定端口映射。

当使用 -P 标记时,Docker 会随机映射一个端口到内部容器开放的网络端口。

╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:11:27╰─(??_?) ?docker run -tid --name redis -P redis344ea0c6b48a9db551f530998ce901347d72ba9b03a82628979aaddd53189fe7╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:11:32╰─ヾ(;?;Д;?;)?? ?docker psCONTAINER ID ???????IMAGE ??????????????COMMAND ?????????????????CREATED ?????????????????STATUS ?????????????PORTS ????????????????????NAMES344ea0c6b48a ???????redis ??????????????"docker-entrypoint.s…" ??Less than a second ago ??Up 2 seconds ???????0.0.0.0:32769->6379/tcp ??redis

 当使用-p标记时,Docker会映射一个指定端口到内部容器开放的网络端口。

╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:11:34╰─╰(*°▽°*)╯ ?docker run -tid --name redis-1 -p 6380:6379 redis4b10e4b28fe7125fb40b8a338f6bb225ef3e4e5917722d63af61e300857a2220╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:13:27╰─(??_?) ?docker psCONTAINER ID ???????IMAGE ??????????????COMMAND ?????????????????CREATED ?????????????????STATUS ?????????????PORTS ????????????????????NAMES4b10e4b28fe7 ???????redis ??????????????"docker-entrypoint.s…" ??Less than a second ago ??Up 2 seconds ???????0.0.0.0:6380->6379/tcp ???redis-1

数据卷

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特 性:

  • 数据卷 可以在容器之间共享和重用
  • 对 数据卷 的修改会立马生效
  • 数据卷 默认会一直存在,即使容器被删除

启动一个挂载数据卷的容器并映射端口,将宿主机的 8088映射到nginx容器的80端口,将指定目录/Users/will映射到宿主机的根目录。

╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:00:50╰─ε=ε=ヾ(;?д?)/ ?docker run -tid --name nginx -v /Users/will:/usr/share/nginx/html -p 8088:80 nginx 4d95127b3a60393fe8e078bce8919a53c8f2566066e4968b6a7f73cc1e22176d

通过inspect查看mounts,ports。

"Mounts": [  {    "Type": "bind",    "Source": "/Users/will",    "Destination": "/usr/share/nginx/html",    "Mode": "",    "RW": true,    "Propagation": "rprivate"  }],"Ports": {  "80/tcp": [    {      "HostIp": "0.0.0.0",      "HostPort": "8088"    }  ]}

通过在宿主机创建文件测试,在终端显示“helloworld”,则完成。

╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:02:52╰─(?? ??_??)? ?touch index.html╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:03:02╰─?(?﹏?、)? ?echo "helloworld" > index.html ╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:03:09╰─(*′?д?)? ?curl localhost:8088helloworld

容器互联network

随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器, 而不是使用 --link 参数。

下面先创建一个新的 Docker 网络。

╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:19:21╰─(??Д?)? ??docker network create -d bridge my-netc90d0b1e79783e673f58f1ec2b2c472f034693eca54296adb364351091f0b9fb
  • -d 参数指定 Docker 网络类型,有 bridge overlay 。

创建2个容器并连接到新建的 my-net 网络,通过第2个容器ping第一个容器,如:在busybox2中pingbusybox1,查看是否能够连接成功。

╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:19:22╰─(o﹃o) ??docker run -it --rm --name busybox1 --network my-net busybox sh/ #╭─will in ~ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????11:09:29╰─ε=ε=ヾ(;?д?)/ ?docker run -it --rm --name busybox2 --network my-net busybox sh / # ping busybox1PING busybox1 (172.26.0.2): 56 data bytes64 bytes from 172.26.0.2: seq=0 ttl=64 time=0.148 ms64 bytes from 172.26.0.2: seq=1 ttl=64 time=0.291 ms
  • 这样, busybox1 容器和 busybox2 容器建立了互联关系。
╭─will in ~/will/project/cluster ??????????????????????????????????????????????????????????????????????????????????????????????????????????????11:23:33╰─(?3?)~? ?docker psCONTAINER ID ???????IMAGE ??????????????COMMAND ?????????????????CREATED ?????????????STATUS ?????????????PORTS ????????????????????NAMES47215f45415c ???????busybox ????????????"sh" ????????????????????About a minute ago ??Up About a minute ????????????????????????????busybox24af85ed6478c ???????busybox ????????????"sh" ????????????????????2 minutes ago ???????Up 2 minutes ?????????????????????????????????busybox1

 

总结

  • 通过宿主机端口映射到容器,可以在宿主机方便的开启多个服务,例如多个redis、mysql、nginx服务,而不再需要在宿主机做更多配置的变更。
  • 通过数据卷可以将宿主机的数据目录挂载到容器中,利用容器的环境各种服务运行已有的数据目录,而不在需求在宿主机部署环境,docker环境也容易部署,减少了宿主机环境部署的复杂性。
  • 通过网络network可以将多个容器连接在一起,容器间的通信即可以使用容器名,而不再使用IP,IP的变动的,而容器名是可以自定义的,例如我们在使用nginx配置的时候,需要关联php环境的配置,则此时,我们就可以通过容器名在docker-compose中定义好,而不再需要使用IP。部署集群也是同样好处。

Docker 外部访问容器Pp、数据管理volume、网络network 介绍

原文地址:https://www.cnblogs.com/will-xz/p/9910341.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved