执著的守望 發表於 2015-7-24 16:14:11

Docker的一些基础的网络命令小结

<p>各位好,今天我们将学习一些Docker容器的基础命令。Docker 是一个开源项目,提供了一个可以打包、装载和运行任何应用的轻量级容器的开放平台。它没有语言支持、框架和打包系统的限制,从小型的家用电脑到高端服务器,在何时何地都可以运行。它可以使部署和扩展web应用程序、数据库和后端服务像搭积木一样容易,而不依赖特定技术栈或提供商。Docker适用于网络环境,它正应用于数据中心、ISP和越来越多的网络服务。</p>
<p>因此,这里有一些你在管理Docker容器的时候会用到的一些命令。</p>
<p><strong>1. 找到Docker接口</strong></p>
<p>Docker默认会创建一个名为docker0的网桥接口作为连接外部世界的基础。运行中的docker容器直接连接到网桥接口docker0。默认上,docker会分配172.17.42.1/16给docker0,它是所有运行中的容器ip地址的子网。找到Docker接口的ip地址非常简单。要找出docker0网桥接口和连接到网桥上的docker容器,我们可以在安装了docker的终端或者shell中运行ip命令。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode290"># ip a</div><br />&nbsp;<img alt="2015724161925701.png (852×390)" src="https://img.jbzj.com/file_images/article/201507/2015724161925701.png?201562416207" /></p>
<p><strong>&nbsp;&nbsp;&nbsp; 2. 得到Docker容器的ip地址</strong></p>
<p>如我们上面读到的,docker在宿主机中创建了一个叫docker0的网桥接口。在我们创建一个新的docker容器时,它自动被默认分配了一个在该子网范围内的ip地址。因此,要检测运行中的Docker容器的ip地址,我们需要进入一个正在运行的容器并用下面的命令检查ip地址。首先,我们运行一个新的容器并进入其中。如果你已经有一个正在运行的容器,你可以跳过这个步骤。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode291"> # docker run -it ubuntu</div></p>
<p>现在,我们可以运行ip a来得到容器的ip地址了。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode292"># ip a</div><br /><img alt="2015724162022043.png (852×403)" src="https://img.jbzj.com/file_images/article/201507/2015724162022043.png?2015624162030" /></p>
<p><strong>&nbsp;&nbsp;&nbsp; 3. 映射暴露的端口</strong></p>
<p>要映射配置在Dockerfile的暴露端口到宿主机的高位端口,我们只需用下面带上-P标志的命令。这会打开docker容器的随机端口并映射到Dockerfile中定义的端口。下面是使用-P来打开/暴露定义的端口的例子。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode293"> # docker run -itd -P httpd</div><br /><img alt="2015724162043285.png (855×456)" src="https://img.jbzj.com/file_images/article/201507/2015724162043285.png?2015624162126" /></p>
<p>&nbsp;&nbsp;&nbsp; 上面的命令会映射容器的端口到 httpd 容器的 Dockerfile 中定义的80端口上。我们用下面的命令来查看正在运行的容器暴露的端口。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode294"> # docker ps</div></p>
<p>并且可以用下面的curl命令来检查。</p>
<p>&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode295"># curl http://localhost:49153</div><br />&nbsp;&nbsp;&nbsp;<img alt="2015724162159677.png (545×43)" src="https://img.jbzj.com/file_images/article/201507/2015724162159677.png?2015624162212" /></p>
<p><strong>&nbsp;&nbsp;&nbsp; 4. 映射到特定的端口上</strong></p>
<p>我们也可以映射暴露端口或者docker容器端口到我们指定的端口上。要实现这个,我们用-p标志来定义我们所需的端口。这里是我们的一个例子。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode296"># docker run -itd -p 8080:80 httpd</div></p>
<p>上面的命令会映射(宿主机的)8080端口到(容器的)80上。我们可以运行curl来检查这点。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode297"># curl http://localhost:8080</div><br />&nbsp;&nbsp;<img alt="2015724162228745.png (877×95)" src="https://img.jbzj.com/file_images/article/201507/2015724162228745.png?2015624162320" /></p>
<p><strong>&nbsp;&nbsp;&nbsp; 5. 创建自己的网桥</strong></p>
<p>要给容器创建一个自定义的IP地址,在本篇中我们会创建一个名为br0的新网桥。要分配需要的ip地址,我们需要在运行docker的宿主机中运行下面的命令。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode298"># stop docker.io<br />    # ip link add br0 type bridge<br />    # ip addr add 172.30.1.1/20 dev br0<br />    # ip link set br0 up<br />    # docker -d -b br0</div><br /><img alt="2015724162330751.png (877×504)" src="https://img.jbzj.com/file_images/article/201507/2015724162330751.png?2015624162342" /></p>
<p><strong>6. 创建自己的网桥</strong></p>
<p>要给容器创建一个自定义的IP地址,在本篇中我们会创建一个名为br0的新网桥。要分配需要的ip地址,我们需要在运行docker的宿主机中运行下面的命令。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode299"> # stop docker.io<br />    # ip link add br0 type bridge<br />    # ip addr add 172.30.1.1/20 dev br0<br />    # ip link set br0 up<br />    # docker -d -b br0</div><br /><img alt="2015724162423457.png (877×83)" src="https://img.jbzj.com/file_images/article/201507/2015724162423457.png?2015624162442" /></p>
<p>&nbsp;&nbsp;&nbsp; 到这里,桥接后的接口将会分配给容器在桥接子网内的新ip地址。<br /><strong>7. 链接到另外一个容器上</strong></p>
<p>我们可以用Docker将一个容器连接到另外一个上。我们可以在不同的容器上运行不同的程序,并且相互连接或链接。链接允许容器间相互连接并从一个容器上安全地传输信息给另一个容器。要做到这个,我们可以使用--link标志。首先,我们使用--name标志来标示training/postgres镜像。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode300"># docker run -d --name db training/postgres</div><br /><img alt="2015724162459660.png (877×360)" src="https://img.jbzj.com/file_images/article/201507/2015724162459660.png?2015624162513" /></p>
<p>&nbsp;&nbsp;&nbsp; 完成之后,我们将容器db与training/webapp链接来形成新的叫web的容器。</p>
<p>&nbsp;&nbsp;&nbsp;<br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode301"># docker run -d -P --name web --link db:db training/webapp python app.py</div><br /><img alt="2015724162815638.png (877×368)" src="https://img.jbzj.com/file_images/article/201507/2015724162815638.png?2015624162843" /></p>
<p><strong>&nbsp;&nbsp;&nbsp; 总结</strong></p>
<p>Docker网络很神奇也好玩,我们可以对docker容器做很多事情。我们可以把玩这些简单而基础的docker网络命令。docker的网络是非常先进的,我们可以用它做很多事情。</p>
<p>如果你有任何的问题、建议、反馈请在下面的评论栏写下来以便于我们我们可以提升或者更新文章的内容。谢谢! 玩得开心!:-)<br /></p>
頁: [1]
查看完整版本: Docker的一些基础的网络命令小结