一、Docker 是什么
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。
- Docker 使用 Google 公司推出的 Go 语言 进行开发实现。
- Docker 是 Linux 容器的一种封装,提供简单易用的容器使用接口,它是最流行的 Linux 容器解决方案。
- Docker 的接口相当简单,用户可以方便的创建、销毁容器。
- Docker 将应用程序与程序的依赖,打包在一个文件里面。运行这个文件就会生成一个虚拟容器。
程序运行在虚拟容器里,如同在真实物理机上运行一样,有了 docker,就不用担心环境问题了。
二、容器 VS 虚拟机
Docker 是一种OS虚拟化技术,是一个开源的应用容器引擎。它可以让开发者将应用打包到一个可移植的容器中,并且该容器可以运行在几乎所有 Linux 系统中(Windows10目前也原生支持,Win10前需要内置虚拟机),正所谓 “一次打包,到处运行” 。
Docker 容器的运行是完全的沙箱机制,相互之间不会有任何关联(除非自己串联集群)。网络、存储、进程等资源,不仅对于不同的容器是相互隔离,对于宿主机和容器之间也是隔离的,除非你手动映射暴露端口或者挂载存储卷。
差异点
- 每台虚拟机都具备相关应用,必要的二进制类库,是一个完整的操作系统;
- 容器是与宿主机共享硬件资源及操作系统的,可实现资源的动态分配,容器是在宿主机的操作系统上的用户空间层进行的分离. Linux中的容器并不是去模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层
Docker 的优点
- 更加充分地利用资源;
- 一处打包,到处运行;
- Docker将应用程序与该程序的依赖打包在一个文件里,运行此文件就会生成一个虚拟容器;
- Docker的接口相当简单,并能做到版本管理、复制、分享、修改等;
其他优点
- Docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。
- Docker 需要的资源更少。Docker 在操作系统级别进行虚拟化,Docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化。
- Docker 更轻量。Docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker 运行的镜像数远多于虚拟机数量,对系统的利用率非常高。
- 与虚拟机相比,Docker 隔离性更弱。Docker 属于进程之间的隔离,虚拟机可实现系统级别隔离。
- 快速创建、删除。虚拟机创建是分钟级别的,Docker 容器创建是秒级别的,Docker 的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间;
我们可以从下面这张图中很清楚地看到容器相比于传统虚拟机的特性的优势所在:
三、Docker 的应用场景
- Web应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他应用
四、Docker 的三大概念
Image(镜像)
- Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
- 一个只读的模板,镜像可以用来创建 Docker 容器。
- 用户基于镜像来运行自己的容器。镜像是基于 Union 文件系统的层式结构。
- 可以简单创建或更新现有镜像,或者直接下载使用其他人的。可以理解为生成容器的『源代码』。
Container(容器)
- 容器是从镜像创建的运行实例,在启动的时候创建一层可写层作为最上层(因为镜像是只读的)。
- 可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
- 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
Repository(仓库)
- 集中存放镜像文件的场所,可以是公有的,也可以是私有的。
- 最大的公开仓库是 Docker Hub。
- 国内的公开仓库包括 Docker Pool 等。
- 当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
- Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
五、Docker 架构图
- Docker 使用 C/S 结构,客户端/服务器体系结构
- Docker 客户端与 Docker 服务器进行交互
- Docker服务端负责构建、运行和分发 Docker 镜像
- Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 Stock 或网络接口与远程 Docker 服务端进行通信
各组件说明
- Docker Client
- 提供命令行界面(CLI)工具,是用户与 Docker Daemon 进行交互的主要方式
- Docker Daemon
- 是Docker的服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程
- 用于响应docker client的请求
- 启动: docker --daemon = true 或 docker -d=true
- 默认情况下docker daemon只响应来自本地的请求,若需要响应远程的请求需修改配置
- 配置文件: /etc/systemd/system/multi-user.target.wants/docker.service
- 修改环境变量 ExecStart 后面添加 -H tcp://0.0.0.0
- 请求远程服务器: docker -H remote-host cmds...
- Docker Image
- 是一种特殊的文件系统
- 提供了容器运行时所需的程序、库、资源、配置文件,以及一些运行时相关的配置参数(如匿名卷、环境变量、用户等)
- 镜像文件是只读的,是一个存储在本地磁盘上的物理文件,无相关动态数据
- 镜像的创建:
- 基于Dockerfile生成
- 从仓库下载
- 构建运行的容器以创建镜像
- Docker Container
- 是真正运行项目程序、消耗系统资源、提供服务的地方
- 是真正干活的那个大兄弟
- Docker Registry
- 是Docker Image的存储仓库
六、Docker 安装部署
七、Docker 相关命令