创建 Docker Image
在 Docker 中有三个重要概念,仓库、镜像和容器(详见《Docker简介》),从认识 Docker
以来一直都在用别人的镜像,对于满足自己需求的镜像还是很爽的,但是,对于一些不满足自己需求的镜像或者因为网络等各种原因不能简单快速获取的镜像,还是有点不爽的,所以,就会萌生出自己创建镜像的想法。
今天就来总结一下如何创建自己的镜像。一般来说,在 Docker 中,有三种创建镜像的方法,分别是:
- 基于已有镜像的容器来创建
- 基于本地模板导入来创建
- 基于 Dockerfile 来创建
作为初学者来说,肯定是前两种比较简单,毕竟 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
注意:
- lukelau/jupyter-matplot 是镜像的名字
- /home/docker/ipython 为 Dockerfile 放置的目录,不用具体到文件