微服务架构与实践4_Docker
构建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映像||容器的管理工具
- VirtualBox的虚拟机: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映像导成tar包,存储到AWS的S3上,因为S3有更灵活、细粒度的权限控制能力
- 比较
- 发布到私有Docker仓库
- 发布到Docker Hub:自动构建机制
- 部署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 自动扩容机制的创建
- 为使用CloudFormation,需创建相关的基础设施
- 将传统认为最耗时、最容易出错的环境安装、配置……过程采用代码的方式自动化起来
- 部署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映像信息:
- Bash Shell脚本完成Docker映像的部署:docker pull $full_tag
- 自动化部署: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的自动化部署
- 通过不同环境的配置文件,完成基础设施的自动化配置
- 自动化部署脚本
- 基础设施AWS
微服务架构与实践4_Docker的更多相关文章
- 【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 ...
- 微服务架构与实践3_api
场景分析 描述产品服务,基于REST的接口 表述性状态转移(Representational State Transfer,REST) 任务拆分 将整体要做的工作内容划分成小的任务: 统一时间聚焦一个 ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 从 Spring Cloud 开始,聊聊微服务架构实践之路
[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. ...
- Atitit.架构设计趋势 设计模式 ---微服务架构 soa
Atitit.架构设计趋势 设计模式 ---微服务架构 soa 什么是微服务架构?1 .微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现1 微服务与康威定律2 微服务的一些 ...
- 微服务架构下分布式Session管理
转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”. 一.应用架构变 ...
- Re:从0开始的微服务架构:(一)重识微服务架构--转
原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...
- 微服务架构~Zuul1.0和2.0我们该如何选择?
介绍 在今年5月中,Netflix终于开源了它的支持异步调用模式的Zuul网关2.0版本,真可谓千呼万唤始出来.从Netflix的官方博文[附录1]中,我们获得的信息也比较令人振奋: The Clou ...
- 基于.net的微服务架构的开发测试环境运维实践
眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...
随机推荐
- 20155228 2017-5-31 课堂测试:编写MyOD.java
20155228 2017-5-31 课堂测试:编写MyOD.java 题目和要求 编写MyOD.java:用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码 ...
- python 类似java的三目运算符
python中没有其他语言中的三元表达式,不过有类似的实现方法 其他语言中,例如java的三元表达式是这样 int a = 1; String b = ""; b = a > ...
- 在Eclipse下配置算法(第四版)运行环境
第一步:配置Eclipse运行环境 Eclipse运行环境配置过程是很简单的,用过Eclipse进行java开发或学习的同学应该都很熟悉这个过程了. 配置过程: (1)系统环境:Windows7 64 ...
- 【函数封装】javascript判断是否是微信浏览器
//判断是否是微信浏览器的函数 function isWeiXin(){ //window.navigator.userAgent属性包含了浏览器类型.版本.操作系统类型.浏览器引擎类型等信息,这个属 ...
- php 当前时间 当前时间戳和数据库里取出的时间datetime格式进行比较大小
php 当前时间 当前时间戳和数据库里取出的时间datetime格式进行比较大小 UNIX时间戳转换为日期用函数: date() ,date('Y-m-d H:i:s', 1500219870); 日 ...
- HDU 1207 汉诺塔II (递推)
经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...
- JustOj 2042: Dada的游戏
题目描述 Dada无聊时,喜欢做一个游戏,将很多钱分成若干堆排成一列,每堆钱数不固定,谁能找出每堆钱数严格递增的最长区间,谁就是人生赢家了.Dada可能脑子里的水还没干,她找不出来,你来帮她找找吧. ...
- 导入maven项目各个注解均报错了
所遇问题: 导入maven项目各个注解均报错了; 思考1: 这个项目使用了springboot;spring是个”大容器”,所有对象的创建和管理都交给了它, (SpringBoot是一个框架,一种全新 ...
- 动态规划之115 Distinct Subsequences
题目链接:https://leetcode-cn.com/problems/distinct-subsequences/description/ 参考链接:https://www.cnblogs.co ...
- RAC +MVVM
https://blog.csdn.net/capf_sam/article/details/60960530 https://blog.csdn.net/capf_Sam/article/detai ...