初探Docker

什么是Docker

Docker是一个新的容器化的技术,它轻巧,且易移植,号称“build once, configure once and run anywhere“

Docker 特征

  • 速度飞快以及优雅的隔离框架
  • 物美价廉
  • CPU/内存的低消耗
  • 快速开/关机
  • 跨云计算基础构架

Docker 组件与元素

Docker有三个组件和三个基本元素。三个组件分别是:

  • Docker Client 是用户界面,它支持用户与Docker Daemon之间通信。
  • Docker Daemon运行于主机上,处理服务请求。
  • Docker Index是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份。

三个基本要素分别是:

  • Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。
  • Docker Images是一个只读模板,用来运行Docker容器。
  • DockerFile是文件指令集,用来说明如何自动创建Docker镜像。

在讨论Docker组件和基本要素如何交互之前,让我们来谈谈Docker的支柱。Docker使用以下操作系统的功能来提高容器技术效率:

  • Namespaces 充当隔离的第一级。确保一个容器中运行一个进程而且不能看到或影响容器外的其它进程。
  • Control Groups是LXC的重要组成部分,具有资源核算与限制的关键功能。
  • UnionFS(文件系统)作为容器的构建块。为了支持Docker的轻量级以及速度快的特性,它创建了用户层。

此章节引用于Docker入门教程(一)介绍

Ubuntu Docker 安装

Docker 支持以下的 Ubuntu 版本

  • Ubuntu Trusty 14.04 (LTS) (64-bit)
  • Ubuntu Precise 12.04 (LTS) (64-bit)
  • Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

这个页面可以指导你安装 Docker 包管理器,并了解其中的安装机制。通过下边的安装方式可以确保你获取的是最新版本的 Docker。如果你想要使用 Ubuntu包管理器 安装,你可以查阅你的 Ubuntu 文档。

前提条件

Docker 需要在64位版本的Ubuntu上安装。此外,你还需要保证你的 Ubuntu 内核的最小版本不低于 3.10,其中3.10 小版本和更新维护版也是可以使用的。

在低于3.10版本的内核上运行 Docker 会丢失一部分功能。在这些旧的版本上运行 Docker 会出现一些BUG,这些BUG在一定的条件里会导致数据的丢失,或者报一些严重的错误。

打开控制台使用 uname -r命令来查看你当前的内核版本。

$ uname -r 
3.11.0-15-generic

Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的Ubuntu版本是否支持 Docker 。

安装Docker

首先要确认你的 Ubuntu 版本是否符合安装 Docker 的前提条件。如果没有问题,你可以通过下边的方式来安装 Docker :

  1. 使用具有sudo权限的用户来登录你的Ubuntu。

  2. 查看你是否安装了wget

    $ which wget
    

    如果wget没有安装,先升级包管理器,然后再安装它。

    $ sudo apt-get update $ sudo apt-get install wget
    
  3. 获取最新版本的 Docker 安装包

    $ wget -qO- https://get.docker.com/ | sh
    

    系统会提示你输入sudo密码,输入完成之后,就会下载脚本并且安装Docker及依赖包。

  4. 验证 Docker 是否被正确的安装

    $ sudo docker run hello-world
    

    上边的命令会下载一个测试镜像,并在容器内运行这个镜像。

创建一个Image

我们使用14.04版本的uBuntu系统作为镜像来运行容器。

1
2
root@iZ94wel1a6lZ:~# docker run -t -i ubuntu:14.04 /bin/bash
root@9d650d3cbf82:/#

此时我们就进入了容器的系统中。

然后我们可以在这容器中装个git,我们先更新一下apt-get

1
root@9d650d3cbf82:/# apt-get update

更新完成后,通过

1
root@9d650d3cbf82:/# apt-get install git

安装git工具。

安装完git后,我们退出镜像系统,保存镜像。

1
2
3
root@9d650d3cbf82:/# exit
exit
root@iZ94wel1a6lZ:~#

可以通过以下命令查询到刚刚使用的容器:

1
2
3
4
root@iZ94wel1a6lZ:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d650d3cbf82 ubuntu:14.04 "/bin/bash" 20 minutes ago Exited (1) 52 seconds ago dreamy_agnesi
root@iZ94wel1a6lZ:~#

9d650d3cbf82是对应的容器id,我们通过commit 命令保存容器。

1
2
3
root@iZ94wel1a6lZ:~# docker commit 9d650d3cbf82 git_docker
sha256:30ffceb8537d397c1e2d6a988b6b60a8440048eaadb5e0a9c3e6f4194e6ebdce
root@iZ94wel1a6lZ:~#

这样刚刚安装好的git的容器的Image就创建好了。我们可以通过images命令来查询本地的镜像。

1
2
3
4
5
6
7
8
9
10
11
12
root@iZ94wel1a6lZ:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
git_docker latest 30ffceb8537d 2 minutes ago 248.1 MB
bay2/subversion v3 05c8454fe405 5 hours ago 270.4 MB
bay2/subversion v2 ce99a9365797 5 hours ago 270.4 MB
bay2/subversion v1 de85fae0214e 5 hours ago 270.3 MB
bay2/subversion latest 5aed828839ec 5 hours ago 270.3 MB
sameersbn/postgresql 9.4-24 49805abe68d6 3 days ago 231.4 MB
sameersbn/redmine latest 8a0c75b3ebb0 5 days ago 659.2 MB
ubuntu 14.04 0ccb13bf1954 11 days ago 188 MB
daocloud.io/daocloud/daocloud-toolset latest 1ab33797d8a1 3 months ago 150.2 MB
root@iZ94wel1a6lZ:~#

git_docker就是我们刚刚创建好的image。

最后我们可以通过run命令来运行这个镜像。

1
2
3
4
root@iZ94wel1a6lZ:~# docker run -t -i git_docker
root@ef412aa16dba:/# git version
git version 1.9.1
root@ef412aa16dba:/#

刚刚安装了git的容器就被我运行起来了。

总结

Docker 这个技术的确很有意思,虽然只是玩了短短的一天,但我已经爱上了一项技术。我相信这是改变世界的技术之一。本次只是初探,将来必定会更深入的去学习。