容器基础与持续交付
2017-11-29 17:35
531 查看
容器基础与持续交付
本文主要关注容器作为服务的基础知识。容器服务涉及知识面广,要点是从实践的角度,理解容器(进程)的基本概念与原理,学会创建容器、运行与使用容器、管理容器。初步掌握 golang 程序镜像制作,初步掌握集成测试、自动构建、自动部署的开发流程。容器基础与持续交付
一云服务基础设施
1 基础设施作为服务Infrastructure as a Service IaaS
2 容器作为服务CaaS
3 容器技术标准与发展
二docker 入门
1 核心概念
2 简单教程
三 golang 镜像构建
四持续交付
一、云服务基础设施
1.1 基础设施作为服务(Infrastructure as a Service / IaaS)
云设施服务提供商将计算、存储、网络等物理资源的资源的虚拟化,让客户 按需 租用虚拟的硬件设备,获得一体化的IT设施服务决解方案。例如:Amazon EC2(Elastic Compute Cloud),S3(Simple Storage Service) 等。案例:我们每月花 8 元 在某供应商租了一台云主机(虚拟机),1 CPU 2G 内存 20G 存储。供应商免费提供 4 个镜像存储 … 各种一键安装服务。
核心技术:虚拟化,虚拟计算机、虚拟网络、虚拟存储 …
资源的管理与调度:
企业产品: Open Stack、Xen、 Hyperv、 Vmware …
桌面产品: virtualbox …
更多了解 IaaS, 建议您从安装 virtualbox 开始
1.2 容器作为服务(CaaS)
CaaS(Cantainer as a Service) 属于 PaaS(Platform as a Service) 范畴,如 Docker, K8S(Kubernetes) ,ECS(Amazon EC2 Container Service),beanstalk 等等。它提供了一个容器运行客户的应用,用户可动态配置应用的计算与内存资源,自动扩展容器的数量,实现应用 roll 更新等等。核心技术:进程隔离 (LXC 、 Control Groups 和 namespace 是多用户操作系统基本特征)
容器技术 与 LXC
Unix 系统为了实现多用户的隔离,建立了丰富的 OS 级别虚拟化机制
LXC 是 Linux® Containers 简称,是 OS 虚拟化的集成与发展
Docker 引擎隔离技术
namespace
pid namespace: 进程隔离 (PID: Process ID).
net namespace: 管理网络接口(NET: Networking).
ipc namespace: 管理IPC资源访问(IPC: InterProcess Communication).
mnt namespace: 管理文件系统挂载点 (MNT: Mount).
uts namespace: 隔离内核与版本识别 (UTS: Unix Timesharing System).
Control Groups: 限定容器内存等资源
Union FS 联合文件系统
Container format 容器文件格式
如果你有大机的经验,分时操作系统为每个用户做的一切,现在给了一个进程罢了。显然,容器只是一个运行在 Linux 内核 上的 进程,与虚拟机(VM)相比,启动虚拟机的时间与资源开销与打开一个 word 是无法比拟的。
与容器云相关的系统,一般都是用 go 开发!
跟多了解 CaaS, 建议您从安装 docker 开始
如果你对 docker 的技术特别感兴趣,阿里云这组关于 容器内核 的文章,可以帮助你理解上述技术。相信可以极大提升你 c 语言和操作系统的功力。 特别推荐 《自己动手写Docker》
1.3 容器技术标准与发展
LXC (https://linuxcontainers.org/)LXC
LXD (Unbutu 17.04 支持)
runC (https://runc.io/)
容器格式标准
中文介绍:http://www.infoq.com/cn/articles/docker-standard-container-execution-engine-runc
开源容器(容器与引擎分离)
ContainerD
中文介绍:https://yq.aliyun.com/articles/66626
Rocket
…
二、docker 入门
2.1 核心概念
Docker引擎 (Docker Engine)Docker Engine is a client-server application with these major components(一个客户-服务应用,含三个部件)
1)驻守(daemon)进程 docker
2)REST API 接口提供外部系统与 docker 进程交互
3)Cli 命令行接口的应用 docker 命令
图:Docker引擎基础架构
镜像(image)
An image is a read-only template with instructions for creating a Docker container.
镜像是创建 docker 容器指令的只读模板。它包含只读的文件系统、网络、内存、CPU 、卷等资源的定义,应用程序在这个环境(Context)上运行。通常,一个镜像申明了自己默认的主进程的应用。
镜像文件系统是层叠结构。一个镜像通常建立在其他镜像基础上,如在 ubuntu 上添加自己的 apache 文件,然后在 apache 上建立 web 应用文件。
例如:
docker pull mysql时,会观察到下载许多文件。但
docker pull MySQL:5.7时基础镜像都已下载,所以很快就下载完成了。
docker 仓库/registry
Docker Hub 就是存放镜像的地方。 你需要在上面注册账号,以保存自己的镜像。 阿里云等服务商也提供镜像存储和下载加速服务!
每个镜像存储空间是 repository。 每个 repo 都支持版本管理, 版本成为 tag, 最新版本成为 latest!
例如:
mysql表示
mysql:latest
容器(Container)
A container is a runnable instance of an image.
镜像中的程序(主进程)运行在只读文件镜像上,对现有文件变更将写在一个临时的卷上(新的一层),该主进程、相关进程、文件系统成为一个运行的实例。
每个容器创建后,有运行、暂停、中止状态,直到移除。
程序运行的产生的数据,都在容器中的文件中,Restart 不会丢失数据。
当主进程结束时,该实例同时结束运行。使用 –rm 表示运行后自动删除容器中可读写层内容。
容器运行时文件系统:
docker 工作流水结构:
服务(Services)
Services allow you to scale containers across multiple Docker daemons, which all work together as a swarm with multiple nodes.
一般地,集群内部服务容器地选择由 动态DNS 实现。
栈(stack)
A stack is a group of interrelated services that share dependencies, and can be orchestrated and scaled together.
能被编排和伸缩的一组相互依赖的服务
栈(stack)用 docker-compose.yml 文件描述服务之间的依赖、数据共享、网络等。使用 docker stack 管理
2.2 简单教程
请参照 构建微服务实验环境(一):容器与应用 ,它基本是官方指南的中文说明。要点:
Dockerfile 与 容器
你必须掌握的 Dockerfile 指令:
FROM 基础镜像 WORKDIR 工作目录 ADD 本地源 容器内目的 RUN 容器系统中命令 EXPOSE 暴露本地端口 ENV 环境变量名 值 VOLUME 卷路径 (可读写的位置) CMD [ ...args ]
Dockerfile 最佳实践 Best practices for writing Dockerfiles
Dockerfile 编写学习: https://github.com/dockerfile
dockerfile 官方案例。 例如 mysql
Dockerfile 命令 速查
docker 图形 UI 与 Docker Remote API
docker 图形化管理工具: portainer
docker 前端开发工具: 一般使用 nodejs 与 go,或者 go。 portainer 就是 docker 平台编程的优秀案例。
了解 docker SDK, SDK and API quickstart
unix socket 知识:Linux下的IPC-UNIX Domain Socket
docker-compose.yml 与服务组合
配置并启动一个服务
…
三、 golang 镜像构建
构建最小的Go程序镜像这个文档是非常不错的,网上有这样的文档应该满意了!
注意:
请使用 golang 1.8 或 1.85 版本做实验。 具体镜像 tag 与 dockerfile 见官网: /golang/”>https://hub.docker.com//golang/
要点:
1.8-onbuild 镜像及其 dockerfile
1.8 镜像及其用途
静态编译,与空镜像上建立最小镜像
四、持续交付
CI/CD 自动化是容器技术富有魅力的方面之一。在容器技术支持下,软件开发流水线包含三个基本步骤:测试自动化。 当开发团队成员将代码提交到 git 仓库,将触发 travis 或 Jenkins 等工具自动按配置脚本执行测试,并返回报告
构建自动化。 当测试通过后,使用 dockerfile 构建容器,并保存到 github 容器中。 你仅需要一个 docker hub 账号就可以在线构建镜像
部署自动化。 使用 docker-compose.yml,容器云平台会自动检测版本更新,部署或升级应用
测试自动化: golang CI 入门
构建自动化: Docker实践(七):Docker Hub(镜像分发、自动化构建)
部署自动化: 待续…
相关文章推荐
- docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道
- 容器私有云和持续发布都要解决哪些基础问题 第一集
- 基于容器服务的持续集成与云端交付(二)- 多维度打磨交付能力
- 如何利用容器构建持续交付/持续发布系统? (有彩蛋)
- 【干货合集】阿里云专家诠释持续集成与云端交付的正确姿势:在云上如何欢快的用好容器服务?
- 我们应该如何基于容器来进行软件的持续交付(二)?
- 基于容器的持续交付管道
- 持续集成之jenkins实践教程:基础篇(6): 在jenkins的容器中进行镜像的构建
- 持续交付就得靠容器
- 利用容器技术构建持续交付/持续发布系统
- 基于容器服务的持续集成与云端交付(一)- 交付之禅
- 容器私有云和持续发布都要解决哪些基础问题 第一聚
- 容器私有云和持续发布都要解决哪些基础问题 第一集
- 基于容器服务的持续集成与云端交付(四)- 多种发布方式
- 基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
- 利用容器技术构建持续交付/持续发布系统
- 基于容器服务的持续集成与云端交付(二)- 多维度打磨交付能力
- 基于容器服务的持续集成与云端交付(一)- 交付之禅
- 容器私有云和持续发布都要解决哪些基础问题 第二集
- C++基础7:10大标准容器