【从头开始学docker系列之六,创建多容器应用】

创建多容器应用

到目前为止,我们一直在使用单容器应用程序。但是,我们现在想要将 MySQL添加到应用程序中。经常会出现下面的问题——“MySQL会在哪里运行?安装在同一个容器中还是单独运行?” 一般来说, 每个容器应该做一件事,并且做好。 几个原因:

  • 您很有可能必须以不同于数据库的方式扩展 API 和前端
  • 单独的容器让您可以隔离地版本和更新版本
  • 虽然您可以在本地为数据库使用容器,但您可能希望在生产中为数据库使用托管服务。你不想在你的应用程序中发布你的数据库引擎。
  • 运行多个进程将需要一个进程管理器(容器只启动一个进程),这增加了容器启动/关闭的复杂性

容器网络

请记住,默认情况下,容器是独立运行的,并且对同一台机器上的其他进程或容器一无所知。那么,我们如何让一个容器与另一个容器通信呢?答案是网络。现在,您不必成为网络工程师(万岁!)。只要记住这个规则…
如果两个容器在同一个网络上,它们可以相互通信。如果他们不是,他们就不能。
输入docker命令 docker network --help 我们可以看到

Commands:
  connect     连接一个容器到一个网络
  create      创建一个网络
  disconnect  将一个容器从一个网络中断开
  inspect     显示一个或多个网络的详细信息
  ls          列出所有的网络
  prune       删除所有没用的网络
  rm          删除一个或多个网络

最小之前的应用dockerapp 现在我们要让她使用另一个容器里的mysql数据库,遵循上面的规则,我们要做一些事情。

创建容器网络

让我们为之前的dockerapp 也就是(todo-list)应用创建网络

docker network create todo-net

使用网络创建mysql容器

 docker run -dp 3306:3306 --network todo-net --network-alias mysql --name mysql -v D:\docker\mysql3306\conf:/etc/mysql/conf.d -v D:\docker\mysql3306\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=todos mysql:5.7.25

重新创建dockerapp应用容器。

让我们使用todo-net网络重新创建一下之前的dockerapp应用使用刚刚创建的mysql容器中的todos数据库。

docker run -dp 3000:3000 -w /dockerapp --network todo-net -e MYSQL_HOST=mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=123456 -e MYSQL_DB=todos dangkei/dockerapp
  --network todo-net 	# 使用todo-net网络
  -e MYSQL_HOST=mysql 	# mysql主机名称
  -e MYSQL_USER=root  	# mysql登陆用户名
  -e MYSQL_PASSWORD=123456 	# mysql登陆密码 
  -e MYSQL_DB=todos 	# 应用使用数据库名

测试结果

测试一下: 打开浏览器 http/localhost:3000/ 看到应用界面,如果没用查看容器日志检查问题,然后插入两条测试数据
再打开命令行执行下面语句

 docker exec -it mysql mysql -p  todos

第一个个mysql 是容器名称 第二个是登陆容器后执行命令 mysql 参数 -p toddos 使用数据库 todos
成功后查询数据结果

mysql> select * from todo_items ;
+--------------------------------------+--------------+-----------+
| id                                   | name         | completed |
+--------------------------------------+--------------+-----------+
| f5f2c90a-f5a3-45b7-b0a8-6fabd05286d4 | test         |         0 |
| e4fe0fd5-9af3-44b8-b26c-edee17238970 | study docker |         0 |
+--------------------------------------+--------------+-----------+
2 rows in set (0.00 sec)

可以看到测试的数据已经保存到数据库中。

使用–link参数

很多时候我们默认创建mysql并没有指定network 我们应用要是连接mysql容器可以之间使用–link参数

docker run -dp 3000:3000 -w /dockerapp  --name todo-lis --link mysql:mysql -e MYSQL_HOST=mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=123456 -e MYSQL_DB=todos dangkei/dockerapp

–link mysql:mysql 中第一个mysql是mysql容器名称 第二个mysql是别名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dangkei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值