一 简介
使用docker commit来扩展一个镜像比较简单,但是不方便在一个团队中分享,所以这种方式不是很推荐。
docker还提供了一种更为灵活方便的创建镜像的方法,即使用Dockerfile文件,而且使用Dockerfile可以允许用户创建自定义的镜像。
Dockerfile由一行行命令语句组成,支持以#开头的注释。
一般来说,Dockerfile 分为四部分:
1 基础镜像信息
2 维护者信息
3 镜像操作指令
4 容器启动时执行指令
二 实战
单说有些太抽象.看个Dockerfile文件就很容易理解了.
# Docker file for Hexo 3
FROM ubuntu:16.04
MAINTAINER MUNGO
# use aliyun's mirror for faster download speed
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# add pandoc repository
RUN sed -i 's/deb mirror.lupaworld.com/ubuntu vivid main universe/g' /etc/apt/sources.list
# instal basic tool
RUN apt-get update && \
apt-get install -y nodejs curl git-core pandoc yui-compressor && \
update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10 && \
curl -L https://npmjs.org/install.sh | sh && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
ENV HEXO_VERSION 3.0.0
# install hexo
RUN npm install -g hexo@${HEXO_VERSION}
# set base dir
RUN mkdir /hexo
# set home dir
WORKDIR /hexo
EXPOSE 4000
CMD ["/bin/bash"]
三 说明
从上可得,对应上面四点分别是:
1 一开始必须使用FROM指明所基于的镜像名称。
2 使用MAINTAINER说明维护者信息。
3 镜像操作指令–RUN,ENV,WORKDIR,EXPOSE。最常用的是RUN指令,它将对镜像执行跟随的命令。每运行一条RUN指令,镜像添加新的一层,并提交。
4 最后是 CMD 指令,来指定运行容器时的操作命令。
RUN sed是为了在创建镜像时下载可以快些,指定了使用阿里云的镜像。