• Docker

Docker是一个开源的容器项目,基于go语言开发。之所以被称为容器技术,是因为docker对进程进行封装,隔离于宿主系统和其它的进程,类似于一个装东西的容器,而且在容器里面装有一系列文件系统、网络、依赖包等应用程序运行需要的环境,开发人员可以快速将他们的应用程序部署到容器内运行。容器技术属于操作系统层面的虚拟化技术,它和虚拟机技术主要的区别如下:

     

 

虚拟机需要先在宿主机操作系统上安装虚拟机管理软件Hypervisor,然后在每台虚拟机内用户安装需要的操作系统和依赖文件,并且需要预分配一定的硬件资源。虚拟机一旦开启,无论应用程序需要的资源量大小,预分配的资源将被全部占用,造成很大的资源浪费,而且每次启动虚拟机,都需要启动一次虚拟机内的操作系统,很耗时。

容器相当于直接在宿主机操作系统的基础上开启一个进程,各个容器共享宿主机的硬件资源和操作系统,可以实现资源的动态分配,并且启动容器就是启动一个进程,速度很快,应用程序直接在各个容器内运行,互不影响。资源和时间都开销很低。

Docker核心概念

容器技术的核心概念有容器(container)、镜像(image)、仓库(registry)三个。

容器:具体的运行应用程序的一个进程,它里面包含应用程序的各种依赖。

镜像:创建容器的模板,根据不同配置的镜像来创建不同的容器使用。镜像和容器的关系可以理解为面向对象中类和实例对象的关系。

仓库:一个镜像只可以创建一种类型的容器,镜像多了就需要放到镜像仓库中存起来,仓库有本地镜像仓库和公共镜像仓库,平时使用本地仓库的镜像,没有的话去Registry hub公共镜像仓库下载。

Docker架构

Docker框架主要由Docker Client、Docker Daemon、Docker Registry、Driver、Docker Container五个模块组成,另外还有Graph和Libcontainer两个辅助模块,如下图所示:

 

                                                                                Docker架构

Docker Client: 用户通过Docker Client与Docker Daemon进行通信,利用命令行发送创建镜像、运行容器之类的请求。

Docker Daemon:Docker Daemon是Docker架构中一个常驻在后台的系统进程,接受并处理Docker Client发送的请求。该守护进程在后台启动了一个Server,Server负责接受Docker Client发送的请求;然后通过路由与分发调度,找到相应的Handler来执行请求。

Docker Registry:存储容器镜像的仓库。

Driver: Driver是Docker架构中的驱动模块。通过Driver驱动,Docker可以实现对Docker容器执行环境的定制。包含管理容器镜像的graphdriver驱动,配置容器内网络环境的networkdriver驱动,execdriver用来创建和维护容器。

Docker Container:运行应用程序的特定容器,是容器服务的交付实体。

一般运行流程为:用户在Docker Client端通过命令行发送请求到Docker Daemon,Docker Daemon中的Server收到请求后,Engine会创建一个工作任务job,通过调用Driver模块的各个驱动分别执行不同的任务,比如需要镜像就调用graphdriver从镜像仓库下载镜像,创建容器时也需要调用其它两个驱动来配置网络和创建并维护容器。最后生成运行中的容器或者上传镜像到镜像仓库等。

容器应用

当想使用容器来跑自己的应用程序时,首先需要明确应用程序依赖的环境,如果本地有现成镜像可以直接使用来运行容器跑应用,没有的话可以通过docker pull去registry hub下载,或者自己创建所需要的镜像。

可以使用dockerfile来创建镜像,首先编辑一个dockerfile文件,其中

FROM 表示这个镜像是基于哪个镜像来建立

MAINTAINER 表示这个镜像是由谁来维护

RUN 告诉镜像要执行的操作,比如更新或安装一个软件等,会新建一个镜像层。

EXPOSE 表示暴露的端口。

ENV 表示配置环境变量

CMD 设置容器启动后默认执行的命令及其参数,这条命令会在容器启动而且docker run没有指定其它命令时运行,如果docker run指定了其它命令,CMD指定的默认命令将被忽略。

CMD有三种格式:

  1. Exec格式:CMD [“executable”,“param1”,“param2”]
  2. CMD [ “param1”,“param2”] 一般使用这个,为ENTRYPOINT提供默             认参数
  3. Shell格式:CMD command param1 param2

ENTRYPOINT 配置容器启动时运行的命令。与CMD不同的是,ENTRYPOINT的指令一定会被运行,即使运行docker run时指定了其它命令。

        ENTRYPOINT有两种格式:

  1. Exec格式:ENTRYPOINT [“executable”,“param1”,“param2”]
  2. Shell格式:ENTRYPOINT command param1 param2

一般优先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可为 ENTRYPOINT 提供额外的默认参数,同时可利用 docker run 命令行替换默认参数。

常用命令

Docker build 创建镜像

Docker run  利用镜像运行容器

Docker image 关于镜像的一系列操作

Docker pull  从镜像仓库下载镜像到本地仓库

Docker push  上传镜像到镜像仓库

Docker container 执行关于容器的一系列操作

Docker stats 实时监控该节点容器的资源使用情况

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐