武道会
天下第一容器武道会即将召开,作为初入容器功法的门派,掌门希望选派优秀的弟子前去参会。掌门和几位长老商议后,决定派遣大师兄和三位优秀的弟子前往。
众弟子听闻,纷纷自荐要求前往。掌门见大家如此积极,甚是欣慰,但是名额有限,所以决定举办门派内部的容器功法比试,选出最优秀的三名弟子。
小刀也是心潮澎湃,非常想去,但是想到自己资历太浅,恐怕连内部比试登台的机会都没有。
这天,小刀仍旧像往常一样早起练功。大师兄和陆师兄一道路过,小刀赶紧收功问好,大师兄问道:“小刀,早啊!又在勤奋苦练了啊,是在准备比试吗?”
“嗯~哦,没,没有,大师兄,我的功力太浅,没有报名。”小刀支支吾吾地说。
“嗯?为什么不报名试试呢?”大师兄问道。
“小刀这样做还是对的,比试没有什么胜算,还是专心练功,争取下次再去。”陆师兄说到。
大师兄迟疑了一会,说到,“这次机会难得,不过门派内部确实竞争激烈。”
“可不是嘛!你知道吗?”陆师兄忿忿地说到,“就连刚来的几个弟子都争着报名了,不知道他们能有什么资格!”
“掌门的意思,大家都有机会嘛。”大师兄说到。
小刀一直默默地站在原地,不敢搭话,目送两位师兄走远。
“诶~还是专心练功吧!”小刀心想,“我也是刚来没多久,肯定是轮不上我的。”
上吧,小刀
“小刀,大师兄找你!”小胖冲进来就喊,“在干嘛呢?”
小刀一脸诧异的看着气喘吁吁的小胖,这小胖是和他一起入门的弟子,平时憨憨的,刚入门的时候两人就互相帮助,因此关系最好。
“还在磨叽啥啊?快,大师兄刚找你呢!”小胖边说边拉着小刀就往外走。
“大师兄找我干啥呀?”小刀很疑惑。
“我哪知道,刚开完会就说要找你。”小胖嘿嘿一笑,“你小子的鸿运要来了呗!”
大师兄见小胖和小刀走来,放下手中的书稿,起身说到:“小刀,小胖,来的正好,我有话要说。”
小刀和小胖赶紧作揖。来的路上,小刀就感觉有些心慌,“大师兄为什么突然找我,难道是我做错了什么?”
“门派比试你们都知道吧,掌门的意思是人人都可参与。小刀,你不是对容器功法很有兴趣么,我看你可没报名啊?”大师兄问道。
“我才疏学浅,就不去给大家添乱了。”小刀回道。
“怎么能说添乱?你不要听那些人瞎说。”大师兄说到,“掌门还问我,新来的弟子中,可有潜力不错的?”
大师兄停顿了一会,继续说到,“我当时想到的就是你啊,小刀。”
“啊!?感谢大师兄厚爱。”小刀有点受宠若惊。
“诶,你的努力大家都看到的。”大师兄说到,“其实掌门也是有意培养新人,我觉得你可以报名一试,没选上也不丢人,也可以在大家面前展示一下。”
“这......”小刀还是有些迟疑。
“好了,去报个名吧,不要让我失望,我很看好你。”说罢,大师兄就转身离开了。
“兄弟,我说你的鸿运来了吧!”小胖见大师兄走远,手肘一推小刀。
“我还有点懵~”小刀看着小胖,他也不知道自己为什么会被大师兄看好。
“还想什么,赶紧去报名吧!上吧,小刀!”说着,小胖又拉上小刀就走,“就我这水平,也报名陪你,你看,够意思吧!”
内部比试
门派内部比试大会,掌门和几位长老坐在比武台中央,众多参赛的弟子在比武台两边紧张的准备着,整个比武台被围观的弟子围的水泄不通。
小刀也非常紧张,在场边不断地走来走去。
“别走了!”小胖不耐烦地说,“太晃眼了,能不能坐下来。”
“嗯~行吧。”小刀坐了下来,却仍旧如坐针毡。
“首先上场的是我们的黄师兄!”主持人掷地有声的说到,“黄师兄可是门派的老油条~啊,不,是老人了,跟着掌门也是经历了大大小小数十战役,功不可没啊。下面有请~黄师兄登场!”
“哈哈!主持人可真幽默。不过当初我跟掌门,那是什么刀山火海没去过。不说了,不说了,来,看!先来个 Nginx 容器给大家看看。”黄师兄说着,起势运功,一个容器出现在左手。
“嗯,把数据库、后端 API、前端 Nginx 都上了吧。”掌门出题了。
“好嘞!”黄师兄心想,“这也太简单了!”说罢,左手收起容器,“看我运功!”一阵哼哼哈嘿之后,又一个全新的容器出现在黄师兄的左手。
“这个就是全新的包含数据库、后端 API 和前端 Nginx 的容器。”黄师兄得意的说道。
“现在后端 API 更新了,该如何操作呢?”一位白胡子的长老问道。
“这个容易,看我再来一次!”说罢,黄师兄又收容器,继续运功。
只见白胡子的长老摇了摇头,小胖问小刀:“诶,怎么感觉不是很满意啊,你说,黄师兄做的有什么破绽吗?”
“黄师兄的这种容器,俗话叫做「胖容器」。”小刀小声说道,“所有的服务都在一个容器中,这样的容器就很「胖」。每个服务的修改必须要全部重来一次,一个服务挂掉,整个容器就可能废掉,负担很大,违背了容器轻量的初衷。”
“啊?这样啊,那应该怎么搞?”小胖问道。
“容器就应该轻量化,理论上就应该是一个进程。”小刀说道,“嘘,小声点,你看,陆师兄上场了。”
“掌门,各位长老,各位师兄弟,大家好!”陆师兄自信满满的说,“陆某这就开始了!”
说罢,陆师兄双手运功,汇聚真气于左手,一个数据库容器出现在了左手掌心。然后汇聚真气于右手,一个后端 API 容器出现在了右手。接着,双手合,一个前端容器出现在双手之间。
docker run -d --name db --publish 3306:3306 mysql
docker run -d --name backend --publish 8080:8080 --link db backend
docker run -d --name frontend --publish 80:80 --link backend frontend
“好!”台下一片鼓掌声。白胡子长老似乎露出了一丝微笑。
三个容器在陆师兄的身边快速的旋转起来,陆师兄也从容不迫的不断地替换着容器。
“哇哦!这是怎么办到的。”小胖惊呼起来,意识到有些失态,赶紧用手捂住嘴。
“不要大惊小怪的。”小刀赶紧对他说。
“太神奇了吧,这就是所谓的「不胖」的容器了?”小胖轻声询问了小刀。
“对啊,陆师兄的这种,就算是「瘦」容器了。”小刀答道,“每个容器只有一个主进程,对应一个服务,每个服务更新,只要修改对应的容器即可,对其他容器没有影响。”
“那这三个容器是怎么交互的?”小胖追问。
“陆师兄用 --publish
参数将每个容器的端口都暴露到了宿主机上,这样可以直接通过宿主机的端口直接访问。”小刀继续说道,“同时,他还使用了 --link
参数,这可以直接在容器中做 hosts 映射,通过 Docker 网桥,而不必暴露端口到宿主机上。”
“那他到底用的是哪种?”小胖不解。
“这就要看他的容器中是如何连接了,两种方式都已经打通了网络。”小刀说道,“在后端 API 的容器中,即可以用宿主机IP:3306
访问数据库,也可以通过 db:3306
访问,还可以通过 Docker 的虚拟网卡,例如 172.17.0.1:3306
访问到。”
“这么厉害,那陆师兄岂不是赢定了!”小胖惊呼。
陆师兄得意地看着台下惊呼的师弟,收功收势,似乎拿了冠军一样接受着台下的欢呼。
“小声点,这还是有很多问题的。”小刀凑到小胖耳旁,轻声说道,“每次更新容器都要重新运功,再开,还是麻烦,时间一长,就记不得,而且网络上也没有隔离。”
“哦,对哦,那还有更好的方法?”小胖问道。
“下面这位,是我们门派新进弟子中的后起之秀,让我们欢迎——小刀!”主持人嗓音洪亮,小刀也被吓了一跳。
“额~掌门,各位,各位长老,师兄们,大家好!”小刀略有些紧张,眼睛瞟着比武台边缘,不敢直视前方。
“啪!啪!啪!”一阵掌声打破了沉默,只见大师兄双手鼓掌,眼神中充满了期待。其余弟子见状,也跟着鼓起掌来。
“我入门不久,给大家献丑了。”小刀鼓起勇气,说罢,右手伸出,只见三个容器瞬间出现在了掌心。
“哇哦~”台下一阵惊呼。“他是怎么办到的,怎么这么快,就启动了三个容器!”
“大惊小怪。”人群中,一个身着灰色长袍,头戴的浅黑色发带的弟子说道。只见他嘴角微微上扬,轻蔑地说道,“一群草包。”
“他谁啊?”离他最近的弟子听到这话,很是不满,想去理论,但是被他身边的弟子拉住,“算了算了,你不知道啊,他可是人称「灰狼」的伍三,直接向掌门汇报,很多人都没见过他。”
又一阵掌声袭来,他们无暇管这个怪人,只有好奇,这个新来的弟子,又展示了什么新的功法。
“其实,我这是投机取巧,用了 docker-compose 法器,提前把容器的信息记下,直接用法器运功即可。”小刀解释道。
如何安装?请见参考。
配置文件 docker-compose.yml
如下
version: '3'
services:
db:
image: mysql
backend:
image: backend
links:
- db
frontend:
image: frontend
links:
- backend
配置完成后,直接运功
docker-compose up -d
或者直接收功
docker-compose down
容器更新,直接可以修改配置文件,继续运功即可。
docker-compose up -d
然后,就可以查看所有相关的容器。
docker-compose ps
停止一个服务
docker-compose stop frontend
启动一个服务
docker-compose start frontend
还可以简单快速的扩容
docker-compose scale backend=3 forntend=3
docker-compose.yml
配置文件的结构主要如下,
- version:指定 docker-compose 的版本,最新为 3
- services:所有服务的定义,每个子键即为一个服务,类似 docker run 启动容器
- networks:自定义网络隔离和配置,类似 docker network create 创建网络
- volumes:自定义 docker volume 配置,类似 docker volume create 创建存储盘
使用 docker-compose,可以自动化打包构建和部署,管理服务依赖,快速启动停止服务,且可以使用配置文件进行版本控制。
详细配置项可查询官方文档,详见参考。
“不错不错。”白胡子的长老拍手道,“这个法器用起来确实很方便,但是我还有一个问题:这是单机的情况,如果我有多台物理机或虚拟机,又该如何操作呢?”
后记
单机编排用 docker-compose,那多机的情况怎么办?
欲知后事如何,请关注「容器霸业」,知乎专栏同步更新。
上一章:容器霸业:4 运行时
下一章:容器霸业:6 新征程
参考
- Docker run
- Docker 网络
- 安装 docker-compose
- Docker compose file reference