编程是一门艺术

raptor.zh(at)gmail.com Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

archives 存档

01 Jan - 31 Dec 2018
01 Jan - 31 Dec 2017
01 Jan - 31 Dec 2016
01 Jan - 31 Dec 2015
01 Jan - 31 Dec 2014
01 Jan - 31 Dec 2013
01 Jan - 31 Dec 2012
01 Jan - 31 Dec 2011
01 Jan - 31 Dec 2010
01 Jan - 31 Dec 2009
01 Jan - 31 Dec 2008
01 Jan - 31 Dec 2007
01 Jan - 31 Dec 2006
01 Jan - 31 Dec 2005
01 Jan - 31 Dec 2004
01 Jan - 31 Dec 2003
01 Jan - 31 Dec 2002
01 Jan - 31 Dec 2001
01 Jan - 31 Dec 2000
01 Jan - 31 Dec 1999

--

links 链接

--

docker实践入门之二

开始动手

先准备一个空的系统,现在要在上面装一个redis,传统的做法就是用系统的包管理器装一个呗,比如debian下可以用

sudo apt-get install -y redis-server
sudo service redis-server start

然而在docker下是这样:

docker pull redis
docker run -d --name redis redis

第一步是从docker官方registry上下载最新版的redis image,第二步是把redis运行起来(也就是生成一个运行着redis的container)。

那么二者有什么不同呢?前者是直接把redis安装到你的系统里,当然同时也会安装上一堆依赖包。后者则是下载一个image,然后在docker里跑,所有的依赖都在image里,与host系统完全没有影响,按这个命令跑起来,甚至都不会占用host的6379端口。

为什么不会占用端口?不占用端口怎么使用?

docker的网络

docker的网络是很特殊的,它默认会在系统里创建一个网桥叫docker0,而所有的container默认都是挂在这个网桥里的,所以端口也是开放在这个网桥里,如果你想在host里使用redis,那就要这样运行:

docker run -d --name redis -p 6379:6379 redis

其中-p参数就是把container里的6379映射到host的6379。

完整的用法是: -p [[hostip:]hostport:]containerport

除 此之外,二者还有一个很大的区别就是,安装到系统里的redis只能跑一个实例(除非绑定不同的端口号),而docker可以跑多个 container(同一端口号),只要用--name指定不同的名字即可——因为不同的container在docker0网桥里是不同的主机。

如果是把端口开放到host,那么这个redis用起来跟直接装在系统里没什么不同,直接用redis-cli -h localhost即可连上使用。如果没有开放端口,那么就只能在docker网络里用。比如开一个交互的docker container:

docker pull debian
docker run -it --link redis:redis debian /bin/bash

然后在这个container里用apt装一个redis-client,即可用redis-cli -h redis连接到之前运行的是那个redis contianer。

这里的--link redis:redis就是把redis container映射为这个container里的redis主机名。

其用法是: --link container:name_in_hosts

以上即为基本的docker网络应用,更高级和复杂的网络应用详见相关文档。

推送到[go4pro.org]

Trackback link:

Please enable javascript to generate a trackback url

No trackbacks

评论(0)


 
   
 
  表情图标 

 


提示: 除了 <b> 和 <i> 之外,其他的Html标签都将从您的评论中去除.url或mail地址会被自动加上链接.