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

外部访问容器

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

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

╭─will in ~                                                                                                                                    11:11:27
╰─(。ŏ_ŏ) docker run -tid --name redis -P redis
344ea0c6b48a9db551f530998ce901347d72ba9b03a82628979aaddd53189fe7 ╭─will in ~ 11:11:32
╰─ヾ(;゚;Д;゚;)ノ゙ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
344ea0c6b48a 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 redis
4b10e4b28fe7125fb40b8a338f6bb225ef3e4e5917722d63af61e300857a2220 ╭─will in ~ 11:13:27
╰─(。ŏ_ŏ) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b10e4b28fe7 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:8088
helloworld

容器互联network

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

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

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

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

╭─will in ~                                                                                                                                    11:19:22
╰─(º﹃º) 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 busybox1
PING busybox1 (172.26.0.2): 56 data bytes
64 bytes from 172.26.0.2: seq=0 ttl=64 time=0.148 ms
64 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47215f45415c busybox "sh" About a minute ago Up About a minute busybox2
4af85ed6478c 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 介绍的更多相关文章

  1. Docker外部访问容器

    容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放 ...

  2. Docker 中的网络功能介绍 外部访问容器 容器互联 配置 DNS

    Docker 中的网络功能介绍 | Docker 从入门到实践 https://vuepress.mirror.docker-practice.com/network/ Docker 允许通过外部访问 ...

  3. Docker网络管理-外部访问容器

    注意:这里使用的方法是端口映射,需要说明的是端口映射是在容器启动的时候才能完成端口映射的. 1,搭建1个web服务器,让外部机器访问. docker run -itd centos /bin/bash ...

  4. docker外部执行容器内部命令

    docker exec jenkins 'cat /var/jenkins_home/secrets/initialAdminPassword'

  5. Unity3d 网络编程(一)(Unity3d内建网络Network介绍)

    首先个人说说题外话,Unity3d使用的网络库核心是用C++实现的一款商业网络游戏引擎库. RakNet.所以对于移动设备来说,用Unity3d来写server是全然能够的,而且内建网络库的各项功能封 ...

  6. Docker - 访问容器

    容器具有自己的内部网络和ip地址,具体信息可以查看docker inspect命令结果的"NetworkSettings"部分. 如果想要从外部访问容器中的应用,可以通过docke ...

  7. Docker操作笔记(四)使用网络

    使用网络 Docker允许通过外部访问容器或容器互联的方式来提供网络服务. 一.外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当 ...

  8. 5.docker学习之容器

    容器创建 我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器.同样,如果我们想要使用容器,那么我们必须首先需要创建容器.而 ...

  9. Docker网络模式介绍

    一.概述 docker的网络驱动有很多种方式,按照docker官网给出的网络解决方案就有6种,分别是:bridge.host.overlay.macvlan.none.Network plugins, ...

随机推荐

  1. 实用小工具:screen

    实用小工具:screen 首先,吹爆screen screen,实现了不间断的会话服务,通过SSH连接至远程服务器,当使用了screen开启的会话,不会因为你断开SSH而中断在远程服务器上运行的命令. ...

  2. [BZOJ3307] 雨天的尾巴-----------------线段树进阶

    虽然是个板子,但用到了差分思想. Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最 ...

  3. Vulnstack内网靶场3

    Vulnstack内网靶场3 (qiyuanxuetang.net) 环境配置 打开虚拟机镜像为挂起状态,第一时间进行快照,部分服务未做自启,重启后无法自动运行. 挂起状态,账号已默认登陆,cento ...

  4. reorder-list leetcode C++

    Given a singly linked list L: L 0→L 1→-→L n-1→L n, reorder it to: L 0→L n →L 1→L n-1→L 2→L n-2→- You ...

  5. popStar手机游戏机机对战程序

    DFS算,五分钟如果答案没有更新,那个解一般来说就很优了. #include <cstdio> #include <iostream> #include <string. ...

  6. js 组合继承详解

    目录 前言 原型链继承 构造函数继承 组合继承 前言 首先学习继承之前,要对原型链有一定程度的了解. 不了解可以去先阅读我另一篇文章,里面对原型链有一个较为详细的说明:js 原型链详解. 如果已经了解 ...

  7. idea连接数据库时区错误

    错误界面 IDEA连接mysql,地址,用户名,密码,数据库名,全都配置好了,点测试连接,咔!不成功! 界面是这样的, 翻译过来就是:服务器返回无效时区.进入"高级"选项卡,手动设 ...

  8. The 'stream().forEach()' chain can be replaced with 'forEach()' (may change semantics)

    对集合操作时,因不同的写法Idea经常会提示:The 'stream().forEach()' chain can be replaced with 'forEach()' (may change s ...

  9. 简单的SQl时间序列生成,每次时间间隔10分钟。

    create table #timeseries(Times datetime not null) go declare @firstdate datetime , @lastdate datetim ...

  10. 暑假算法练习Day3

    第三天!!!最近要开始归纳总结Python学习啦!! 1006 换个格式输出整数 (15 分) 让我们用字母 B 来表示"百".字母 S 表示"十",用 12. ...