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 ...
随机推荐
- Eval() 中数据格式化或格式化数据
<%# Eval("SchoolEnd") == DBNull.Value ? "" : Convert.ToDateTime(Eval("Sc ...
- 通过ajax把json对象传入后台
一.前台ajax部分 function icheckDelete(url){ var parms = { list : array //这是个数组 }; $.ajax({ dataType: &quo ...
- win10下安装配置mysql-8.0.13--实战可用
1.下载mysql-8.0.13安装包 1 https://dev.mysql.com/downloads/mysql/ 选择zip安装包下载就好. 2.解压到你要安装的目录 3.创建my.ini配置 ...
- oracle 闪回区故障
之前为了验证rman,把数据库改为了归档备份,但闪回区却还是4G,结果自动备份在五一执行了,悲剧,幸好没出门.一顿乱搞,其实走了错误方向.思路: 提示untle free,将数据库闪回区先增加:alt ...
- History命令用法15例
以下内容为转载: 如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTT ...
- Linux文件属性用户、组、权限
Linux系统中的用户是分角色的,用户的角色是由UID和GID来识别的(也就是说系统识别的是用户的UID.GID,而非用户用户名),有个UID是唯一的(系统中唯一如同身份证一样)用来标识系统的用户账号 ...
- 20.Add Two Numbers(两个链表的和)
Level: Medium 题目描述: You are given two non-empty linked lists representing two non-negative integer ...
- 18.Jewels and Stones(珠宝和石头)
Level: Easy 题目描述: You're given strings J representing the types of stones that are jewels, and Sre ...
- svg path 路径
许多字母命令(例如:M m)(但不是全部)成对.有一个大写和一个小写版本.大写版本是绝对版本,小写是相对版本.让我们继续以M为例: M 100,100 意思是“拿起笔并将其移动到确切的坐标100,10 ...
- 电路中IC器件电压符号的解释
在电子芯片.运算处理器等集成电路行业中,存在多种电压.常用的的有:VDDQ->The supply voltage to output buffers of a memory chip 存储芯片 ...