背景:
由于docker技术能够实现最大化应用隔离、且自身对资源损耗极低,甚至可以等同于进程,遂催生了希望将docker应用到DICOM服务开发领域。上一篇博文DICOM:docker实现DICOM服务虚拟化作为开篇,介绍了如何在docker容器内部安装DICOM运行环境(其实在这之前,也试玩过docker技术用来托管C-STORE服务DICOM:试玩Docker发布C-STORE SCP服务),其中提到了“环境变量”失效的问题。本篇继续科普docker应用中常见的问题,“数据持久化,即数据卷VOLUME”,为后续DICOM服务中文件存储做准备。
docker镜像与容器:
docker中最核心的概念当属image镜像和container容器,关于两者的对比介绍的资料很多,详情可以阅读文后的参考资料。这里通过个人学习经历,简单介绍一下自己的理解:
1. image镜像
image镜像 ,最开始听到 镜像” 这个概念是在安装操作系统时,接触最多的就是ISO光盘镜像,使用虚拟光驱(例如Daemon Tools Lite)可以完成系统安装。想必docker镜像与ISO文件类似,是一个静态文件,包含linux系统启动的核心模块。
2. container容器
延续上述概念,container容器就如同顺利安装后的系统,不同的是容器依托的不是ISO光盘镜像而是image镜像。启动后用户就可以自由操作容器,实现自己的应用。
简单对比看一下比较正式的docker镜像和docker容器的介绍:
Docker 镜像: Docker 镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。
Docker 容器:Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
大抵与我用ISO光盘镜像来类比相同,需要明确的是docker镜像(image)是静态的、只读的,而docker容器(container)是动态的、可读写的;若想深入了解两者的区别,以及两者是如何控制读写的,可参考文后的资料。
docker数据卷:
继续使用ISO光盘镜像类比docker镜像,照此类推,docker容器是我们安装完成后的操作系统,在系统中我们需要永久保留自己的数据,自然就会使用硬盘(在linux中通过mount的方式),那么如果想永久保存docker容器内的数据该怎么办呢?这就是数据卷的作用。由于初步涉猎docker,并未深入研究底层技术,因此本文从实践角度出发来学习VOLUME数据卷,详情可参考深入理解Docker Volume(一))。
为了更好的演示VOLUME创建的过