容器霸业:5 比武大会

武道会

天下第一容器武道会即将召开,作为初入容器功法的门派,掌门希望选派优秀的弟子前去参会。掌门和几位长老商议后,决定派遣大师兄和三位优秀的弟子前往。

众弟子听闻,纷纷自荐要求前往。掌门见大家如此积极,甚是欣慰,但是名额有限,所以决定举办门派内部的容器功法比试,选出最优秀的三名弟子。

小刀也是心潮澎湃,非常想去,但是想到自己资历太浅,恐怕连内部比试登台的机会都没有。

这天,小刀仍旧像往常一样早起练功。大师兄和陆师兄一道路过,小刀赶紧收功问好,大师兄问道:“小刀,早啊!又在勤奋苦练了啊,是在准备比试吗?”

“嗯~哦,没,没有,大师兄,我的功力太浅,没有报名。”小刀支支吾吾地说。

“嗯?为什么不报名试试呢?”大师兄问道。

“小刀这样做还是对的,比试没有什么胜算,还是专心练功,争取下次再去。”陆师兄说到。

大师兄迟疑了一会,说到,“这次机会难得,不过门派内部确实竞争激烈。”

“可不是嘛!你知道吗?”陆师兄忿忿地说到,“就连刚来的几个弟子都争着报名了,不知道他们能有什么资格!”

“掌门的意思,大家都有机会嘛。”大师兄说到。

小刀一直默默地站在原地,不敢搭话,目送两位师兄走远。

“诶~还是专心练功吧!”小刀心想,“我也是刚来没多久,肯定是轮不上我的。”

上吧,小刀

“小刀,大师兄找你!”小胖冲进来就喊,“在干嘛呢?”

小刀一脸诧异的看着气喘吁吁的小胖,这小胖是和他一起入门的弟子,平时憨憨的,刚入门的时候两人就互相帮助,因此关系最好。

“还在磨叽啥啊?快,大师兄刚找你呢!”小胖边说边拉着小刀就往外走。

“大师兄找我干啥呀?”小刀很疑惑。

“我哪知道,刚开完会就说要找你。”小胖嘿嘿一笑,“你小子的鸿运要来了呗!”

大师兄见小胖和小刀走来,放下手中的书稿,起身说到:“小刀,小胖,来的正好,我有话要说。”

小刀和小胖赶紧作揖。来的路上,小刀就感觉有些心慌,“大师兄为什么突然找我,难道是我做错了什么?”

“门派比试你们都知道吧,掌门的意思是人人都可参与。小刀,你不是对容器功法很有兴趣么,我看你可没报名啊?”大师兄问道。

“我才疏学浅,就不去给大家添乱了。”小刀回道。

“怎么能说添乱?你不要听那些人瞎说。”大师兄说到,“掌门还问我,新来的弟子中,可有潜力不错的?”

大师兄停顿了一会,继续说到,“我当时想到的就是你啊,小刀。”

“啊!?感谢大师兄厚爱。”小刀有点受宠若惊。

“诶,你的努力大家都看到的。”大师兄说到,“其实掌门也是有意培养新人,我觉得你可以报名一试,没选上也不丢人,也可以在大家面前展示一下。”

“这......”小刀还是有些迟疑。

“好了,去报个名吧,不要让我失望,我很看好你。”说罢,大师兄就转身离开了。

“兄弟,我说你的鸿运来了吧!”小胖见大师兄走远,手肘一推小刀。

“我还有点懵~”小刀看着小胖,他也不知道自己为什么会被大师兄看好。

“还想什么,赶紧去报名吧!上吧,小刀!”说着,小胖又拉上小刀就走,“就我这水平,也报名陪你,你看,够意思吧!”

内部比试

门派内部比试大会,掌门和几位长老坐在比武台中央,众多参赛的弟子在比武台两边紧张的准备着,整个比武台被围观的弟子围的水泄不通。

小刀也非常紧张,在场边不断地走来走去。

“别走了!”小胖不耐烦地说,“太晃眼了,能不能坐下来。”

“嗯~行吧。”小刀坐了下来,却仍旧如坐针毡。

“首先上场的是我们的黄师兄!”主持人掷地有声的说到,“黄师兄可是门派的老油条~啊,不,是老人了,跟着掌门也是经历了大大小小数十战役,功不可没啊。下面有请~黄师兄登场!”

“哈哈!主持人可真幽默。不过当初我跟掌门,那是什么刀山火海没去过。不说了,不说了,来,看!先来个 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

你可能感兴趣的:(容器霸业:5 比武大会)