Docker学习笔记(1)-简介
1. 简介
Docker使用Google公司推出的Go语言开发实现,基于Linux内核的cgroup, namespace以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他的隔离进程,因此也称其为容器。
Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等,极大的简化了容器的创建和维护。使得Docker技术比虚拟机技术更为轻便。
Docker与传统虚拟化方式的不同之处:传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且没有进行硬件虚拟。
Docker相对传统虚拟化方式的优势:
1) 更高效地利用系统资源:不需要硬件虚拟化、也不需要运行完整操作系统,因此Docker对系统资源利用率高。相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
2) 更快速的启动时间:Docker容器应用,由于直接运行于宿主内核,无需启动完整操作系统,因此可以做到秒级、甚至毫秒级启动。
3) 一致的运行环境:由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。Docker镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。
4) 持续交付和部署:Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可通过Dockerfile进行镜像构建,并结合持续集成(CI)系统进行集成测试,运维人员可以直接在生产环境快速部署该镜像,甚至结合持续部署(CD)系统进行自动部署。
5) 更轻松的迁移:由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。
6) 更轻松地维护和扩展:Docker使用分层存储以及镜像技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。Docker团队也维护了大批高质量的官方镜像,既可在生产环境使用,也可作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
对比传统虚拟机技术总结:
特性 | 容器 | 虚拟机 |
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 单机支持上千个容器 | 单机一般支持几十个 |
2. 基本概念
Docker包括了三个基本概念:镜像(Image)、容器(Container)、仓库(Repository)
2.1 Docker镜像
对于Linux操作系统而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像,就相当于一个root文件系统。如官方镜像ubuntu:16.04,就包含了一套Ubuntu16.04最小系统的root文件系统。
(1) 分层存储
Docker设计时,充分利用UnionFS技术,将其设计为分层存储架构。严格意义上,镜像是由一组文件系统组成,或者说,由多层文件系统联合组成。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改版,后一层上的任何改变只发生在自己这一层。在构建镜像时,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
分层存储的特征使得镜像的复用、定制变得更为容易。可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需内容,构建新镜像。
2.2 Docker容器
镜像和容器的关系,就像面向对象程序设计中的类和实例一样。镜像时静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行在属于自己的独立的命名空间。因此容器可以拥有自己的root文件系统、网络配置、进程空间、甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境中,运行时好像是在独立于宿主的操作系统一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
容器与镜像一样,也是分层存储。容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,该容器存储层可理解成为容器运行时读写而准备的存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此任何保存于容器存储层的信息都会随容器删除而丢失。
按照Docker最佳实践要求,容器不应该向其存储层写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume),或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此使用数据卷后,容器删除或者重新运行之后,数据不会丢失。
2.3 Docker Registry
Docker Registry是一个集中存储、分发镜像的服务。一个Docker Registry可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果忽略了标签,则默认标签为latest。
仓库名经常以两段式形式出现,比如jwilder/nging-proxy,前者往往意味着Docker Registry多用户环境下的用户名,后者则往往对应软件名,但这并非绝对。
(1) Docker Registry公开服务
Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务,一般这类公开服务允许用户免费上传、下载公开的镜像。
最常用的公开服务是官方的Docker Hub,这也是默认的Registry,并拥有大量高质量的官方镜像。
国内的一些云服务商提供了针对 Docker Hub的镜像服务,这些镜像服务也被称为加速器,如阿里云加速器、DaoCloud加速器等。
如何配置国内加速器:
a. 对于systemd系统,如Ubuntu16.04+、Debian8+、CentOs7,将/etc/docker/daemon.json中的改为{"registry-mirrors":["https://registry.docker-cn.com"]},然后执行sudo systemctl daemon-reload; sudo systemctl restart docker重启docker
b. 对于upstart系统,如Ubuntu14.04、Debian 7 Wheezy,编辑/etc/default/docker文件,在其中的DOCKER_OPTS添加DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com",然后执行sudo service docker restart重启docker。
(2) 私有Docker Registry
除了使用公开服务外,用户也可在本地搭建私有的Docker Registry。
开源的Docker Registry镜像只提供了Docker Registry API的服务端实现,足以支持docker命令,但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。
3. 安装
docker的安装可以参考https://docs.docker.com/engine/installation,支持64位的Mac OS, Linux, Win10等操作系统。
Docker学习笔记(1)-简介的更多相关文章
- docker学习笔记(3)- 镜像
简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...
- Docker学习笔记 — 配置国内免费registry mirror
Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror
- docker学习笔记1 -- 安装和配置
技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- docker~学习笔记索引
回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
- docker学习笔记(一)—— ubuntu16.04下安装docker
docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...
- Docker学习笔记总结
Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/ 一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...
随机推荐
- 数据加密实战之记住密码、自动登录和加密保存数据运用DES和MD5混合使用
MD5的简介:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有 ...
- oracle如何去除字符串中的重复字符
create or replace function remove_rame_string(oldStr varchar2, sign varchar2) return varchar2 is /** ...
- 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)
题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...
- dedecms图片绝对路径(附件绑定域名)的设置方法
dedecms默认的附件路径使用的是相对路径,但是在实际应用,我们可能会需要让文章的图片附件显示绝对地址,解决方案如下: 1.打开include目录下的文件extend.func.php,添加函数re ...
- html之表单和简单CSS
一.==表单== 1. form表单本身 <form name="myform" action="#" method="get"> ...
- 缩点【洛谷P2860】 [USACO06JAN]冗余路径Redundant Paths
P2860 [USACO06JAN]冗余路径Redundant Paths 为了从F(1≤F≤5000)个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了 ...
- luogu3704 [SDOI2017]数字表格(莫比乌斯反演)
link 设\(f_0=0,f_1=1,f_n=f_{n-1}+f_{n-2}(n\ge 2)\) 求\(\prod_{i=1}^n\prod_{j=1}^mf_{\gcd(i,j)}\),多组询问, ...
- linux下的静态库和动态库
一.linux下的静态库 静态库中的被调用的函数的代码会在编译时一起被复制到可执行文件中去的!!可执行文件在运行不需要静态库的存在! 二.linux下动态库的构建和使用 1.动态库的构建 ...
- IE兼容css3圆角的htc解决方法
IE兼容css教程3圆角的htc解决方法 现在css3的border-radius属性可以很方便的实现圆角功能,对网站前台人员无疑是一件喜事,但悲剧的是IE6/7/8并不支持,让我们弃新技术不用,是不 ...
- Blocks poj 区间dp
Some of you may have played a game called 'Blocks'. There are n blocks in a row, each box has a colo ...