阅读目录:

前言:

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

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

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

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

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

一、遗留问题

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

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

 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文件

 version: ''
services:
web:
build: .
ports:
- "8000:80"
depends_on:
- mysql
mysql:
container_name: mysql_dc
environment:
- MYSQL_ROOT_PASSWORD=mima2100
image: mysql
ports:
- "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连接改成如下:

 using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
using MySql.Data.MySqlClient; namespace WebApp_HelloWorld.Controllers
{
public class DBService
{
protected IDbConnection conn; public DBService()
{
conn = new MySqlConnection("server=mysql_dc;User Id=root;password=mima2100;Database=mysql-db");
} public async Task<T> Single<T>(string sql, object paramPairs = null)
{
return await conn.QuerySingleOrDefaultAsync<T>(sql, paramPairs);
} public async Task<int> Count(string sql, object paramPairs = null)
{
return await conn.QuerySingleOrDefaultAsync<int>(sql, paramPairs);
}
}
}

三、验证

1、验证一下docker-compose版本

 docker-compose version

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

 docker-compose up -d

3、查看容器

 docker ps -a

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

4、访问一下localhost:8000

搞定。。

出处:https://www.cnblogs.com/lanxiaoke/p/10439282.html

Win10上的Docker应用:Docker-compose(容器编排)的更多相关文章

  1. 物联网架构成长之路(24)-Docker练习之Compose容器编排

    0.前言 一开始学的之后,是想一步到位直接上Kubernetes(K8s)的,后面没想到,好像有点复杂,有些概念不是很懂.因此学习东西还是要循序渐进,慢慢来.先了解单机编排技术Docker Compo ...

  2. AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排

    一.前言 上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来. 如果该应用继续引入mysql.redis.job等若干服务,到时候发布一次得工作量之大 ...

  3. Docker Compose 容器编排 NET Core 6+MySQL 8+Nginx + Redis

    环境: CentOS 8.5.2111Docker 20.10.10Docker-Compose 2.1.0 服务: db  redis  web nginx NET Core 6+MySQL 8+N ...

  4. Docker知识进阶与容器编排技术

    目录 1 使用Dockerfile定制redis镜像 1.1 环境准备 1.2 编写Dockerfile文件 1.3 通过Dockerfile构建镜像 1.4 通过镜像运行容器 1.5 官方镜像替代我 ...

  5. 八、docker compose容器编排

    一. Docker-Compose 1.1. 什么是Docker Compose Compose 项目是 Docker 官方的开源项目,负责实现 Docker 容器集群的快速编排,开源代码在 http ...

  6. Docker Compose容器编排

    Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...

  7. Docker Compose 容器编排

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  8. Jenkins Jfrog Artifactory 以及docker下的pipeline 容器编排实践

    1. 测试环境情况: Docker主机 10.24.101.99 JFrog Artifactory 主机 (admin password) jenkinx github原始地址:https://gi ...

  9. Docker,Docker Compose,Docker Swarm,Kubernetes之间的区别

    Dcoker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我 ...

  10. AspNetCore容器化(Docker)部署(二) —— 多容器通信

    一.前言 着上一篇 AspNetCore容器化(Docker)部署(一) —— 入门,在单个容器helloworld的基础上引入nginx反向代理服务器组成多容器应用. 二.配置反向代理转接 配置转接 ...

随机推荐

  1. windows server 2016 安装网卡驱动

    首先,联网分解为两个问题,一.WLAN(无线网).二.以太网(有线网) 一 .WLAN问题解决方案 1.打开服务器管理器 2.添加角色和功能 3.一直点下一步到“功能”,勾选 DirectPlay 和 ...

  2. .net core使用AutoMapper

    AutoMapper文档:http://docs.automapper.org/en/stable/The-MyGet-build.html 新的版本抛弃了静态API方法,我们将使用依赖注入来完成. ...

  3. Python 中如何判断 list 中是否包含某个元素

    在python中判断 list 中是否包含某个元素: ——可以通过in和not in关键字来判读 例如: abcList=['a','b','c',1,2,3] if 'a' in abcList: ...

  4. SpringBoot使用@ServerEndpoint无法依赖注入问题解决(WebSocket)

    如上两图所示,在WebSocket中我想使用Redis.把自己编写的RedisUtil使用@Autowired自动注入到当前类. 在运行时,出现异常:java.lang.NullPointExcept ...

  5. C语言是什么

    大家对于Java可能并不陌生,那你对c语言了解多少呢,今天小编带大家来了解c语言是什么. c语言是一门面向过程.抽象化的通用程序设计语言,广泛应用于底层开发.C语言具有高效.灵活.功能丰富.表达力强和 ...

  6. Java 8——Lambda表达式

    本篇文章不介绍Lambda的前世今生,这里只对Lambda表达的应用做详细了解.以及与内部类的差异点. Lambda表达式 Lambda表达式是Java SE 8版本中引入的新的语法糖.将功能看做方法 ...

  7. 给定一个长度为N的数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O(1)

    先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和. 在数组A中,我们定义两个数据集合a1,a2.a1为出现次数大于n/2的数的集合,a2为其余数组成的 ...

  8. 浅析ajax请求json数据并用js解析(示例分析)

    这应该是每个web开发的人员都应该掌握的基础技术,需要的朋友可以参考下 自从接触了jquery就喜欢上了前端开发,而且深深感受到了前端开发的强大与重要之处.同时也想为asp.net鸣不平,事实上asp ...

  9. APS.NET MVC + EF (01)---Linq和Lambda表达式

    1.1 Linq介绍 LINQ全称 Language Integrated Query(语言集成查询).为我们提供一种统一的方式来查询和操作各种数据. LINQ to Object:是针对实现了IEn ...

  10. Linux中Crontab的使用

    一.安装依赖 yum install cronie 二.添加 Crontab crontab -e 三.查看crontab内容 crontab -l 其中常见的一些内容 例子: # 每月的最后1天 0 ...