• Win10上的Docker应用:Docker-compose(容器编排)


    阅读目录:

    前言:

      昨天完成了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

  • 相关阅读:
    Xcode 配置常用变量(SRCROOT, PROJECT_DIR, PROJECT_NAME)
    Git submodule实战
    Charles抓Https的包
    Vue-Quill-Editor 富文本编辑器的使用
    vue计算属性无法监听到数组内部变化
    移动端键盘弹起导致底部按钮上浮解决方案
    js中数组删除 splice和delete的区别,以及delete的使用
    js实现复制input的value到剪切板
    treetable
    vue中状态管理vuex的使用分享
  • 原文地址:https://www.cnblogs.com/mq0036/p/11722402.html
Copyright © 2020-2023  润新知