docker之程序员系列 (一)

因为我主要使用 ubuntu 做服务器,所以以下的操作都是在 ubuntu server 14.04下进行。

OSX 下的选择

虽然官方提供了一个工具(boot2docker),但是说到底,它其实也是在 OSX 下使用 virtualbox 虚拟了一个 linux 出来,然后再在 linux 下进行 docker 操作。那么对于我这样的凡事都希望清晰、简单的人来说,第一选择肯定不会使用这个工具,而是会选择从头开始。如果你和我一样,那么我们需要下面这几样东西:

  1. virtualbox
  2. ubuntu server 14.04

linux 安装完成之后,为了更好的使用,你需要知道几件关于 virtualbox 的事情:

  1. 如何映射端口
  2. 在命令行启动虚拟机

映射端口在 virtualbox 的gui 界面中就可以简单的完成。下面我贴出命令行启动和保存虚拟机的代码:

VBoxManage startvm Ubuntu --type headless
VBoxManage controlvm Ubuntu savestate

Ubuntu 下 docker 安装和配置

docker 安装和配置和其他程序没有什么两样。使用apt-get进行安装:

sudo apt-get udpate
sudo apt-get install docker.io

此时 docker 的每次运行都需要加上前缀sudo,比较麻烦。可以进行如下的处理:

sudo groupadd docker
sudo gpasswd -a ${USER} docker

其中,${USER}代表 ubuntu 的当前用户。具体可以参考 askubuntu.com

第一个 image

现在我们需要一个 image。这里也有几种选择:

  1. 从网上下载。如果网络速度比较快的话,可以使用下面的命令从 docker 官方库中搜索并拉一个 image 下来:
    docker search ubuntu
    docker pull ubuntu
  2. 自己做一个

如果你选择自己做一个,也是有多个选择,但这里我选择简单一点,使用 debootstrap 工具。而使用这个工具,不需要一个参数一个参数自己输入,docker 官方提供了一个脚本mkimage.sh

git clone https://github.com/docker/docker.git
cd docker
./mkimage.sh

按照提示进行即可。

运行容器

现在我们有了一个baseimage,在我们启动它之前,我们可以给它打一个 tag。

# 查看当前用于的 image
docker images
# 给 image 打 tag,格式为[repository[:tag]]
docker tag <image_id> ubuntu:14.04

当我们拥有多个 image 之后,可以很容易的通过 tag 来识别各自的用处。

# 运行这个 dock
docker run -it --name first ubuntu:14.04

这样就启动了一个容器,把这个容器命名为 first,并且获得一个控制台。

保存修改

容器的一大优势就是很方便的丢弃一些数据和状态。如果你只是临时性的运行一下程序,验证一些想法,容器是非常方便的。当退出并且删除容器之后,所有的数据都会被抛弃。
但是当你需要保存数据或是状态,那么需要显示的进行保存。docker 的一些概念和 git 相似,这里也是通过 commit 来保存容器:

docker commit first tag

tag可以是原来的 image 的 tag,也可以是一个新的 tag。