文档章节

Docker入门与实践

PythonJsGo
 PythonJsGo
发布于 2017/05/25 20:34
字数 2030
阅读 15
收藏 1

    本文原先发表与博客园(http://www.cnblogs.com/libingbin/p/6905830.html),不过我的博客园已经不再更新了,原有博文会逐步迁移的。

 

Docker 背景

 

• Docker是基于容器技术的轻量级虚拟化解决方案
• Docker是容器引擎,把Linux的cgroup、 namespace等容器底层技术进行封装抽象(后面会介绍此两种技术),为用户提供了创建和管理容器的便捷界面(包括命令行和API)
• Docker 是一个开源项目,诞生于 2013 年初,基于Google 公司推出的 Go 语言实现
• 微软,红帽Linux, IBM, Oracle等主流IT厂商已经在自己的产品里增加对Docker的支持。
• Google 每周启动超过20亿个容器进行业务服务,于上个世纪90年代已经开始大规模使用容器技术

发展示例图

传统的开发部署流程

 

传统VM虚拟化环境存在的问题  

 

1. 虚拟机资源利用效率低
2. 单物理机多应用无法有效隔离(进程空间, cpu
资源,磁盘)
3. 运维部署不便,环境依赖性强
4. 测试、版本管理复杂
5. 迁移成本高
6. 传统虚拟机,空间占用大,启动慢,管理复杂


Docker - 轻量级虚拟化容器优点

 

1. 秒级启动和停止,空间资源占用极少
2. 实现进程级别的隔离
3. 可在普通服务器上建立上百个docker实例
4. 加快开发测试部署的速度
5. 简化版本管理
 

开发和运维的有效隔离

 

一个IT系统应该包含如下几个层次:
• 应用程序
• 运行时平台(bin/framework/lib)
• 操作系统
• 硬件(基础设施)
开发人员的主要工作是应用程序的编码、构建、测试和发布,涉及应用
程序和运行时平台这两层。
而运维人员的工作则涉及从硬件、操作系统到运行时平台的安装、配置、
运行监控、升级和优化等工作。
Docker提供了一种运行时环境,隔离了上层应用于下层操作系统和硬件的
关联,使得术业有专攻。
 

Docker之helloworld

 

1. 安装Docker
    在ubuntu 下 执行一条命令即可安装
     apt-get install docker-io

2. 运行
    docker run busybox /bin/echo "HelloWorld"

Docker 背后干了什么

 

• 我们创建了一个容器
• 它拥有:
    文件系统(基于busybox镜像)
    网络栈(具有私有网络服务)
    进程空间
• 自动安装
    docker会自动检查本地是否有busybox镜像(一个测试版本的linux系统),如果没有则自动下载并启动
• 通过调用宿主机上的bash启动进程,并打印Helloworld

Docker 技术基础-namespace实现资源隔离
 

Docker的技术基础-CGROUP

 

计算机资源使用上的隔离,通常我们叫做使用限额
    • Resource limitation: 限制资源使用,比如内存使用上限以及文件系统的缓存限制。
    • Prioritization: 优先级控制,比如: CPU利用和磁盘IO吞吐。
    • Accounting: 一些审计或一些统计,主要目的是为了计费。
    • Control: 挂起进程,恢复执行进程

 

Docker的技术基础-Union文件系统

 

• 功能类似diff命令,通过分层的方式记录文件的累积变化情况。
• 例如 Tomcat, Oracle, Weblogic镜像都可以共享同一个Linux基础镜像,每一个镜像保存的只是在
基础镜像上他们修改的部分
• Docker的镜像可以非常多,但是每个都很小,而且加载启动非常快
 

 

Docker的重要概念

 

• 镜像(image)
• 容器(container)
• 数据卷(volumes)
• 链接(links)
• 仓库(Repository)
 

Docker之镜像

 

• Docker 的镜像类似虚拟机的快照,但是更轻量
• 例如:一个镜像可以包含一个完整的 Linux 操作系统环境,里面仅安装了 Tomcat或用户需要的其
它应用程序
• 镜像可以用来创建容器

 

Docker之容器

 

• 等同于从快照中创建虚拟机
• 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
• 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
 

从同一个镜像启动多个容器
 

数据卷

 

数据卷是一个可供一个或多个容器使用的特殊目录
• 进程和数据的分离
• 实际保存在容器之外,从而允许你在不影响数据的情况下销毁、重建、修改、丢弃容器
• 可用于数据持久化
• 数据卷的使用,类似于 Linux 下对目录或文件进行 mount。
• 数据卷的共享, 可以在多个容器之间共享数据卷
 

链接
 

• 容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式
• 在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息
• Docker 在两个互联的容器之间创建了一个安全隧道,而且不用映射它们的端口到宿
主主机上。从而避免了暴露关键系统(如数据库)端口到外部网络上.

这里实际上1521端口只有web容器和myapp_db容器是可见的,对其他容器是不可见的。


仓库及仓库注册服务器

 

• 仓库是集中存放镜像文件的场所
• 仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
• 仓库分为公开仓库(Public)和私有仓库(Private)两种形式
• push 镜像到仓库,从仓库pull下镜像

 

Docker 操作与使用

 

 

Docker常用命令归纳总结

 

•容器生命周期管理
    docker [run|start|stop|restart|kill|rm|pause|unpause]
•容器操作运维
    docker [ps|inspect|top|attach|events|logs|wait|export|port]
•容器rootfs命令
    docker [commit|cp|diff]
•镜像仓库
    docker [login|pull|push|search]
•本地镜像管理
    docker [images|rmi|tag|build|history|save|import]
•其他命令
    docker [info|version]

Docker - 应用方向

 

1. 简化配置
应用配置能够无缝运行在任何平台,将应用环境和底层环境实现了解耦;
2. 代码管道化管理
代码从开发者的机器到生产环境机器进行管道化管理,能够平滑迁移;
3. 应用隔离
多个应用服务部署在多个Docker中,实现应用之间的解耦;
4. 服务合并
合并多个服务,减少机器占用;
5. 快速部署
快速的启动速度,极小空间占用;
6. 开发人员的生产化
能够在单机上搭建分布式集群服务,用以测试在真正生产环境下的代码


以Docker为单位的开发部署流程设计

• 以docker为单位的开发测试部署流程,简化了环境搭建的步骤,提高了资源利用效率和开发测试环境部署的速度,降低了迁移的成本,提升项目进度。

基于Docker自动化发布构建流程图

 

DockerUI - Docker图形化管理工作

 

Harbor – 企业级docker仓库

 

Docker Compose -简化复杂容器应用的利器

 

更多Docker工具
• Docker For Windows and MAC
https://download.docker.com/win/stable/InstallDocker.msi
• Eclipse for Docker has arrived on Mars
https://www.eclipse.org/community/eclipse_newsletter/2015/june/article3.php
http://www.oschina.net/news/63789/eclipse-for-docker-has-arrived
• Eclipse Docker Tooling for Neon
https://www.eclipse.org/community/eclipse_newsletter/2016/july/article2.php
 

本文为博主原创文章,转载请注明出处!

https://my.oschina.net/u/3375733/blog/

© 著作权归作者所有

PythonJsGo
粉丝 31
博文 104
码字总数 155493
作品 0
朝阳
高级程序员
私信 提问
【说云精选】 容器化与 Docker 专刊 第一期

Docker 技术经历了数年的发展,已经逐渐成了气候,完善的工具链让Docker 不再是那个拄着拐杖走路的服务,如今的 Docker 已经能够做好应用的开发部署工作。今天我们开始更新「容器化与 Docker...

西秦说云
2018/01/02
0
0
Docker 学习资源整理

作者:林梓 链接:https://zhuanlan.zhihu.com/p/23508637 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Docker 是近年来非常火的容器技术,而且啊 Do...

落叶追风
2016/11/22
31
0
tech share - docker 入门

date: 2017-12-19 14:04:30 title: tech share - docker 入门 slide: https://c.daydaygo.top/landslide/TS20171222.html 团队内很多同学对 docker 感兴趣, 于是准备了这期分享, 希望可以帮助......

daydaygo
2017/12/21
0
0
【技术干货】Docker精华学习资料集锦,老司机快上车

【技术干货】Docker精华学习资料集锦,老司机快上车 Docker是一个开源的应用容器引擎,提供了一种在安全、可重复的环境中自动部署软件的方式,允许开发者将他们的应用和依赖包打包到一个可移...

阿里云官方博客
2017/03/16
188
2
推荐书籍系列(4) -- node.js&docker

最近学习了很多技术包括docker、nodejs、mongodb.这些都是近几年比较火的技术。也代表着技术发展的方向。作为一个程序员,一定要与时俱进,否者会跟不上时代。别人都在用docker,你还在用一些...

刘新全
2016/03/02
102
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部