Catalogue
参考资源:
History
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。
Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
Why use Docker?
- Docker - Build, Ship, and Run Any App, Anywhere
- 向服务器部署代码非常困难
- 复杂的技术栈, 不同技术栈的版本依赖与冲突
- How to solve it?
Docker vs VM
What is Docker?
Docker的三个概念
- 1 镜像(Image)
- 类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。
- 任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
- 2 容器(Container)
- 类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。
- Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。
- 注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
- 3 仓库(Repository)
- 类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。
- 注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
Union File System
Docker Components
- Docker daemon
- Runs on a host machine. It does the heavy lifting of building, running, and distributing Docker containers
- Docker client
- The primary user interface to Docker. It accepts commands from the user and communicates back and forth with a Docker daemon
- Docker images
- Docker image is a read-only template, which is used to create containers
- Docker registries
- Docker registries hold images, which are public or private stores from which you upload or download images.
- Docker containers
- Docker containers are similar to a directory.
性质
- A Docker container holds everything that is needed for an application to run.
- Each container is created from a Docker image.
- Docker containers can be run, started, stopped, moved, and deleted.
- Each container is an isolated and secure application platform.
Application
Docker 的主要用途,目前有三大类。
- 1 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
- 2 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
- 3 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
Docker on Mac
Install
1 | $ brew cask install docker |