1 - Docker

官方文档

参考信息

2 - Docker简介

2.1 虚拟化技术

硬件级虚拟化(hardware-level-virtualization)

基于Hyper-V运行在硬件之上的虚拟化技术,模拟的是一个完整的操作系统。VMWare, Xen, VirtualBox,亚马逊AWS和阿里云都是用的这种技术。

操作系统级虚拟化(os-level-virtualization)

运行在操作系统之上的,模拟的是运行在操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,也称为容器化技术。

Docker是容器虚拟化中目前最流行的一种实现。

2.2 什么是Docker?

Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。其实是容器化技术的其中一种实现(轻量虚拟化技术),由于省去了操作系统,整个层级更简化,提供了简单易用的跨平台、可移植的容器解决方案。

  • 提供一个简单、轻量的建模方式:大多数docker容器只需不到1秒钟即可启动。
  • 职责的逻辑分离:开发人员只需关注容器内的应用程序,运维人员只需管理容器,加强开发环境与生产环境的一致性。
  • 快速、高效的开发声明周期:缩短代码从开发、测试到部署、上线运行的周期,让应用程序具备可移植性,易于构建。并易于协作。
  • 鼓励使用面向服务的架构:推荐单个容器只运行一个应用程序或进程,这样,应用程序或服务都可以表示为一系列内部互联的容器,从而实现分布式部署应用程序,方便扩展和调试。

2.3 Docker主要解决什么问题?

  • Docker的核心价值在于,改变传统的软件“交付”和“运行”方式。
  • 也就是说重新定义了软件开发、测试、交付和部署的流程,最终交付的是整个应用程序运行环境(OS + 中间件、类库 + 应用程序代码)。
  • Docker通过将运行环境和应用程序打包到一起,来解决部署环境依赖问题,真正做到跨平台的分发和使用。
  • Docker构造一个“轻量虚拟环境”,作为标准化的运行环境,并且具备妙级创建、删除虚拟环境和动态调整资源的能力。

2.4 Docker的优势

  • 更高效的系统资源利用。Docker容器不需要进行硬件虚拟以及运行完整操作系统等额外开销
  • 更快速的启动时间。Docker容器应用直接运行于宿主内核,无需启动完整的操作系统。
  • 一致的运行环境。Docker镜像提供除内核外完整的运行时环境。
  • 更轻松的迁移。执行环境的一致性,迁移应用更加容易,Build once,run anywhere(构建一次,在各平台上运行)。
  • 更便利的持续交付和部署。一次创建或配置,任意环境正常运行。
  • 更轻松的维护和扩展。Docker的分层存储以及镜像技术,复用、维护和扩展更简单。

单一容器或单一服务器的一组容器不再是关注的重点。

通过云原生应用(Cloud Native Application)和微服务框架(MicroService Framework)把商业逻辑映射为容器集群,为商业成功奠定技术基础才是核心。

2.5 容器vs虚拟机

与传统VM相比,更轻量,启动速度更快,单台硬件上可以同时跑上千个容器,非常适合在业务高峰期通过启动大量容器进行横向扩展。

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

  • 管理程序虚拟化(hypervisor virtualization, HV)通过中间层将一台或多台独立的机器虚拟运行与物理硬件之上
  • 容器是直接运行在操作系统内核之上的用户空间,可以让多个独立的用户空间运行在同一台宿主机上。

3 - Docker的基础概念

3.1 使用场景举例(CI)

通过Dockerfile或Docker Hub分享和发布镜像,与其他服务集成,进行开发流程的自动化。

  1. 开发人员编写、提交代码到代码服务器,如GitHub、GitLab等
  2. 代码服务器通过webhook调用CI/CD服务,如Jenkins、CircleCI等
  3. CI服务器下载最新代码,构建Docker镜像,并进行测试
  4. 自动集成测试通过之后,将之前构建的镜像推送到私有Registry
  5. 运维人员使用新版的Docker镜像进行部署

3.2 镜像(Image) - Docker生命周期的构建或打包阶段

Docker镜像是一个容器的文件系统,提供容器运行时所需的程序、库、资源、配置等文件和运行时需要的一些配置参数( 如匿名卷、环境变量、用户等)。

Docker镜像是只读的,不包含任何动态数据,其内容在构建之后也不会被改变。

Docker利用UnionFS技术,设计为分层存储的架构,Docker镜像由多层文件系统联合组成。

镜像构建时,会一层层构建,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

3.3 容器(Container) - Docker生命周期的启动或执行阶段

Linux的CGroup技术用来限定一个进程的资源使用,Namespace技术用来划分不同的命名空间。

容器的实质是进程,是基于CGroup技术和Namespace技术运行在操作系统上的一个拥有受限资源和单独命名空间的进程。

容器拥有自己的文件系统、网络配置、进程空间,甚至用户ID空间。

每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层。当容器运行时,会在镜像之上再加上一层可读可写层。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

但数据卷(Volume)的生存周期独立于容器,容器消亡,数据不会丢失,所以文件写入操作应该使用数据卷( Volume)。

总结起来,Docker容器就是:

  • 一个镜像格式
  • 一系列标准的操作
  • 一个执行环境

3.4 仓库(Repository)

Docker Registry是提供集中的存储、分发镜像的服务。

一个 Docker Registry 中可以包含多个仓库( Repository) ;每个仓库可以包含多个标签( Tag) ;每个标签对应一个镜像。

通过 <仓库名>:<标签> 格式指定具体镜像。如果不给出标签,将以 latest 作为默认标签。

Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry。

国内也有类似Docker Hub 的公开服务。例如:网易云镜像服务、DaoCloud镜像市场、阿里云镜像库等。

用户还可以在本地搭建私有 Docker Registry。

3.5 Docker加速器

Docker加速器是指国内的一些云服务商提供了针对 Docker Hub 的镜像服务( Registry Mirror)。

使用加速器会直接从国仓库内的地址下载 Docker Hub 的镜像。

3.6 容器的UUID

UUID -- 通用唯一标识符(Universally Unique Identifier)

容器有三种方式来进行标识:长UUID、短UUID、Name。

UUID 是 Docker daemon 产生的,在一台主机上是唯一的,在创建容器的时候可以通过--name 来指定容器的名字,如果不指定会自动分配一个字符串名称。

通过docker ps、docker inspect等命令可以查看到容器的标识信息。

4 - Docker的C/S架构

Docker在主机上是C/S架构,也就是说,在运行时分为Docker Engine(docker服务器或守护进程docker daemon)和docker client(客户端工具)。

可以使用docker version命令来查看client和daemon的信息。

# docker version
Client:
Version: 18.09.6
API version: 1.39
Go version: go1.10.8
Git commit: 481bc77
Built: Sat May 4 02:35:27 2019
OS/Arch: linux/amd64
Experimental: false Server: Docker Engine - Community
Engine:
Version: 18.09.6
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 481bc77
Built: Sat May 4 01:59:36 2019
OS/Arch: linux/amd64
Experimental: false

4.1 客户端与服务端通信

默认情况下,DOCKER的客户端与服务端通信是不经认证的。

也就是说,如果把DOCKER绑定到对外公开的网路接口上,那么任何人都可以连接到此DOCKER守护进程。

Docker Engine提供了一组RESTful API(Docker Remote API),客户端工具通过这组API与Docker Engine交互,从而完成各种功能。

因此,虽然表面上好像是在本机执行各种docker功能,但实际上,一切都是使用的远程调用形式在服务端(Docker Engine)完成。

这种C/S设计,让操作远程服务器的Docker Engine变得轻而易举。

4.2 守护进程状态

安装完Docker后,需要确认Docker的守护进程是否运行,可通过命令systemctl status docker service status docker来查看。

Docker以root权限运行守护进程和其客户端程序。

  • 启动docker:systemctl start docker
  • 停止docker:systemctl stop docker
  • 重启docker:systemctl restart docker
  • 开机启动:systemctl enable docker
  • 重新加载配置文件:systemctl daemon-reload

4.3 docker daemon

可以使用docker daemon命令控制Docker守护进程,查看docker daemon的用法docker daemon --help

例如:

  • 可以使用‘-H’标志调整守护进程绑定监听端口的方式,指定不同的网络接口和端口配置,也可以通过使用DOCKER_HOST环境变量来简化。
  • 使用‘-D’标志开启守护进程的调试模式,获得更详细的信息。

5 - 思维导图

6 - Docker简单使用示例

使用docker的时候,首先需要拉取镜像,然后运行这个镜像,通过镜像生成容器。

同时,容器也可以转化为镜像,通过docker commit将容器的可读可写层转化为只读层。

注意:容器运行过程中,并不会修改镜像的内容,如果需要对容器做持久化,就必须通过commit来进行,否则容器退出后数据就会丢失。

# 获取镜像
[root@CentOS-7 ~]# docker pull ubuntu:16.04 # 运行容器
[root@CentOS-7 ~]# docker run -it --rm ubuntu:16.04 bash
root@7f8001fb78da:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.2 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.2 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
root@7f8001fb78da:/#
root@7f8001fb78da:/# exit
exit
[root@CentOS-7 ~]# # -i :交互式操作
# -t :分配pseudo-TTY终端
# --rm :容器退出后,删除容器
# ubuntu:14.04 :使用ubuntu:14.04镜像为基础启动容器
# bash :交互式bash Shell

Docker - 基础讲义的更多相关文章

  1. Docker - Docker基础讲义

    Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 虚拟化技术 硬件级虚拟化(hardware-level-virtualizatio ...

  2. Docker - Docker基础命令及使用

    Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 Docker基础命令 Docker 查看帮助信息:docker --help 查看 ...

  3. 【云计算】Docker云平台—Docker基础

    Docker云平台系列共三讲,此为第一讲:Docker基础 参考资料: Docker官方文档:https://docs.docker.com/ Docker从入门到实践:https://yeasy.g ...

  4. Docker基础技术:Linux Namespace(下)

    在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...

  5. Docker 基础技术:Linux Namespace(下)

    导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...

  6. Docker基础入门及示例

    Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...

  7. Docker 基础 : 镜像

    目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...

  8. Docker 基础技术之 Linux cgroups 详解

    PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇 ...

  9. docker 基础知识分享ppt

    给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx

随机推荐

  1. 2019.01.17 bzoj1853: [Scoi2010]幸运数字(容斥+dfs)

    传送门 搜索菜题,然而第一次没有注意然后爆longlonglong longlonglong了. 题意:称所有数位由6,86,86,8组成的数为幸运数字,问一个一个区间[l,r][l,r][l,r]中 ...

  2. 2018.12.15 bzoj3676: [Apio2014]回文串(后缀自动机)

    传送门 对原串建立一个后缀自动机,然后用反串在上面匹配. 如果当前匹配的区间[l,r][l,r][l,r]包裹了当前状态的endposendposendpos中的最大值,那么[l,maxpos][l, ...

  3. WebSocket的原理与优缺点

    websocket 是长连接,受网络限制比较大,需要处理好重连,比如用户进电梯或电信用户打个电话网断了,这时候就需要重连,如果 ws 一直重连不上,有些较复杂的业务方会不愿意的,是不是还要搞个 htt ...

  4. CSS Sprites (CSS 精灵) 技术

    CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢 ...

  5. WebSocket获取httpSession空指针异常的解决办法

    小坑:使用requestListner解决不了这个问题! 如何获取HttpSession 在使用webSocket实现p2p或者一对多聊天功能的时候我们经常会有这样的需求:webSocket服务端需要 ...

  6. wifi adb 的常用命令

    Android 网络调试 adb tcpip 开启方法 2013年05月14日 10:01:03 阅读数:20529 1.连接USB数据线,打开usb调试,使用windows的“运行”命令行方式:(此 ...

  7. html的那些小小细节

    1.get post方式提交的不同 get:数据放在url的后面,用?连接                        会在客户端保留缓存信息,不安全                        ...

  8. 公司内部Samba 服务器架设

    1.需求 在公司内部打造一个文件管理系统,其作用域仅仅在公司内部,支持在线对文件的修改和保存操作等,同时也要注意权限问题. 2.策划 目前设立四个群组:运维.开发 .测试和普通,当然所对应的对文件的访 ...

  9. (转)自己来控制EntityFramework4.1 Code-First,逐步消除EF之怪异现象

    转自:http://www.cnblogs.com/richwong/archive/2011/07/06/2098759.html 最近的项目开始使用EF4.1,拜读各路大侠文章数遍,满以为可以轻车 ...

  10. Hdu4135 Co-prime 2017-06-27 16:03 25人阅读 评论(0) 收藏

    Co-prime Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Subm ...