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 交互。
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
- 简介:Kubernetes(k8s)是Google开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
- 优势:容器编排,轻量级,开源,弹性伸缩,负载均衡
9. 参考
- 1.https://www.kancloud.cn/thinkphp/docker_practice/30894