Docker学习笔记(一):初步了解

本文是学习Docker的过程记录, 有些内容是自己的理解, 所以可能理解的不到位甚至不正确, 随着学习的深入我会慢慢更正。



写在最前面

学习Docker最好的方式就是看官方文档, 不过有时候官网的解释非常官方, 所以我把学习中用到的资料全都列在下面


初识Docker

Docker是什么其实不太好定义, 它是个新的东西, 原来没有. 官方是这么说的, Docker是一个开发、装载、运行程序的开源的平台, 致力于快速发布你的程序, 缩短了从写代码到发布上线之间的这个周期.

Docker容器可以把程序运行所需要的一切软件, 包括代码、运行时环境、系统工具、系统库等直接打包进一个完整的文件系统里. 容器运行时可保证程序运行的环境都是一致的.

Docker是一个开源项目, Go语言实现, 遵从Apache 2.0协议. DockerLinux容器技术(LXC)上进一步封装, 使用户操作更简单, 像是操作一个轻量级的虚拟机.

Docker与传统虚拟机技术的对比

一般都会拿Docker跟传统的虚拟机技术做比较, 下图是官网上的对比图:

Virtural Machine Container

infrastructure(硬件)之上是我们的宿主机的操作系统, 传统虚拟机需要通过一层HyperVisor进行模拟硬件, 然后再安装虚拟机操你工作系统, 在虚拟机中跑各种程序; Docker是在宿主机的操作系统上直接装了Docker引擎(硬件模拟Docker帮我们屏蔽了,虚拟机也不需要了), 直接在Docker引擎上可以跑各种程序.

Docker Engine

Docker EngineDocker platform中最核心的部分. Docker Engine是一个client-server形式的程序, 它包括三部分:

  • server : 一个一直运行的进程, 可叫做守护进程(daemon process)
  • REST API : 跟daemon进行交互的API
  • client: 客户端工具, 给用户使用的命令行接口, command line interface(CLI)

docker_engine

命令行脚本或命令通过REST APIdemon进行交互, 许多其他的docker组件, 也使用REST API或者CLI.

Docker 架构

Docker是client-server架构, Docker clientDocker daemon交互来控制编译、运行、发布容器. clientdaemon运行在同一个系统里, 也可以把client连接到远程的daemon上, 它们可以通过socket使用RESTful API交互

docker_architecture

上图中有三个新内容: image registry container

  • Docker image : 一个只读模板, 比如, Ubuntu的操作系统上装了apache, 上面放了你自己的web应用, 这整个被创建成了一个镜像文件. 你可以自己制作镜像, 也可以下载别人的镜像.
  • Docker registry: registry用于保存image. 存储镜像的形式可以是public的也可以是private的. 官方提供了一个publicDocker registry, 叫做Docker Hub. Docker Hub是官方提供的, 最大的一个镜像仓库.
  • Docker container: container是通过image来创建的. 容器里面包含了程序运行的所有东西. 容器可以被run, started, stopped, moved, 和 deleted, 每个容器都是相互独立的.

这些基本上就是Docker经常用到的东西了. 上面的大部分内容都来自官网,更多内容可以去官网看看.