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 ...
随机推荐
- WPF DataGrid自动生成列
<Window x:Class="DataGridExam.MainWindow" xmlns="http://schemas.microsoft.c ...
- HTTP协议-请求报文
- wpf 复制/剪切到本地系统剪切板中以供右键粘贴用
原文:wpf 复制/剪切到本地系统剪切板中以供右键粘贴用 http://www.cnblogs.com/yhdkzy/archive/2012/11/27/2790655.html /// & ...
- git 创建一个空分支
创建一个分支 使用参数 --orphan,这个参数的主要作用有两个,一个是拷贝当前所在分支的所有文件,另一个是没有父结点,可以理解为没有历史记录,是一个完全独立背景干净的分支. 参考git的帮助文档, ...
- vagrant up 无法加载映像目录
错误代码显示: ==> default: Attempting graceful shutdown of VM... ==> default: Clearing any previousl ...
- WAMP采用别名时ThinkPHP5项目设置方法
打开public目录下的.htaccess文件,并在其中添加 RewriteBase /xxx<IfModule mod_rewrite.c> Options +FollowSymlink ...
- 规则“Microsoft Visual Studio 2008 的早期版本”失败。此计算机上安装了 Microsoft Visual Studio 2008 的早期版本。请在安装 SQL Server 2008 前将 Microsoft Visual Studio 2008 升级到 SP1。
今天重装了一下系统后,需要装开发工具,我用的开发工具是Visual Studio2008 和SQL Server2008R2,装完Visual Studio2008的时候在装数据库的时候却出现这样的问 ...
- 微信小程序把玩(二十三)modal组件
原文:微信小程序把玩(二十三)modal组件 modal弹出框常用在提示一些信息比如:退出应用,清楚缓存,修改资料提交时一些提示等等. 常用属性: wxml <!--监听button点击事件-- ...
- delphi7 stringgrid 点列头排序
最近在做stringgrid的项目, 下面delphi7 正常使用,均摘抄网路,但做过细微调整才能正常使用 首先排序的过程 procedure Quicksort(Grid: TStringGrid; ...
- Office Add-In 应用类型及平台支持
原文地址: http://simpeng.net/office-add-in/office-add-in-%e5%ba%94%e7%94%a8%e7%b1%bb%e5%9e%8b%e5%8f%8a%e ...