Docker 学习总结

前言


Docker 火了很长时间了,有幸体验了一段时间,平常主要用于测试环境的项目一键部署,体验不错,值得推荐。本来想着就写一篇文章总结下 Docker 的一些使用场景和踩过的坑,最后写完发现篇幅过长不方便阅读,就拆分成几篇作为一个系列,在本文最后给出传送门,有兴趣的同学可以了解下。

图片来自Docker官网

简介 ( 官方网站 )


什么是 Docker ?

Docker 是一种容器技术,它可以将应用和环境等进行打包,形成一个独立的,类似于手机APP形式的「应用」,这个应用可以直接被分发到任意一个支持 Docker 的环境中,通过简单的命令即可启动运行。Docker 是一种最流行的容器化实现方案。和虚拟化技术类似,它极大的方便了应用服务的部署;又与虚拟化技术不同,它以一种更轻量的方式实现了应用服务的打包。使用 Docker 可以让每个应用彼此相互隔离,在同一台机器上同时运行多个应用,不过他们彼此之间共享同一个操作系统。Docker 的优势在于,它可以在更细的粒度上进行资源的管理,也比虚拟化技术更加节约资源。

看到这个概念,立马想到了 虚拟机,两者有点像,下面给出官网的对比图,直观感受下二者的区别 ( 参考 )

Docker与虚拟机对比图

简单的说,Docker 可以共享物理机的硬件和系统资源,而 虚拟机 要对硬件进行虚拟化并且需要额外的资源开销用于运行虚拟的操作系统导致资源利用率低、性能差。在一台物理机上同时启动多个 Docker 容器或多个 虚拟机 就能有鲜明的对比了。

图片来自网络

目前国内有好几家提供 Docker 云服务平台:道客云时速云灵雀云希云 等,本人使用过道客云和时速云,界面类似于阿里云的控制台 ( 阿里云 上也有 容器服务 ),功能上包含了 镜像仓库云服务器管理持续集成 等等。虽然这几个平台的功能都是围绕 Docker 展开的,但业务侧重点也都有所不同,大家自己把玩吧。一般 个人版 是免费的,对于个人小项目的管理绰绰有余了,至于收费的 企业版 没用过就不发表意见了。

Docker 的特点和优势


结合前段时间的使用体验,主要归纳为以下几点:

1. 可移植性,一次配置,随处移植

开发环境搭建绝对是开发过程中最令人头痛的环节,费时费劲费脑不说,开发到一半环境突然坏了,简直是灾难啊。

  • 比如说有这样的场景,工具1 只能运行在 系统A 上,工具2 只能运行在 系统B上,然而残酷的需求是 工具1工具2 都必须得用...
  • 再比如说,来了一个新同事,准备大展身手帮忙配环境,结果出现各种神奇的问题,各种 运行不了,内心也是崩溃得不要不要的...

使用 Docker 可以将每个工具和相关的配置打包成镜像,这样就可以方便的 共享备份还原 了。当然,这种方法更适合长期在 Linux 环境下开发的同学,本人作为 Windows 重度用户想想就行了。还记得以前上学那会儿,很多开发工具都是指名道姓要运行在 xxx系统 上,想到装 虚拟机,各种乱七八糟的配置,对硬件的要求也比较奇葩等等,还没开始就想放弃了,最重要的是还不一定能成功!!!现在用了 Docker 之后,这些都不是事儿!

2. 标准化应用发布和使用

Linux 各种五花八门的发行版本还是比较多的,开发好的应用可能不能如愿的兼容各个发行版本,更何况每个发行版本基本有一套专属的指令体系和软件包管理体系,对于小白来说真是心塞。使用了 Docker 之后,容器将应用与 物理机 操作系统隔离,内部使用独立的操作系统 ( 内核 还是共享的 ),所以不管移植到哪个平台上始终可以运行在内部的操作系统之上,开发过程中也就可以专门针对一个最熟悉的操作系统进行配置和性能优化,大大减小学习成本和运维成本。另外,将应用和环境作为一个整体 ( 镜像 ),还有一个好处就是,通过统一的 Docker 命令实现对不同应用的 标准化 管理,镜像仓库 中每一个 镜像 就是一个应用 ( 好比在 应用商店 下载手机 APP ),获取 镜像 之后你不需要特别了解环境怎么配置,通过什么脚本或指令来启动,怎么管理开机启动的等等,这些问题都交给 Docker ,你只需了解相关的 Docker 命令就可以快乐地玩耍了。

3. 资源利用率高,启动迅速

启动 Docker 容器运行应用相当于是运行本地进程,相比 虚拟机 既可充分利用硬件性能,又节约启动时间,操作也简便。

4. 持续集成

配合 持续集成 工具如 Jenkins版本控制 工具如 GitSVN项目构建 工具如 Maven 可以实现 一键发布 或者 自动化构建,结束人肉运维的惨淡人生。就拿 Tomcat 来说,没有彻底重启的功能,只能靠自己写 脚本 杀进程,有时又会莫名其妙关闭 ( 大部分原因还是代码没写好 ),这又需要写脚本定时监控重启 Tomcat。针对这两个痛点,这时 Docker 就派上了用场,对于 Docker 来说,重启容器即等价于重启应用,而且 Docker 自身可以很方便地设置开机启动容器和自动重启容器保证服务不中断。

5. 隔离性

作为一枚小白,对于 Linux 平台上应用的安装真心看不懂,有的可以通过平台的包管理工具安装,有的只能通过源码安装,安装后目录难找就算了,有时候一些配置文件要么遍地开花要么根本找不到,而且貌似也没有纯净卸载的选项,残留各种碎片。Docker 的思想就类似于 集装箱,整合零碎的东西于一个整体之内,简化操作步骤,同时可以隔离内外环境,内部应用不入侵外部操作系统环境,外部操作系统不干扰内部应用运行,而这个隔离也可以有效解决应用之间的冲突。当然,这个隔离性还是取决于实际的使用情况, 错误地使用 数据卷 和其他 特殊配置 都会破坏 容器宿主机 之间的和谐。

6. 子服务器搭建

可能手头有一台高性能的服务器,自己一个人使用且用途也不大的话显得太浪费,这时就可以构建几个容器限制 内存CPU磁盘 等配置后分享给其他人使用,这相当于多开了几台虚拟的服务器,容器内性能并没有打多少折扣而且容器与容器之间,容器与物理机之间都是相互独立不干扰的。写到这里忽然想到,我买的阿里云 ECS 会不会也只是一个 Docker 容器呢?就算不是也应该是类似的存在吧。

Docker 涉及到的一些关键概念 ( 参考 )


1. 镜像
图片来自网络

有装过 操作系统 的朋友可能想到了系统镜像( ISO文件 ),个人觉得就是一回事,就是程序的安装包,是一个包含了应用程序和其运行时环境的只读文件。镜像需要以一个 Linux 发行版作为基础运行环境,在此之上构建自己的应用。镜像的结构为一层一层的文件系统,每一层包含了所做的修改内容,所有层次的修改合并就构成了最终的镜像内容,因此,镜像是可以继承的,子镜像是在父镜像的基础上做一定的修改得到的。有一点要注意的是,即使在后面的层次中删除了某些文件,但它们仍然存在于之前的层次之中而并不会减小镜像大小,理论上层次增加就会导致镜像占用大小增加。因此,自己构建的镜像应尽可能减少层次,每一层的修改只保留必要的文件,删除临时文件。另外,由于这种层次结构,镜像文件的拉取是一个增量的过程,每次只下载不存在的层级数据,而不必每次下载完整的镜像文件,大大减少了迁移过程中网络传输的数据量。

图片来自网络
2. 容器

既然说 镜像 是安装包,那么 容器 就是运行中的程序,这才是等价于 虚拟机 的存在。之前说 镜像 是由一层层文件系统构成的,不过它们都是只读的,启动 容器 之后会在它们之上构建一层 读写层容器 运行过程中的一切修改都会保存在当中,将 读写层 保存起来就构建出了新的 镜像 ( docker commit )。

3. 镜像仓库

相当于就是手机 APP 的应用商店,在这里我们可以下载前人构建的 镜像,即可直接使用应用,也可以基于这些镜像构建针对自有业务的个性化镜像。镜像仓库 的作用体现在 版本控制资源共享权限管理

Docker 的安装


截图来自Docker官网

通过上面官网的截图可以看出 Docker 基本支持各个平台了,这里就推荐下 daocloud 上关于 DockerLinux 系统上的 安装方式

# 安装
sudo curl -sSL https://get.daocloud.io/docker | sh

# 非root帐号下安装完启动可能会报错,需要执行下面的步骤
# 新建docker用户组
sudo groupadd docker
# 将当前账户加入docker用户组
sudo gpasswd -a ${USER} docker
重启docker
sudo service docker restart
# 刷新docker组成员
newgrp - docker

# 查看版本
ubuntu@VM-84-201-ubuntu:~$ docker version
Client:
 Version:      17.05.0-ce
 API version:  1.29
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:10:54 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.05.0-ce
 API version:  1.29 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:10:54 2017
 OS/Arch:      linux/amd64
 Experimental: false

关于Docker版本

针对不同发行版,卸载方式也有所不同

1. Ubuntu|Debian
sudo apt-get -y remove docker docker-engine
2. RHEL|CentOS
sudo yum remove docker \
docker-ce \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
3. Fedora
sudo dnf remove docker \
docker-common \
container-selinux \
docker-selinux \
docker-engine

卸载 Docker 后, /var/lib/docker/ 目录下会保留原 Docker 的镜像,网络,存储卷等文件. 如果需要全新安装 Docker, 需要删除 /var/lib/docker/ 目录。

sudo rm -rf /var/lib/docker/

由于经常需要从官方镜像仓库获取镜像,为了解决网络问题,可以使用 daoCloud 提供的 Docker 加速器

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://024e63b8.m.daocloud.io

关于 Docker 改名


关于改名,指的是原先的 Docker 开源项目改名成了 Moby 项目, 而 Docker 成了注册商标, 只用于 Docker 公司的商业产品 Docker EEDocker CE 等。

相关链接:

对于 Docker 改名 Moby ,大家怎么看?
Docker 改名啦?什么是 Moby Project

系列文章


Docker 常用指令详解

使用 Dockerfile 构建镜像

使用 Docker Compose 构建容器

Docker Daemon 连接方式详解

Docker 下的网络模式


转载请注明出处:http://www.jianshu.com/p/74f29cf5a999

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容