Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

Docker应用:Docker-compose(容器编排)

漂亮的猫 2019-02-26 19:56:00 阅读数:214 评论数:0 点赞数:0 收藏数:0

阅读目录:

 

前言:

昨天完成了Docker入门示例(Docker应用:Hello World),示例只是粗略展示了单机应用在Docker中部署的大概流程;

但是即使先不考虑大型项目关联的多个应用服务,单单只是单机应用部署来说,过程也是略为复杂。

因为现在的软件公司开发、测试、部署基本上分开,甚至交由不同的人完成各个阶段的工作,如果软件部署要敲写大量的命令,

那还是很容易出错;甚至有些公司只是运维人员、工程人员在部署,一旦出了问题,他们想找到原因基本很难。

所以要求部署必须是接近傻瓜式的,所以有了容器编排技术。

 

一、遗留问题

昨天的示例是遗留有一些问题的,比如容器重启后IP地址变化,容器重启后应用相关的远程容器服务都将失效,这点是非常致命的。

第二是网络通信问题,昨天的示例中Web调用Mysql是通过ip映射,出到容器外部在访问另外一个容器内部的数据,如下:

1 conn = new MySqlConnection("server=198.198.198.181;User Id=root;password=mima2100;Database=mysql-db");

198.198.198.181是我本地机器的局域网IP,由于这个IP,导致Web应用对Mysql容器有了硬耦合,得想办法去掉。

 

二、解决问题

1、其实也简单,在Dockerfile文件相同目录创建docker-compose.yml文件

 1 version: '3'
 2 services:
 3  web:
 4  build: .
 5  ports:
 6 - "8000:80"
 7  depends_on:
 8 - mysql
 9  mysql:
10  container_name: mysql_dc
11  environment:
12 - MYSQL_ROOT_PASSWORD=mima2100
13  image: mysql
14  ports:
15 - "3306:3306"

2、上边的docker-compose.yml文件格式,其他参数各自百度一下,意思就是创建2个应用:web、mysql

2.1、web在本直接build(也有从镜像下载的方式),80端口映射到本地8000端口,依赖mysql

2.2、mysql指定登录密码mima2100,容器3306端口映射到本地3306

2.3、Mysql连接改成如下:

 1 using Dapper;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Data;
 5 using System.Threading.Tasks;
 6 using MySql.Data.MySqlClient;
 7
 8 namespace WebApp_HelloWorld.Controllers
 9 {
10 public class DBService
11  {
12 protected IDbConnection conn;
13
14 public DBService()
15  {
16 conn = new MySqlConnection("server=mysql_dc;User Id=root;password=mima2100;Database=mysql-db");
17  }
18
19 public async Task<T> Single<T>(string sql, object paramPairs = null)
20  {
21 return await conn.QuerySingleOrDefaultAsync<T>(sql, paramPairs);
22  }
23
24 public async Task<int> Count(string sql, object paramPairs = null)
25  {
26 return await conn.QuerySingleOrDefaultAsync<int>(sql, paramPairs);
27  }
28  }
29 }

 

三、验证

1、验证一下docker-compose版本

1 docker-compose version

2、定位到web目录,输入指令

1 docker-compose up -d

 

3、查看容器

1 docker ps -a

可以看到mysql与web都创建成功了,无报错。

4、访问一下localhost:8000

搞定。。

 

版权声明
本文为[漂亮的猫]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/lanxiaoke/p/10439282.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;

支付宝红包,每日可领