介绍

  • docker 基于 Go 语言实现的云开源项目
  • docker 可以消除协作编码时“在我的机器上可以正常工作”的问题,避免在部署中出现版本、配置问题。
  • 系统平滑移植、容器虚拟化技术
  • docker 通过对应用程序的封装、分发、部署、运行等生命周期的管理,使用户的 app、web应用等及其运行环境能够做到“一次镜像,处处运行”,实现了跨平台、跨服务器
  • docker 解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

docker 的基本组成

  • 镜像:是一个只读模板,可以用来创建 docker 容器,一个镜像可以创建多个容器
  • 容器:是镜像创建的运行实例,为镜像提供了一个标准的和隔离的运行环境。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 linux 环境和运行在其中的应用程序
  • 仓库:集中存放镜像文件的场所(docker hub)

例子

  • 正常程序开发之后,只提交源代码打成 jar 包,在服务器上部署需要配置环境;而配置环境可能会产生诸多问题(MySQL 版本不一致、redis 补丁等)
  • 引入 docker 之后,提交镜像文件(包含源码 + 配置环境),放在 docker 引擎部署

传统虚拟机与 docker 的区别

  • docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,容器没有自己的内核且没有进行硬件虚拟。同时容器之间相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响。 alt
  • 传统虚拟机是在硬件层面实现虚拟化,需要虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需应用进程
  • 与传统的虚拟机相比,docker 的优势体现为启动速度快、占用体积小 alt
总结

alt



docker 的平台架构

docker 是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职

运行基本流程:

  1. 用户使用 docker client 与 docker daemon 建立通信,并发送请求

  2. docker daemon 作为 docker 架构中的主体部分,首先提供 docker server 的功能使其可以接受 docker client的请求

  3. docker engine 执行内部的一系列工作,每一项工作都是以一个 job 的形式存在

  4. job 的运行过程中,当需要容器镜像时,则从 docker registry 中下载镜像,并通过镜像管理驱动 graph driver 将下载镜像以 graph 的形式存储

  5. 当需要为 docker 创建网络环境时,通过网络管理驱动 network driver 创建并配置 docker 容器网络环境

  6. 当需要限制 docker 容器运行资源或者执行用户指令等操作时,则通过 exec driver 来完成

  7. libcontainer 是一项独立的容器管理包,network driver 以及 exec driver 都是通过 libcontainer 来实现具体对容器进行的操作

  8. 参考 alt



Ubuntu 安装 docker

  • docker 并非一个通用的容器工具,依赖于已存在并运行的 linux 内核环境;docker 实质上是在已经运行的 linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部属的 linux 主机
  • 所以,docker 必须部署在 linux 内核的系统上,如果其他系统(Windows)想部署 docker 就必须安装一个虚拟 linux 环境

命令

  • 安装docker:sudo apt-get install -y docker.io

  • 启动docker服务:systemctl start docker

  • 查看docker状态:systemctl status docker

  • 查看docker版本:docker version

  • 设置开机启动:systemctl enable docker

  • 停止docker服务:systemctl stop docker


配置镜像加速器



参考