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的6379port。

为什么不会占用port?不占用port怎么使用?

docker的网络

docker的网络是非常特殊的。它默认会在系统里创建一个网桥叫docker0,而全部的container默认都是挂在这个网桥里的。所以port也是开放在这个网桥里,假设你想在host里使用redis,那就要这样执行:

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

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


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

除此之外,二者另一个非常大的差别就是,安装到系统里的redis仅仅能跑一个实例(除非绑定不同的port号),而docker能够跑多个container(同一port号)。仅仅要用--name指定不同的名字就可以——由于不同的container在docker0网桥里是不同的主机。

假设是把port开放到host,那么这个redis用起来跟直接装在系统里没什么不同。直接用redis-cli -h localhost就可以连上使用。

假设没有开放port。那么就仅仅能在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网络应用,更高级和复杂的网络应用详见相关文档。

posted @ 2017-07-29 16:17  jzdwajue  阅读(117)  评论(0编辑  收藏  举报