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)-简介的更多相关文章

  1. docker学习笔记(3)- 镜像

    简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...

  2. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  3. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  4. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  5. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  6. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  7. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  8. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  9. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

随机推荐

  1. ipmitool查询服务器功耗

    通过ipmitool查看服务器功耗 ipmitool -H $ip -I lanplus -U $user -P $password sdr elist | grep "Pwr Consum ...

  2. Binder学习笔记(七)—— ServiceManager如何响应addService请求

    有了<ServiceManager如何响应checkService请求>的探索,研究addService就轻车熟路了,中间过程不再多说,仅把关键节点列出: frameworks/nativ ...

  3. 在Python中正确使用Unicode

    正确处理文本,特别是正确处理Unicode.是个老生常谈的问题,有时甚至会难倒经验丰富的开发者.并不是因为这个问题很难,而是因为对软件中的文本,开发者没有正确理解一些关键概念及其表示方法.在Stack ...

  4. Build SSH for Development on Windows Subsystem for Linux

    It seems that Windows Subsystem for Linux (WSL) is getting much more mature than the time when it fi ...

  5. JavaScript小技巧随笔

    1. 在用||做条件判断时,如果情况较多,我们可以考虑是否能够用Array.includes()方法代替 var conditionArray = [ test1, test2, test3 ]; i ...

  6. 使用Tensorflow object detection API——环境搭建与测试

    [软件环境搭建] 操作系统:windows 10 64位 内存:8G CPU:I7-6700 Tensorflow: 1.4 Python:3.5 Anaconda3 (64-bit) 以上环境搭建请 ...

  7. Kibana6.x.x——启动后警告信息:Session cookies will be transmitted over insecure connections. This is not recommended.

    启动Kibana后,如果你看到如下警告信息: server log [08:03:18.001] [warning][security] Session cookies will be transmi ...

  8. P1111 修复公路(并查集)

    题目背景 AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数NN,和公路数MM,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你 ...

  9. 解决mac下ssh空闲一段时间自动断开的问题

    之前在公司就遇到过这种问题,使用ssh登录linux服务器后,在后台放置一段时间,会发现会自动断开,解决的方法很简单: vim /etc/ssh/ssh_config 添加这2句即可 ServerAl ...

  10. Kafka读取__consumer_offsets和Kafka 0.11客户端管理工具AdminClient

    https://blog.csdn.net/m0_37739193/article/details/78185155 https://blog.csdn.net/qq_36096641/article ...