目录

    1. 什么是Docker

    Docker诞生于2013年初,是dotCloud( Docker.Inc前称)公司内部的一个业余项目,源代码托管在GitHub上,基于Go语言并遵从 Apache 2.0 开源协议。

    Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。

    Docker 在 LXC 的基础上进行了进一步的封装,让用户不必关心容器的管理,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

    2. 基本概念

    • 镜像:容器运行时的只读模板,每一个镜像由一系列的层组成
    • 仓库:用于保存镜像,可以理解为代码控制中的代码仓库
    • 容器:包含了所有的某个应用运行所需要的环境,每个容器都是从镜像创建,是独立的应用平台
    • Dockerfile:包含创建镜像所有命令的文本文件
    • Docker Registry:官方提供的工具,可以用于构建私有的镜像仓库
    • Docker Hub:官方提供的公有 Docker Registry

    3. 应用场景

    • 简化配置:运行环境和配置放在代码中部署,降低了硬件要求和应用环境之间的耦合度
    • 代码流水线管理:代码从开发机到正式环境,中间环节需要很多环境,Docker可以提供一致性的环境
    • 提高效率:可以利用Docker,让开发环境更加逼近正式环境
    • 隔离应用:Docker可以让一台机器上运行的不同应用,彼此相互隔离
    • 整合服务:Docker可以通过虚拟机,整合多个应用
    • 调试能力:Docker提供了很多的工具,用于为容器设置检查点、比较容器差异等,辅助调试
    • 多租户环境:使用Docker,可以为每个租户的应用层的多个实例创建隔离的环境
    • 快速部署:Docker通过创建容器部署,将部署过程压缩到秒级

    4. Docker 运行结构

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。

    • C/S架构, Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
    • Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。

    image.png

    5. Docker 核心架构

    • Docker Client:用户与Docker Daemon建立通信的终端
    • Docker Daemon

    Docker Server,服务于Docker API;Engine,执行引擎;Job,Engine内工作最小执行单元

    其中,Docker Server架构

    • driver

    execdriver,管理容器的运行;Networkdriver,管理容器的网络;Graphdriver,管理容器的镜像

    其中,execdriver:LXC,早版使用LXC作为创建管理容器的工具;Native,如今使用native来创建管理容器,native调用libcontainer

    其中,graphdriver

    • graph

    • libcontainer

    Docker 从 0.9 版本开始使用 libcontainer 替代了lxc,libcontainer几乎囊括了docker的全部核心技术。

    • networkdriver

    • Docker网络模式

    Docker Daemon网络模式: bridge桥接 None(disabled)

    Docker Container网络模式: bridge桥接模式 Host模式 other container模式 None(disabled)模式

    6. Docker 命令

    基本语法

    Docker 命令有两大类,客户端命令和服务端命令。前者是主要的操作接口,后者用来启动 Docker daemon。

    • 客户端命令:基本命令格式为 docker [OPTIONS] COMMAND [arg…]
    • 服务端命令:基本命令格式为 docker daemon [OPTIONS]

    可以通过 man docker 或 docker help 来查看这些命令。

    • 容器生命周期管理命令: run,start/stop/restart,kill,rm,pause/unpause,create,exec
    • 容器操作命令:ps,inspect,top,attach,events,logs,wait,export,port
    • 容器rootfs命令:commit,cp,diff
    • 镜像仓库命令:login,pull,push,search
    • 本地镜像管理命令:images,rmi,tag,build,history,save,import,-
    • info|version命令:info,version

    7. 安装 Docker

    Docker ToolBox(前往下载)包含了如下Docker工具:

    • Docker Machine:包含了docker-machine命令
    • 运行Docker命令所需要的引擎
    • Docker Compose:容器管理工具
    • Kitematic:Docker GUI界面
    • Oracle公司的VM VirtualBox

    除此,还提供了一些 Docker 命令行Shell。

    需要说明的是,在Windows环境下: 由于Docker守候进程依赖于Linux内核,无法直接在Windows环境中运行。需要使用docker-machine命令,创建一个Docker虚拟机,通过虚拟机提供Docker服务。

    这里使用Docker ToolBox提供的GUI管理工具,创建一个本地的Nginx服务:

    • 下载镜像,创建容器。在Kitematic的UI界面可以一键创建容器,下图红色箭头所指:
    • 访问服务。下图红色箭头所指,可以直接访问到服务。 在Home旁边的Settings标签下,包含容器相关的参数,配置项(host,port,network等)。

    8. Kubernetes

    image.png

    • 简介:Kubernetes(k8s)是Google开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
    • 优势:容器编排,轻量级,开源,弹性伸缩,负载均衡

    9. 参考