在Docker使用部分我们接触到了通过网络端口来连接运行在Docker容器内的服务。这是同Docker容器内服务和应用互动的方法之一。在这一节中,我们将带你复习一下通过网络端口连接到Docker容器并给你介绍容器连接的概念。

网络端口映射刷新

在Docker的使用部分中,我们创建了一个运行Python Flask应用的容器。

$ sudo docker run -d -P training/webapp python app.py

注意:容器有一个内部网络和IP地址(还记得在使用Docker部分中我们曾使用docker的监控命令查看容器的IP地址)。Docker可以有各种不同的网络配置。你可以在这里看到Docker网络的更多相关信息。

当我们创建容器时,我们使用-P标志来自动映射任意网络端口到我们Docker主机上介于49000到49900之间的随机高位端口。随后,当我们运行docker ps时,我们会看到5000端口绑定到了49155端口上了。

$ sudo docker ps nostalgic_morse

CONTAINER ID  IMAGE                  COMMAND      CREATED        STATUS        PORTS                    NAMES

bc533791f3f5  training/webapp:latest  python app.py 5 seconds ago  Up 2 seconds  0.0.0.0:49155->5000/tcp  nostalgic_morse

我们同样看到了怎样使用-P标志将一个容器端口绑定到一个指定端口。

$ sudo docker run -d -p 5000:5000 training/webapp python app.py

另外,我们发现这并不是一个好办法,因为它约束我们一个特定端口只能有一个容器.

还有一些其他的使用 -p 的方法。 默认的情况下 -p 会把container的Port绑到宿主机上的所有ip的该端口号上。 (译者:如果你的宿主机有多个IP, 每个IP的那个端口都会被绑到container的那个port上) 我们可以通过指定接口, 例如下面的例子, 端口就只绑定到了 localhost 上。

$ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

这会吧container内部的5000端口绑定到宿主机的 127.0.0.1 的5000端口上去.

如果只指定了网络接口而没有指定端口号, 则container的端口会绑到这个网络接口上的一个随机端口上.

$ sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py

我们还可以使用UDP

$ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

使用 docker port 可以查看当前的container的端口的绑定情况, 和特殊的端口的配置。 例如, 如果我们吧container的端口绑到了宿主机的 localhost, 我们输入 docker port 的时候输出会是:

$ docker port nostalgic_morse

127.0.0.1:49155

注 -p 可以被多次使用用来吧多个container里的port绑定到宿主机上

Docker 容器链接

映射网络端口不是吧container彼此连接起来的唯一方法。Docker的linking系统允许你吧多个 container连接起来, 让他们彼此交互信息。Docker的linking会创建一种父子级别的关系。 父container可以看到他的子container提供的信息。

容器命名

Docker的linking系统依赖于container的名字。我们已经注意到了每个container都会被自动的 分配一个名字, 在本教程里大家可能已经熟悉了 nostalgic_morse 这个名字(译者:docker 自动分配的名字都是确实存在的词, 有些名字比较有意思 例如我的一个container就叫做tender einstein 温柔的爱因斯坦, 对于大多数情况, 这些名字绝对是考验你英语单词量的机会, 比如 backstabbing nobel, stoic carson). 我们可以自己对container命名. 命名有两个用处:

好记 比如命名一个承载web服务的container为web

container 之间可以互相引用, 例如一个 web container 使用一个 db container

通过 --name 可以给container命名, 例如:

$ sudo docker run -d -P --name web training/webapp python app.py

你可以看到我们启动了一个新的container, 启动的时候使用了 --name 命名这个container为 web。 我们可以通过命令 docker ps查看container的名字

$ sudo docker ps -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

aed84ee21bde training/webapp:latest python app.py 12 hours ago Up 2 seconds 0.0.0.0:49154->5000/tcp web

我们也可以用 docker inspect 查看container的名字.

$ sudo docker inspect -f "{{ .Name }}" aed84ee21bde

/web

(译者: 上面那个乖乖的语法源于golang自带的模板语言)

注 Container的名字必须是唯一的。也就是说你只能命名一个container为 web。 要重新使用一个container的名字的时候必须把之前叫这个名字的container删除, 才能 再使用。删除container可以使用 docker rm. 还有个便利的方法就是在启动container的时候 使用 --rm 标记. 这样container停止的时候就会自动被删除。 (译者: 如果你使用过一段时间docker, 用docker ps -a 你可能会发现一大堆的已经停止了的container, 在很多的docker教程里, 在启动container的时候都会带上 --rm.)

linux 运行多个docker,Docker 中如何连接多个 Container 协同工作相关推荐

  1. linux运行c语言pause,c++中的system(pause)的作用和含义解析

    简单来说就是暂停的意思,一般在LINUX编程时会用到,等待接收信号,才会重新运行 . 在进行C/C++编程的时候,在运行程序查看输出效果时,会出现窗口闪一下就关闭的情况. 在C语言中一般通过添加get ...

  2. 运行linux较好的电脑,现在Linux运行在 99.6%的TOP500超级计算机上

    虽然 Linux 在桌面操作系统只有 2% 的市场占有率,但是对于超级计算机来说top500超级计算机排行榜,Linux 用 99% 的市场占有率轻松地获取了统治地位. 运行两台或多台相同或类型相差不 ...

  3. Linux上Redis使用可视化工具RedisDesktopManager远程连接不上

    错误截图(背景:在本地使用可视化工具Redis Desktop Manager远程连接Linux服务器上的 Redis无法连接,非Docker容器中) 连接失败原因一:你的 Redis 没有设置连接的 ...

  4. 在Linux和Windows的Docker容器中运行ASP.NET Core

    译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇 ...

  5. 如何卸载linux中的docker,linux centos7 安装、卸载docker

    docker安装 1:查看系统版本 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 2:安装docker(yum方式) $ y ...

  6. 如何在Docker容器中运行GUI程序

    如何在Docker容器中运行GUI程序 各位,今天我们将学习如何在Docker之中运行GUI程序.我们可以轻易地在Docker容器中运行大多数GUI程序且不出错.Docker是一个开源项目,提供了一个 ...

  7. 实现Mac主机上的Docker容器中的图形界面显示(运行GUI应用)

    我有一个需求: 一方面,我需要在 Docker 容器环境下运行应用(因为有些环境在 Mac 下很难安装配置,并且希望环境干净隔离). 另一方面,容器中的应用又需要进行图形界面的显示. 由于 Docke ...

  8. arm架构linux运行docker失败,armdocker:在x86上模拟运行arm容器

    一.背景 docker 可以在 arm 平台上运行,验证 docker 镜像最直接的方式是在 arm 平台上,但有时候需要在 PC 平台上验证 arm 平台的镜像.本文对此进行介绍. 二.x86依赖环 ...

  9. 代码级操作指南 | 如何在Docker Swarm中运行服务

    最新版本Docker Engine v1.12中,包含了多项与Docker Swarm紧密相关的功能变更.在今天的文章中,数人云将和大家探讨如何利用Docker的Swarm Mode进行服务部署. 在 ...

最新文章

  1. Javascript 数字时钟
  2. iconfont 图标宽高出问题_一个技巧,100,000,000+PPT图标就可以任性使用!【黑科技第11期】...
  3. 每日程序C语言32-取一个整数从右端开始的4-7位
  4. Check failed: error == cudaSuccess (74 vs. 0) misaligned address
  5. CORD 4.1:打造实现边缘计算的最佳平台
  6. nginx向响应内容中追加内容(ngx_http_addition_module模块)
  7. bsc是指什么_为什么KPI令人厌恶?中小企业不要乱用KPI!
  8. PCL1.8.0 error C4996: 'pcl::SAC_SAMPLE_SIZE'编译错误
  9. studio one 3 机架声道设置_雅马哈UR242声卡宿主机架直播跳线设置
  10. 通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译
  11. Maven仓库的下载和配置settings.xml文件
  12. 根据图像匹配实现鼠标自动点击
  13. Twitter技术主管回怼马斯克!马斯克:He’s fired!
  14. IDEA felix osgi项目搭建(1)
  15. matlab选址与GIS选址,ArcGIS入门教程(13)——多条件学校选址分析
  16. 2016年蓝桥杯java——分小组
  17. 网络通信技术--设置IP地址
  18. 如何在3dmax中断开当前选中的链接
  19. lisp角度转换弪度_角度和弧度换算(角度和弧度怎么换算)
  20. 网络安全工程师就业前景

热门文章

  1. OpenCV图像处理使用笔记(五)——图像边界拓展
  2. java 周易解梦接口_周公解梦
  3. protobuf相关:反射、rmi
  4. hash_map allocator
  5. NoHttpResponseException
  6. Keras多GPU训练指南
  7. 物联网:应用创新带来万亿元市场前景
  8. sessionStorage细节
  9. vue post请求后台django接口Forbidden (CSRF token missing or incorrect.)
  10. 吊打 Tomcat ,Undertow 性能很炸!!