Docker笔记(一):什么是Docker
原文地址: http://blog.jboost.cn/2019/07/13/docker-1.html
1. 前言
接触Docker也有两年多了,断断续续玩过一些应用场景,如安装一些常用工具服务,部署业务项目,基于gitlab+jenkins pipeline+docker的CI/CD实现等。了解其基本知识与操作,但不能说深度掌握,故借此系列进行梳理与学习,也希望对有意学习Docker的人提供参考。
2. Docker简介
Docker最初是dotCloud公司(后来也改名为Docker)的一个内部项目,于2013年3月开源。Docker使用Google推出的Go语言实现,基于Linux内核的cgroup、namespace、Union FS等技术(先不用急着了解这些都是啥),对进程进行隔离,是操作系统层面的虚拟化技术。相对于传统的硬件层面的虚拟化技术(虚拟机),Docker显得更为轻量化。下图为传统虚拟机与Docker的结构对比
由上图可看出传统虚拟机技术是在硬件层面虚拟出一套硬件(CPU、内存、磁盘、网卡等)后,在其上运行一个完整的操作系统,再在操作系统上运行应用进程;而Docker的应用进程是直接运行在宿主机的内核上,也不需要进行硬件虚拟,因此,Docker要比传统虚拟机更为轻便。
总结Docker相对传统虚拟化技术的优势如下:
- 更高的资源利用率:Docker不需要硬件虚拟与运行完整操作系统的开销,所以资源利用率更高,同样配置的主机,采用Docker往往可以运行更多数量的应用。
- 更高效的使用体验:在操作系统上安装一些常用软件,如mysql,redis等,往往需要折腾好一阵,有些还要手动安装各种依赖,而采用Docker,可能几行命令就可以让一个服务快速运行起来。
- 一致的运行环境:Docker镜像功能可以把程序运行需要的环境进行封装,确保程序在开发、测试、生产环境都能保持一致性,避免因环境不一致导致程序运行异常。
- CI/CD支持:使用Docker可以定制镜像来实现持续集成、持续部署,如基于gitlab + jenkins pipeline + docker的自动化部署。
- 更轻松的维护:因为Docker保证了运行环境的一致性,因此应用的迁移或缩放将变得很容易;Docker的分层存储与镜像技术,也使得应用重复部分的复用变得更简单,基于基础镜像可以进一步扩展定义自己的镜像,也可以直接使用官方镜像来使用。
3. Docker的基本架构
Docker的基本架构图如下
主要包括几部分:
- Docker daemon(Docker守护进程
dockerd):Docker的执行引擎,负责监听处理Docker客户端请求与管理Docker相关对象,如镜像、容器、网络、数据卷等。一个Docker守护进程可与其它Docker守护进程进行通信,作为Docker服务进行管理。 - Docker client(Docker客户端
docker):Docker客户端(dockerCLI命令)是大多数用户用来与Docker守护进程交互的方式,比如你在命令行执行docker run,Docker客户端将发送该命令请求到Docker守护进程,由守护进程执行。Docker客户端可通过REST API, UNIX Socket或网络接口来与Docker守护进程进行通信,并且可与多个Docker守护进程进行通信。 - Docker Registry(Docker注册中心):用来存储Docker镜像的仓库,类似于Maven的Nexus。Docker官方提供了一个公共镜像仓库Docker Hub( https://hub.docker.com/ ),
docker相关命令默认会从Docker Hub上搜索与下载镜像,我们可以配置一些国内镜像仓库地址来进行加速,甚至搭建自己的私有镜像仓库。 - Docker Objects:Docker管理的对象,主要包括镜像、容器、网络、数据卷等。
4. Docker的用途
根据第二部分Docker的优势及笔者的经验来看,目前Docker主要用于
- 常用软件服务的搭建运行,如Mysql、Redis、Nginx等
- 业务服务的发布部署,尤其是基于SpringBoot的微服务
- CI/CD实现,结合Gitlab的webhook,Jenkins的pipeline,实现自动化集成与部署
- 快速的弹性伸缩,在容器集群化管理的场景中,如Swarm、K8s解决方案中,可基于容器对服务进行快速的弹性伸缩来应对业务量的突发情况
- 执行环境封装,如一些深度学习框架模型,打成Docker镜像的方式进行发布,可以快速在不同的环境中运行起来
- …
5. 总结
在微服务架构、DevOps这些概念盛行的时代,容器化技术变得越来越重要,几乎成为每一位开发人员需要掌握的技能。本系列文章是笔者基于自身实践及相关文献参考,对Docker相关技术进行整理,欢迎关注,共同学习。
我的个人博客地址:http://blog.jboost.cn
我的微信公众号:jboost-ksxy (一个不只有技术干货的公众号,欢迎关注,及时获取更新内容)
———————————————————————————————————————————————————————————————
Docker笔记(一):什么是Docker的更多相关文章
- docker笔记(2)——docker镜像操作
操作环境:mac OS 10.14.6 docker版本:10.03.1 终端:iterm2 3.3 时间:2019年8月 docker 镜像,是运行容器的模板,通过pull操作会向指定仓库获取镜像, ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- Docker笔记一:Docker介绍
目录 什么是Docker? Docker的核心概念 Docker镜像命令 Docker容器命令 Docker实战 查看我的镜像 启动Redis Docker中国镜像加速 血与泪的教训 什么是Docke ...
- Docker笔记(二):Docker管理的对象
原文地址:http://blog.jboost.cn/2019/07/14/docker-2.html 在Docker笔记(一):什么是Docker中,我们提到了Docker管理的对象包含镜像.容器. ...
- Docker笔记(四):Docker镜像管理
原文地址:http://blog.jboost.cn/2019/07/16/docker-4.html 在Docker中,应用是通过容器来运行的,而容器的运行是基于镜像的,类似面向对象设计中类与对象的 ...
- Docker笔记(七):常用服务安装——Nginx、MySql、Redis
开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的安装方法,一般都相对比较繁琐 —— 要经过下载软件或源码包,编译安装,配置,启动等步骤,使用 Docker ...
- Docker笔记(八):数据管理
前面(哪个前面我也忘了)有说过,如果我们需要对数据进行持久化保存,不应使其存储在容器中,因为容器中的数据会随着容器的删除而丢失,而因通过将数据存储于宿主机文件系统的形式来持久化.在Docker容器中管 ...
- Docker笔记(九):网络管理
Docker的应用运行在容器中,其相互之间或与外部之间是如何通信的,涉及到哪些知识点,本文对相关内容进行整理.因网络这块牵涉的面较多,因此只从日常使用或理解的角度出发,过于专业的就不深入探讨了. 1. ...
- Docker笔记(十一):Dockerfile详解与最佳实践
Dockerfile是一个文本文件,包含了一条条指令,每条指令对应构建一层镜像,Docker基于它来构建一个完整镜像.本文介绍Dockerfile的常用指令及相应的最佳实践建议. 1. 理解构建上下文 ...
- 【Linux】【自学笔记】Linux下面docker安装mysql
写在前面: 捣腾继续,之前把一个SpringBoot的程序安装在docker上面,参考链接:https://www.cnblogs.com/aki-stones/p/2019-11-01-note.h ...
随机推荐
- C#:foreach语句,yield语句
原文:C#:foreach语句,yield语句 1. foreach语句 C#编译器会把foreach语句转换为IEnumerable接口的方法和属性. foreach (Person p in pe ...
- 让用户使用第三方账号(如亚马逊账号)接入AWS IoT系统
我们想象这么一个IoT应用场景:厂商A使用AWS IoT来开发物联网解决方案,那么A把设备卖给用户的时候,需要使用户能够登入AWS IoT系统来控制其购买的A的设备,也就是说给用户分配适当的权限.下面 ...
- iOS学习总结之ARC和非ARC的单例模式实现
iOS单例模式的实现 首先我们要明白下面三个问题: 什么是单例模式 单例模式的优点 如何实现单例模式 1.什么是单例模式 单例模式(Singleton):单例模式确保对于一个给定的类只有一个实例存在, ...
- 什么是TOML?
配置文件的使用由来已久,从.ini.XML.JSON.YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升. TOML是前GitHub CEO, Tom Preston-Werne ...
- Android零基础入门第66节:RecyclerView点击事件处理
前面两期学习了RecyclerView的简单使用,并为其item添加了分割线.在实际运用中,无论是List还是Grid效果,基本都会伴随着一些点击操作,那么本期就来一起学习RecyclerView的点 ...
- BoxedApp Packer 将您的原始应用“打包”成单个完全的可执行二进制文件
及时应对移动化趋势 在没有安装到本地硬盘驱动的情况下,使用闪存卡.网络文件夹或者可移动磁盘远程启动应用程序通常是一件令人头疼的事,你会发现,应用程序会突然会丢失文件.路径错误或者远程注册表故障等一系列 ...
- Screensiz.es站收集整理了移动端的相关尺寸。
Screensiz.es站收集整理了移动端的相关尺寸. Screensiz.es 彩蛋爆料直击现场 Screensiz.es站收集整理了移动端的相关尺寸.
- c# 文本超长截断
根据控件大小进行截断 private void SetStringTruncat(Static.LabelEx lbl) { string oldStr = lbl.Text; if (string. ...
- 记住以下10条,Linux磁盘与文件系统管理无忧矣
1.查看当前Linux系统所支持的文件系统:ls -l /lib/modules/$(uname -r)/kernel/fs:目前已加载到内存中支持的文件系统:cat /proc/filesystem ...
- 缩放手势 ScaleGestureDetector 源码解析,这一篇就够了
其实在我们日常的编程中,对于缩放手势的使用并不是很经常,这一手势主要是用在图片浏览方面,比如下方例子.但是(敲重点),作为 Android 入门的基础来说,学习 ScaleGestureDetecto ...