Please enable Javascript to view the contents

Docker 基础

 ·  ☕ 5 分钟

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. 参考

  • 1.https://www.kancloud.cn/thinkphp/docker_practice/30894

微信公众号
作者
微信公众号