閱讀目錄:html
昨天完成了Docker入門示例(Docker應用:Hello World),示例只是粗略展現了單機應用在Docker中部署的大概流程;mysql
可是即便先不考慮大型項目關聯的多個應用服務,單單只是單機應用部署來講,過程也是略爲複雜。web
由於如今的軟件公司開發、測試、部署基本上分開,甚至交由不一樣的人完成各個階段的工做,若是軟件部署要敲寫大量的命令,sql
那仍是很容易出錯;甚至有些公司只是運維人員、工程人員在部署,一旦出了問題,他們想找到緣由基本很難。docker
因此要求部署必須是接近傻瓜式的,因此有了容器編排技術。網絡
昨天的示例是遺留有一些問題的,好比容器重啓後IP地址變化,容器重啓後應用相關的遠程容器服務都將失效,這點是很是致命的。app
第二是網絡通訊問題,昨天的示例中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容器有了硬耦合,得想辦法去掉。async
一、其實也簡單,在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"
二、上邊的docker-compose.yml文件格式,其餘參數各自百度一下,意思就是建立2個應用:web、mysql
2.一、web在本直接build(也有從鏡像下載的方式),80端口映射到本地8000端口,依賴mysql
2.二、mysql指定登陸密碼mima2100,容器3306端口映射到本地3306
2.三、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 }
一、驗證一下docker-compose版本
1 docker-compose version
二、定位到web目錄,輸入指令
1 docker-compose up -d
三、查看容器
1 docker ps -a
能夠看到mysql與web都建立成功了,無報錯。
四、訪問一下localhost:8000
搞定。。