CentOS下Docker与.netcore(一) 之 安装

CentOS下Docker与.netcore(二) 之 Dockerfile

CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose

CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署

CentOS下Docker与.netcore(五)之 三剑客之一Docker-swarm集群

1.什么是Docker-Compose

上一章我们讲了通过Dockerfile创建镜像,这在一个小项目中是没问题的,但如果在一个包含多个项目的情况下,我们每次部署都需要执行多次创建镜像与运行容器的命令,这样就比较麻烦,为了解决这种情况,Docker-Compose出现了。Docker-Compose主要就是为了解决在一台服务器创建镜像与运行容器复杂的问题,有了Docker-Compose我们就可以通过一条命令,生成多镜像与运行容器。

2.Docker-Compose安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

查看安装是否成功

3.创建两个.netcore项目,不启用https

ServerProvider项目

新增Dockerfile

FROM microsoft/dotnet:2.1-aspnetcore-runtime
MAINTAINER yishi.chen LABEL description="this is a serverprovider website"
LABEL version="1.0" ARG serverport WORKDIR /app
COPY bin/Release/netcoreapp2.1/publish/ .
EXPOSE $serverport
ENTRYPOINT ["dotnet","ServerProvider.dll"]

Program.cs改动

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls($"http://*:{Environment.GetEnvironmentVariable("serverport")}")
.UseStartup<Startup>();

ValuesController.cs改动

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; namespace ServerProvider.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "this is serverprovider's result" };
} }
}

ServerConsumer项目

新增Dockerfile

FROM microsoft/dotnet:2.1-aspnetcore-runtime
MAINTAINER yishi.chen LABEL description="this is a serverconsumer website"
LABEL version="1.0" ARG consumerport WORKDIR /app
COPY bin/Release/netcoreapp2.1/publish/ .
EXPOSE $consumerport
ENTRYPOINT ["dotnet","ServerComsumer.dll"]

Program.cs改动

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls($"http://*:{Environment.GetEnvironmentVariable("consumerport")}")
.UseStartup<Startup>();

ValueController.cs改动

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; namespace ServerComsumer.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
} // GET api/values/5
[HttpGet("{id}")]
public async Task<ActionResult<string>> Get(int id)
{
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return await httpClient.GetAsync(Environment.GetEnvironmentVariable("serverurl")).Result.Content.ReadAsStringAsync();
}
}
}

新建docker-compose.yml编排文件

内容如下(docker-compose的配置请见https://www.cnblogs.com/chenyishi/p/9965479.html):

version: '3'
services:
s_provider:
build:
context: ./ServerProvider/
dockerfile: Dockerfile
args:
serverport: 1000
ports:
- "1000:1000"
environment:
serverport: 1000
container_name: c_provider
s_consumer:
build:
context: ./ServerComsumer/
dockerfile: Dockerfile
args:
consumerport: 2000
ports:
- "2000:2000"
links:
- s_provider:s_provider
environment:
consumerport: 2000
serverurl: http://s_provider:1000/api/values/
container_name: c_consumer

4.定位到docker-compose文件所在目录,运行docker-compose

[root@cys-test-centos WebDocker]# docker-compose up

运行成功,状态如下:

5.另起一个命令窗口,测试接口

[root@cys-test-centos ~]# curl http://localhost:1000/api/values
["this is serverprovider's result"]
root@cys-test-centos ~]# curl http://localhost:2000/api/values
["value1","value2"]
[root@cys-test-centos ~]# curl http://localhost:2000/api/values/1
["this is serverprovider's result"]

以上是通过docker-compose 新建镜像,并运行容器,如果镜像已存在,则可以去掉构建的过程,我们稍微对docker-compose文件做一下调整

6.在上面步骤的前提下,先CtrlC停止容器,然后docker-compsoe down删除容器

[root@cys-test-centos WebDocker]# docker-compose down
Removing c_consumer ... done
Removing c_provider ... done
Removing network webdocker_default

7.查看生成的镜像

[root@cys-test-centos WebDocker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
webdocker_s_consumer latest cc95654856e1 minutes ago 253MB
webdocker_s_provider latest 5b744758b56b minutes ago 253MB
microsoft/dotnet 2.1-aspnetcore-runtime db366d73508b days ago 253MB

镜像名为:webdocker_s_provider与webdocker_s_consumer

8.修改docker-compose.yml文件

version: '3'
services:
s_provider:
image: webdocker_s_provider
ports:
- "1000:1000"
environment:
serverport: 1000
container_name: c_provider
s_consumer:
image: webdocker_s_consumer
ports:
- "2000:2000"
links:
- s_provider:s_provider
environment:
consumerport: 2000
serverurl: http://s_provider:1000/api/values/
container_name: c_consumer

9.验证接口

[root@cys-test-centos ~]# curl http://localhost:2000/api/values/1
["this is serverprovider's result"]

到此Docker-Compose介绍完毕,下一章讲Docker三剑客之Docker-machine

CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose的更多相关文章

  1. CentOS下安装JDK的三种方法

    方法一:手动解压JDK的压缩包,然后设置环境变量 1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java[root@localhost ~]# c ...

  2. centos下安装nodejs的三种种方式

    方法一:源码包安装 官网下载 centos下载最新版10.9 https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz mkdir / ...

  3. CentOS下Docker与.netcore(五)之 三剑客之一Docker-swarm集群

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  4. CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  5. CentOS下Docker与.netcore(二) 之 Dockerfile

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  6. CentOS下Docker与.netcore(一) 之 安装

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  7. Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试

    一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...

  8. 在centos下部署docker内网私服

    Docker内网私服:docker-registry with nginx & ssl on centos docker-registry既然也是软件应用,自然最简单的方法就是使用官方提供的已 ...

  9. CentOS利用Nginx+Docker部署.netcore应用

    安装docker 官方文档https://docs.docker.com/engine/installation/linux/docker-ce/centos/ [root@sn ~]# yum re ...

随机推荐

  1. 集群的session问题解决方案

    一.nginx ip_hash 同一个ip的请求转发到同一个服务器,太low不解释. 二.spring-session 原理:存入session中的key-value,同时存放到redis中,如果se ...

  2. LVM 逻辑卷管理

    简介: LVM ( Logical Volume Manager ) 逻辑卷管理 一.创建 LV 1.首先在你的虚拟机上添加一块新的硬盘用来做实验. 2.安装 lvm : yum -y install ...

  3. Tomcat集群---Cluster节点配置

    <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递. cha ...

  4. java aop 日志打印 正则设置

    package tz.lion.Utils.aop; import com.alibaba.fastjson.JSON;import org.springframework.web.multipart ...

  5. flask 启动

    export SECRET_KEY=qq77aa88 export MAIL_SERVER=smtp.qq.com export MAIL_USERNAME=591867837@qq.com expo ...

  6. uml 时序图

    1.时序图的概念 时序图定义 : 描述了对象之间传递消息的时间顺序, 用来表示用例中的行为顺序, 是强调消息时间顺序的交互图; 时序图描述的事物: 时序图描述系统中类和类之间的交互, 将这些交互建模成 ...

  7. Linux实战教学笔记27:Nginx详细讲解

    前言:nginx的特点 本节主要对Nginx Web服务软件进行介绍,涉及Nginx的基础,特性,配置部署,优化,以及企业中的日常运维管理和应用.作为HTTP服务软件的后起之秀,Nginx与它的老大哥 ...

  8. centos7 安装mysql5.6.32

    1.  检查是否存在旧的mysql,执行: rpm -qa|grep -i mysql PS:若存在旧mysql,删除查询到的旧mysql,执行: rpm -e --nodeps  XXXX      ...

  9. Visula Studio 2013 初始化静态浮点型数据在C++类内

    class MyClass { private: static const int intvalue= 50; static const float floatvalue = 0.07f; }; 如上 ...

  10. git 常用commands(转)

    常用 Git 命令清单   作者: 阮一峰 日期: 2015年12月 9日 我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60- ...