创建 Docker Image

在 Docker 中有三个重要概念,仓库、镜像和容器(详见《Docker简介》),从认识 Docker 以来一直都在用别人的镜像,对于满足自己需求的镜像还是很爽的,但是,对于一些不满足自己需求的镜像或者因为网络等各种原因不能简单快速获取的镜像,还是有点不爽的,所以,就会萌生出自己创建镜像的想法。

今天就来总结一下如何创建自己的镜像。一般来说,在 Docker 中,有三种创建镜像的方法,分别是:

作为初学者来说,肯定是前两种比较简单,毕竟 Dockerfile 里面包含的内容比较丰富,初学者学起来肯定会比较吃力,不容易出成果,难有成就感,所以,我着重介绍入门比较简单的第一种方式:基于已有镜像的容器来创建。

下面我以创建一个 juppyter + Matplotlib 的 Image 为例进行介绍。

首先,还是以国际惯例先介绍一下我的准备环境:

操作系统: OS X El Capitan Docker版本: 1.8.1 基础镜像: ubuntu:latest

Step 1: 启动 Docker、创建容器

boot2docker up
docker run -it ubuntu /bin/bash


Step 2: 更新 apt 源,安装依赖包

echo deb http://archive.ubuntu.com/ubuntu/ raring main universe >> /etc/apt/sources.list
apt-get update
apt-get install git
apt-get install build-essential
apt-get install python-pip
apt-get install libpng-dev
apt-get install libjpeg8-dev
apt-get install libfreetype6-dev
apt-get install libxft-dev
apt-get install python-dev


Step 3: 安装 jupyter/Matplotlib

pip install jupyter
pip install functools32
pip install plotly
apt-get build-dep matplotlib


Step 4: 记录下容器序列号关闭容器:

例如: root@32ddff613bb7 那么容器的序列号就是:32ddff613bb7


Step 5: 创建镜像

docker commit -m Create Jupyter/Matplotlib -a Docker New Image 32ddff613bb7 ipython-matplotlib


这样就创建了一个名字叫做: ipython-matplotlib 的镜像,它以容器 32ddff613bb7 为原型,包含容器 32ddff613bb7 中安装的所有软件和内容。

这就是一个比较简单的基于已有镜像创建新镜像的方法。

其他方式:

基于本地模板导入

下载一个镜像的模板,例如 ubuntu-latest-minimal.tar.gz

然后使用以下命令导入:

cat ubuntu-latest-minimal.tar.gz | docker import - ubuntu:latest

基于 Dockerfile 创建

创建一个 Dockerfile 文件(具体参见《Dockerfile解析》),文件位置为:/home/docker/ipython/Dockerfile

然后使用以下命令创建:

docker build -t lukelau/jupyter-matplot /home/docker/ipython


注意:

  1. lukelau/jupyter-matplot 是镜像的名字
  2. /home/docker/ipython 为 Dockerfile 放置的目录,不用具体到文件