构建Docker映像

  • 定义Dockerfile=》Docker根据Dockerfile构建出映像

包含:

    • 基础映像(父映像)信息
    • 维护者信息
    • 映像操作命令
    • 容器启动命令

.net standard中的示例,如下:

FROM 192.*.*.*:5000/westwin.io/customer_containers/dotnet2-pg10:v1.0.3
MAINTAINER Bing Ads Devs <****8@qq.com>
ARG source
WORKDIR /app
EXPOSE 80
ENV "ProjectName"="DVM"
ENV "ComponentVersion"="v1.0.0.0"
ENV "WWEntryName"="dotnet"
ENV "WWEntryParameter"="****.Service.*****.WebApi.dll"
ENV "WWEntryDesc"="****WebApi"
#ENV "WWNamespace"="dev"
ENV "LC_ALL"="en_US.UTF-8"
ENV "LANG"="en_US.UTF-8"
ENV "LANGUAGE"="en_US.UTF-8"
COPY ${source:-obj/Docker/publish} .
RUN ["dos2unix","startup.sh"]
#RUN ["/bin/bash","-c","dos2unix ${ComponentVersion}/*"]
CMD ["/bin/bash","./startup.sh","${WWEntryParameter}","2>&1"," | logger"]
#CMD ["/bin/bash", "-c","date"]

 

  • 配置Docker主机

  mac系统,不支持Linux应用容器特征:

    • VirtualBox的虚拟机:Docker主机

      • 使用Boot2docker创建Docker主机
      • Docker-machine创建Docker主机
    • 安装在Dokcer主机中的Docker环境
    • Docker映像||容器的管理工具
  • 构建Docker映像

    • docker build -t ****-tagName .
    • docker images | grep ****-tagName
  • 运行Docker容器

    • docker run -p 8080:8080  ****-tagName
    • docker ps   :=》container id 、对应image、容器启动最后执行的命令command、容器端口转发配置……
    • 获取Dokcer主机的IP地址
    • 打开浏览器,访问url地址
  • 发布Docker映像
    • 发布到Docker Hub:自动构建机制

      • 配置Docker Hub的工程

      • 从Github上获取代码
      • 构建Docker映像
      • 发布该映像
        • 发布到私有Docker仓库

          • 设置Docker的私有仓库地址&访问仓库的用户
          • 设置构建号BUILD_NUMBER、版本号VERSION……参数,组成docker镜像的FULL_TAG
          • 使用docker build构建Docker映像
          • 使用docker push将映像上传到指定的Docker仓库中

        • 发布到云存储

          • Docker映像导成tar包,存储到AWS的S3上,因为S3有更灵活、细粒度的权限控制能力

            • docker save生成docker映像
            • 使用 aws s3 mv将映像复制到剧吐的Bucket上

        • 比较

  • 部署Docker映像

    • 基础设施AWS

      • 包括防火墙配置、路由配置、安全访问控制……,有些情况还需要自动化的扩容机制
      • 采用亚马逊的AWS Web Service作为部署Docker的基础设施,并使用AWS EC2节点作为运行Docker映像的主机
        • Amazon EC2 是亚马逊AWS平台中位用户提供计算的资源,也称为Amazon EC2实例
      • 当前例子,基础设施主要包括:
        • 虚拟私有云 Virtual Private Cloud:
        • 安全组 Security Group
        • 计算实例 Elastic Compute Cloud
        • 自动扩容机制 Auto scaling
        • DNS解析 Route 53
      • 基础设施自动化 infrastructure as code
        • 将传统认为最耗时、最容易出错的环境安装、配置……过程采用代码的方式自动化起来

          • 基础设施自动化工具:Chef、Puppet、Ansible、Salt……
          • 某些云平台厂商也会提供配套的工具来帮助用户完成基础设施的自动化构建:AWS Web Service提供的CloudFormation、Netflix提供的Asgard……
        • 采用亚马逊的AWS CloudFormation作为部署、运行Docker的基础设施,并使用 AWS EC2 节点运行 Docker容器
          • 为使用CloudFormation,需创建相关的基础设施

            • AWS EC2 节点的创建
            • AWS Security Group 的创建
            • AWS DNS 解析的配置
            • AWS Autoscaling Group 自动扩容机制的创建
    • 部署Docker映像
      • Bash Shell脚本完成Docker映像的部署:docker pull $full_tag

        • 准备Docker映像信息:

          • 通过环境变量准备Docker映像的标签信息
          • 包括:Docker的仓库地址、映像名称、映像版本号……
        • 获取Docker映像
          • 从Docker Hub上下载对应的Docker映像:Docker pull $Full_tag
        • 启动Docker映像
          • 使用 docker run -d -p 80:8080在当前的Docker环境中启动Docker容器
          • -p 80:8080 指的是将Dokcer主机的80端口映射到Docker容器的8080端口=》可以直接访问Docker主机的80端口访问容器提供的服务
    • 自动化部署:Docker映像的构建 & 部署
      • 自动化部署脚本

        • 读取配置文件,
          • 根据环境相关的配置,在不同的环境(生产、测试)中完成资源的创建、更新
          • 包括:新建EC2节点、更新Load Balancer配置、更新Auto Scaling配置……
          • 这部分资源的创建、更新完全依赖AWS=》忽略该部分实现
        • 在创建的EC2节点上执行脚本的相关内容,获取Docker映像,并运行容器
          • 为了实现当EC2节点启动后,能自动执行Docker的映像、部署,脚本代码将被嵌入到AUSCloudFormation的User Data中
      • 定义生产环境配置文件deploy-prod.yml
        • 定义生产环境相关配置
        • 配置文件的内容
          • app:***-service的信息
          • docker:Docker映像的标签信息
          • aws:部署的VPC、Region、Subnets、Load Balancer、EC2节点……信息
          • splunk:splunk的相关信息
          • nagios:nagios的相关信息
      • 定义测试环境配置文件deploy-test.yml
        • 部署测试环境的配置文件deploy-test.yml与部署生产环境的yml结构一致,但具体的配置参数略有差异
          • 为了保持安全性、隔离性,生产环境、测试环境运行在两个独立的AWS账号中
      • 在节点启动时自动加载&运行Docker镜像,完成Docker的自动化部署
      • 通过不同环境的配置文件,完成基础设施的自动化配置

 

微服务架构与实践4_Docker的更多相关文章

  1. 【EBook】-NO.161.微服务.1 -【微服务架构与实践】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  2. 微服务架构与实践3_api

    场景分析 描述产品服务,基于REST的接口 表述性状态转移(Representational State Transfer,REST) 任务拆分 将整体要做的工作内容划分成小的任务: 统一时间聚焦一个 ...

  3. 基于 Docker 的微服务架构实践

    本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...

  4. 从 Spring Cloud 开始,聊聊微服务架构实践之路

    [编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. ...

  5. Atitit.架构设计趋势 设计模式 ---微服务架构  soa

    Atitit.架构设计趋势 设计模式 ---微服务架构  soa 什么是微服务架构?1 .微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现1 微服务与康威定律2 微服务的一些 ...

  6. 微服务架构下分布式Session管理

    转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”. 一.应用架构变 ...

  7. Re:从0开始的微服务架构:(一)重识微服务架构--转

    原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...

  8. 微服务架构~Zuul1.0和2.0我们该如何选择?

    介绍 在今年5月中,Netflix终于开源了它的支持异步调用模式的Zuul网关2.0版本,真可谓千呼万唤始出来.从Netflix的官方博文[附录1]中,我们获得的信息也比较令人振奋: The Clou ...

  9. 基于.net的微服务架构的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

随机推荐

  1. scu 4444 Travel

    题意: 一个完全图,有n个点,其中m条边是权值为a的无向边,其它是权值为b的无向边,问从1到n的最短路. 思路: 首先判断1和n被哪种边连通. 如果是被a连通,那么就需要全部走b的边到达n,选择最小的 ...

  2. 数据模型Model(I)

    枚举.结构体和协议组成Model //定义一个协议 protocol BaseItemProtocal { var title: String { get set } //属性是可读可写的 var t ...

  3. GitHub 代码上传

    方法一 登录GitHub后,点击下面的图 New responsitory 按钮 或者点击绿色按钮 New repository,新建一个新建一个远程仓库(remote repository),点击后 ...

  4. Web API 跨域请求

    分布式技术在项目中会频繁用到,以前接触过WebService(可跨平台).WCF(功能强大,配置繁琐),    最近由于上层业务调整,将原来的MVC项目一分为三,将数据层提取出来,用API去访问.然后 ...

  5. python中装饰器修复技术

    python装饰器@wraps作用-修复被装饰后的函数名等属性的改变 Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变), 为了 ...

  6. 写自动更新程序出现"远程服务器返回错误: (404) 未找到"

    在win2003配置后,在客户端运行时能够下载exe和dll文件,但是在更新lib文件时总是报“远程服务器返回错误: (404) 未找到”错误,不明白咋会出现这个问题,去网上一查,发现以下解决办法: ...

  7. 初探AngularJs框架(三)

    一.实现todoList的demo 功能很简单,提供一个文本框,用户输入回车后添加新条目.每个条目可以在待处理和处理中两个区域间切换,每个条目都可以被删除,大致的界面如下图所示: 二.处理逻辑 首先将 ...

  8. 特定条件下批量解压文件改变编码,顺便修改.so.0找不到等一些小问题

    直接结论: 1.linux解压文件乱码: unzip -O GBK *.zip 2.linux改变文件内容编码: 安装enca,下载地址:https://github.com/nijel/enca/i ...

  9. nginx FastCGI错误Primary script unknown解决办法

    在centos上成功编译安装nginx 1.4.php 5.4并成功启动nginx和php-fpm后,访问php提示"File not found.",同时在错误日志中看到: 复制 ...

  10. Eclipse导入MyEclipse创建的WEB项目无法识别的解决方案

    Eclipse导入MyEclipse创建的WEB项目无法识别的解决方案