关闭

自己学Docker:12.Docker网络初涉

标签: docker
866人阅读 评论(0) 收藏 举报
分类:

当你开始扩大 Docker 的应用范围时,忽然发现,你需要了解很多关于网络的知识。
Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。

准备

为了可以更好的说明,显准备一个tomcat的docker镜像。
可以通过Dockerfile创建镜像。这里就直接通过Docker Hub查找一个既有的镜像了。
首先,查找一下Docker Hub上tomcat相关的镜像。

sudo docker search tomcat

这里写图片描述
这里就选取官方的镜像。

sudo docker pull tomcat

这里写图片描述

启动

按照之前的方式启动

后台启动tomcat。

sudo docker run -itd tomcat
sudo docker ps

这里写图片描述
可以看出 创建了一个tomcat容器,通过port看出占用了8080端口。
可以使用logs查看是否正常启动。

sudo docker logs 3b32fba84a67

这里写图片描述

但是这个8080端口是容器的,外面是无法直接访问的。
可以使用curl命令测试一下:

curl http://127.0.0.0:8080

这里写图片描述

任意端口映射启动

直接启动无法访问容,但docker可以通过 -P 或 -p 参数来将容器内端口映射到外部主机上。
当使用 -P(大写的) 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

我们在重新启动tomcat.

sudo docker run -itd -P tomcat

这里写图片描述
使用 docker ps 可以看到,本地主机的 32769端口被映射到了容器的 8080端口上。此时访问本机的 32769端口即可访问容器内 web 应用提供的界面。
这里写图片描述
这里写图片描述

指定端口映射启动

当使用 -p(小写的)则可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器。
支持的格式有 :
hostPort:containerPort:映射本机所有ip的端口
ip:hostPort:containerPort :映射到指定ip地址的指定端口
ip::containerPort :映射到指定ip地址的任意端口
以三种方式启动三个容器,tomcat1,tomcat2,tomcat3。
映射本机所有ip的端口

sudo docker run -itd --name tomcat1 -p 9527:8080 tomcat

映射到指定ip地址的指定端口

sudo docker run -itd --name tomcat2 -p 192.168.1.3:9528:8080 tomcat

映射到指定ip地址的任意端口

sudo docker run -itd --name tomcat3 -p 192.168.1.3::8080 tomcat

这里写图片描述
我的本机有两个网卡ip分别为192.168.1.3和10.0.2.15,还包括一个回环地址127.0.0.1。
对于tomcat1,可以使用192.168.1.3:9527,10.0.2.15:9527或127.0.0.1:9527都可以访问。
对于tomcat2,只能使用可以使用192.168.1.3:9528访问。
对于tomcat3,只能使用可以使用192.168.1.3:3276访问。

指定多个端口

-p 标记可以多次使用来绑定多个端口

sudo docker run -itd --name tomcat4 -p 192.168.1.3:9530:8080 -p 192.168.1.3:9531:8080 tomcat

这里写图片描述

查看映射端口配置–docker port

另外,可以使用docker port命令查看docker容器端口的映射情况。
存在则会输出映射详情,不错在则报错。

sudo docker port 7269e8d094b3 8080

这里写图片描述

容器互联

在平时开发中,部署应用程序和数据库通常不会在同一物理主机上,这也是为了安全。那么想象一种场景,应用全部通过docker创建,则应用程序和DB应该也是分属于不同的容器。那么应用程序要访问db该如何处理?
当然,可以将db的容器端口也是用-P或-p映射出来,但是docker还提供了 –link 参数,可以让容器之间安全的进行交互。

--link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连接的别名。

同样的先创建一个mysql的数据库镜像。

sudo docker search mysql
...
sudo docker pull mysql

创建一个mysql容器。

sudo docker run --name db_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

这里的-e MYSQL_ROOT_PASSWORD=123456是初始化root用户的密码。
然后创建一个新的 tomcat 容器,并将它连接到 db 容器

sudo docker run -itd -P --name tomcat5 --link db_mysql:db tomcat /bin/bash

这里写图片描述
进入到容器tomcat5。

sudo docker attach tomcat5

这里写图片描述
查看/etc/hosts 文件的信息,可以看到添加了db_mysql的信息,通过ping命令也是可以ping通的。
因为我们在创建tomcat5容器时,有指定db_mysql容器的别名,所以我们可以直接db_mysql或db都是可以ping的通的。

 ping db_mysql
 ping db

这里写图片描述

1
0
查看评论

概率初涉(1)

以前没有认真学习概率论,虽然刚开始的shih
  • hatehanyu
  • hatehanyu
  • 2014-10-29 17:41
  • 231

Docker逐渐火起来了,收集了一些这方面的书

Docker开发实践http://product.dangdang.com/23731346.html腾讯的互娱的开发节奏,只有Docker跟得上!如果你想你的团队加快开发速度,那么我推荐你使用Docker云计算的初级是数据的云化,下一步是程序的云化,而Docker则是当前程序云化最好的工具。让你的...
  • Testing_is_believing
  • Testing_is_believing
  • 2015-11-13 08:28
  • 5503

自己学Docker:4.开始了解Docker的工作模式

上一章在学习中有2个疑问: 如何保存我们在容器里的修改? 如果apt-get如果不能安装时,如何在Docker中安装软件? 关于run创建的容器问题对于第一个问题,原来每次执行(当非root用户时,需要在命令前加sudo)sudo docker run -i -t docker/whalesay /...
  • Mungo
  • Mungo
  • 2016-04-23 00:36
  • 4485

Docker网络管理机制实例解析+创建自己Docker网络

实例解析Docker网络管理机制(bridge network,overlay network),介绍Docker默认的网络方式,并创建自己的网络桥接方式,将开发的容器添加至自己新建的网络,提高Docker网络安全和通信.1.给自己的docker (Dcoker1.12GA)容器起个名称给docke...
  • dream_an
  • dream_an
  • 2016-08-09 20:49
  • 7604

docker 网络方案--分析

关于SDN和容器 作为近年来比较热的一个概念,众所周知SDN是Software Defined Network的缩写,即软件定义网络。但不同的人对SDN有不同的理解。在广义上,只要是你通过软件实现了一个东西,然后那个东西能够灵活地去达到网络上面的部署和伸缩,这就可以被认为是SDN。 围绕容器的开...
  • qq_21816375
  • qq_21816375
  • 2017-06-20 09:39
  • 759

一篇非常详细的 Docker 学习笔记

链接地址:http://www.open-open.com/lib/view/open1423703640748.html
  • gaisylly
  • gaisylly
  • 2016-01-05 22:45
  • 903

Docker学习总结(10)——10分钟玩转Docker

1、前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下。 2、Docker是什麽 Docker是一个开源的应用容器引擎,可以把应用以及依赖包放到一个可移植的容器中,然后发布到任何流行...
  • u012562943
  • u012562943
  • 2016-07-22 09:29
  • 4884

docker 四种网络模型

一.docker网络基础知识Docker在创建容器时有四种网络模式,bridge为默认不需要用–net去指定,其他三种模式需要在创建容器时使用–net去指定。bridge模式,使用–net=bridge指定,默认设置。 none模式,使用–net=none指定。 host模式,使用–net=ho...
  • csdn066
  • csdn066
  • 2017-08-14 19:01
  • 733

Docker网络详解-二

title: Docker网络详解(二)——网络管理命令 date: 2015-11-29 19:54:17 tags: dockercategories: Docker Network在Docker中,网络是很重要的部分,之前写过一篇有关Docker的几种网络模式的文章:Docker之四种网络...
  • vchy_zhao
  • vchy_zhao
  • 2017-04-19 11:30
  • 835

关于docker容器网络的一些理解

打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thinkgamer参考资料1:容器网络那...
  • Gamer_gyt
  • Gamer_gyt
  • 2017-02-04 18:22
  • 5170