一起学Docker9如何搭建多容器应用

前情提要:

由于我们的项目被投资者相中了,准备作为产品投产。所以我们需要考虑应用的规模化问题。SQLite显然是不适合规模化的。于是我们打算引入MySQL。不过这个时候我们就需要考虑:是单独为MySQL起一个容器,还是把它安装到现有容器当中。种种考量之下,我们知道给MySQL单独起一个容器的好处。那么接下来的问题就是,如何实现多个容器之间的通讯。我们利用nicolaka/netshoot容器,解决了找到容器的ip地址的问题。不过,我们的更大发现是:网络别名--network-alias的妙用。之后,我们知道原来在待办任务应用中,存在几个环境变量,使用这些环境变量,就能让我们指定指定应用向MySQL的连接,尽管这在生产环境中是绝对不推荐的。

那么,接下来就是今天的重头戏,实现应用容器对MySQL容器的请求。首先,让我们来启动准开发容器。

开工

1、指定上文一起学Docker8:如何搭建多容器应用(上)提到的所有环境变量,同时将容器接入我们的应用网络。

dockerrun-dp:\

-w/app-v"$(pwd):/app"\

--networktodo-app\

-eMYSQL_HOST=mysql\

-eMYSQL_USER=root\

-eMYSQL_PASSWORD=secret\

-eMYSQL_DB=todos\

node:12-alpine\

sh-c"yarninstallyarnrundev"

如果你用的是PowerShell的话,把命令中的\替换成`即可。

2、如果我们查看容器的日志的话,我们会看到消息,提示我们应用已经用上mysql数据库了。

3、在网页浏览器中打开应用,并给待办任务列表中,添加一些任务。

4、连接MySQL数据库,确认一下那些任务被写入了数据库。记住,密码是secret。

dockerexec-itmysql容器idmysql-ptodos

在MySQLshell中运行以下命令,你会看到刚才在网页端添加的任务,已经在这里显示了。

如果你打开Docker仪表盘查看的话,你会看到有2个应用容器在运行。但是没有什么标识可以让你一眼发现:这2个容器是同一个应用的。我们之后会看看怎么让它有更好的展示。

回顾

此时此刻,我们有一个应用,它把数据保存在另一个容器中的外部数据库中。我们学习了容器网络的一些内容,看到了如何通过使用DNS来实现服务发现。

不过,你可能开始觉得启动应用所需要的东西越来越多。我们必须创建网络,启动容器,指定所有环境变量,暴露端口等等。要记的东西有很多,如果要把工作交接给别人的话,也越发困难了。

在文章中,我们会讨论DockerCompose。有了DockerCompose,我们能够以更加简单的方式分享我们的应用栈,其他人只要一个简单的命令就能启动容器。




转载请注明:http://www.aierlanlan.com/rzgz/3325.html

  • 上一篇文章:
  •   
  • 下一篇文章: