分类目录归档:docker

Docker初体验1 —几个概念的理解

本文从一种使用场景来引出docker,并讨论了什么是镜像,容器,仓库,以及docker的相关概念。

试想一种使用场景:

我的wordpress 博客网站现在部署在阿里云服务器上,但是在后期的使用中我有可能有这样一种需求,阿里云太贵,我可能实在付不起每月月租,想把我的服务迁到其他的云服务上,而又想完整的将我的wordpress服务和数据从阿里云迁出,并将其部署到另外的云服务上。那么我怎样解决这个问题?

第一种方案:在新主机上部署一套环境,然后将项目目录和mysql服务倒出,这种方法比较费力,而且由于相关依赖包比价复杂,容易出错。

第二种方案:在主机上安装一个KVM之类的虚拟机,可以将wordpress服务部署在KVM的虚拟机上,当我想迁出服务时我就将虚拟机的相关文件倒出,但是由于云服务主机的配置不是很高,才1核1G。这样就会耗费我很多的资源,我的wordpress明明可以跑在宿主机上,但是现在却要跑在虚拟机里。那么有没有什么方法可以解决我的问题?

方案四:使用Docker:Build, Ship and Run Any App, Anywhere!


什么是 Docker与Docker官方相关技术简介(可略读):

Docker是一套轻量级操作系统虚拟化解决方案,它由go语言编写。它基于Linux容器技术(LXC),Namespace,Cgroup,UnionFS(联合文件系统)等技术。

namespace(命名空间):命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。docker实际上一个进程容器,它通过namespace实现了进程和进程所使用的资源的隔离。使不同的进程之间彼此不可见。我们可以把Docker容器想像成进程+操作系统除内核之外的一套软件。

cgroup(控制组)是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。控制组技术最早是由 Google 的程序员 2006 年起提出,Linux 内核自 2.6.24 开始支持。控制组可以提供对容器的内存、CPU、磁盘 IO 等资源的限制和审计管理。

UnionFS(联合文件系统)Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对 文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。另外,不同 Docker 容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。Docker 中使用的 AUFS(AnotherUnionFS)就是一种 Union FS。 AUFS 支持为每一个成员目录(类似 Git 的分支)设定只读(readonly)、读写(readwrite)和写出(whiteout-able)权限, 同时 AUFS 里有一个类似分层的概念, 对只读权限的分支可以逻辑上进行增量地修改(不影响只读部分的)。

Docker 目前支持的 Union 文件系统种类包括 AUFS, btrfs, vfs 和 DeviceMapper。


谈谈我的理解

1.Docker的生命周期:

Docker的生命周期包含三个部分,镜像,容器,仓库,我们可以把镜像,容器想像成java的类和对象,即容器是由镜像实例化而来的。也就是说我们想使用装有相关软件的镜像,首先要把镜像创建成容器。现在是不是对镜像,容器,仓库这些概念还存在一些困惑?那么让我们动手体验一下docker的神奇,然后慢慢理解这些概念

继续阅读