我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS(UNIX文件系统的简称),可以提供很多有用的特性:
Tips 1:数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。
Docker system是Docker 1.13引进了新的管理命令,它有4个子命令分别是 df, events, info 和 prune 。命令 docker system df 提供Docker整体磁盘使用率的概况,包括镜像、容器和(本地)volume。所以我们现在随时都可以查看Docker使用了多少资源。
如果之前的命令展示出 docker 已经占用了太多空间,我们会开始清理。有一个包办一切的命令:
docker system prune
这个命令会删除当前没有被使用的一切项目,它按照一种正确的序列进行清理,所以会达到最大化的输出结果。首先删除没有被使用的容器,然后是volume和网络,最后是挂起的镜像。通过使用 y 回复来确认操作。如果想在脚本中使用这个命令,可以使用参数 –force 或者 -f 告诉Docker不要发来确认请求。
Swarm 是提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。
作为容器集群管理器,Swarm 最大的优势之一就是 100% 支持标准的 Docker API。各种基于标准 API 的工具比如 Compose、docker-py、各种管理软件,甚至 Docker 本身等都可以很容易的与 Swarm 进行集成。这大大方便了用户将原先基于单节点的系统移植到 Swarm 上。同时 Swarm 内置了对 Docker 网络插件的支持,用户可以很容易地部署跨主机的容器集群服务。
应该说docker service是swarm(docker集群)最重要的管理指令,可以实现部署运行服务、服务扩容缩容、删除服务、滚动更新等功能,学习本章节的内容尤其重要,本文将详细展开docker service 中的每一个选项的用法,不同于介绍其他的docker指令。
在Swarm集群上部署服务,必须在Manager Node上进行操作。先说明一下Service、Task、Container(容器)这个三个概念的关系,如下图(出自Docker官网)非常清晰地描述了这个三个概念的含义:
集中式管理Docker 容器需要使用的敏感信息,包括密码,证书等,敏感信息不会保存在镜像中,compose模版也可以不需要显式填写密码等敏感信息,只需要引用密码对象的名称。实现的方式是通过把密码等敏感信息以文件的方式挂载到容器的/run/secrets/目录内,使用该特性的镜像需要支持通过文件读取的方式来使用敏感信息的能力。
Docker的一个重要特性是开箱即用,“开箱即用”是指什么呢?简单来说,安装好Docker就可以马上使用。不需要任何额外的操作,诸如网络、进程、文件系统隔离等繁杂事情也不在你担心的范围内。
不过,经过一段时间的使用,你可能开始会考虑更多——诸如自定义网络,自定义保留IP地址,分布式文件系统等等。这些需求会在你将Docker应用到生产或者做进一步准备时候浮现而出。
幸运的是,Docker不仅仅是开箱即用,其中的功能点也是可以进行调整的。如何调整呢?通过Docker的插件!
节点(Node)为swarm(docker 集群)中的一个Docker Engine实例。其中管理节点(Manager Node)负责swarm管理并向工作节点分配任务;工作节点(Work Node)接受并执行来自管理节点的Task。简单可理解为一个Node就是一台Docker宿主机。
关于Swarm的介绍,参考:Docker的命令之集群管理 swarm,docker node的指令管理docker集群中的节点,docker swarm 管理整个docker集群的指令,docker node 管理docker集群中节点的指令,集群中的节点包括worker和manager两种类型的节点。
在介绍 docker network的命令之前,务必先知道 network 在docker体系中扮演的角色、特性、以及作用。参考一篇转载的文章:Docker network的网络特性,使用 docker network –help ,可以查看所有network(网络)相关的命令。
我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
Docker的容器概念这里不再详细叙述,可自行百度,通俗可理解为虚拟机,但远优越于虚拟机,这里只介绍,使用命令对 container (容器)进行操作,使用 docker container –help ,可以查看所有container(容器)相关的命令。
Docker官方为了让用户快速了解docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法。但是由于Docker技术的快速发展,此交互式教程已经无法满足Docker用户的实际使用需求,所以让我们一起开始一次真正的命令行学习之旅。这里仅介绍Docker的管理命令(命令行),如果需要docker的启动命令,请参考:Docker的启动参数,Docker的命令,包括以下11部分的内容:
从Docker 1.11开始,Docker容器运行已经不是简单的通过Docker daemon来启动,而是集成了containerd、runC等多个组件。Docker服务启动之后,我们也可以看见系统上启动了dockerd、docker-containerd等进程,本文主要介绍新版Docker(1.11以后)每个部分的功能和作用。包括 docker、docker-containerd、docker-containerd-ctr、docker-containerd-shim、dockerd、docker-init、docker-proxy、docker-runc ,这8个二进制文件。
启动的docker的二进制文件是dockerd,首先需要知道 dockerd 的文件路径,那么可以使用
<path>/dockerd & 启动docker,这里详细介绍下启动参数的使用。
官方的配置地址:https://docs.docker.com/engine/reference/commandline/dockerd/#options
配置文件的默认路径:/etc/docker/daemon.json
Docker的安装可参考:https://docs.docker.com/engine/installation/linux/centos/,Docker的安装方式有三种:Yum安装、使用rpm包、已编译的二进制包、源码编译。
这是最简单的一种安装方式,目录分布采用默认的设置。这个也是本人很不喜欢的。所以这种安装方式初次使用 docker的朋友,可以选择这种方式。
从PHP转向GO,最不能适应的是GO是强类型语言,变量的申明需要指定其类型,相同的变量之间才可以做算术、关系、逻辑等运算。