Dockerfile

Dockerfile 由一行行命令语句组成,通常分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令。例如:

# 第一行必须指定基础镜像信息
FROM ubuntu

# 维护者信息
MAINTAINER user user@email.com

# 镜像操作指令
RUN apu update && apt  install -y nginx

# 容器启动指令
CMD /user/sbin/nginx

其中第一行必须指明所基于的镜像名,接下来是维护者信息。后面则是镜像操作指令,例如RUN指令,每个指令都必须是大写字母,每一个指令都会创建提交一个新的镜像层。最后则是CMD指令,来指定运行容器时的操作。

  • FROM:指定基础镜像,当前镜像是基于哪个镜像的。

  • MAINTAINER:镜像维护者的姓名和邮箱地址。

  • RUN:镜像构建时候需要运行的命令。

  • EXPOSE:当前容器对外暴露的端口。

  • WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录。

  • ENV:用来在构建镜像时设置环境变量,这个环境变量可以在后续的任何 RUN 指令中使用。

  • ADD:将宿主机目录下的文件拷贝进镜像,并且自动处理 URL 和解压 tar 压缩包。

  • COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中的文件/目录复制到新的一层的镜像内的位置。

  • VOLUME:容器数据卷,用于数据保存和持久化工作。

  • CMD:指定一个容器启动时运行的命令。CMD可以有多个,但只有最后一个生效,CMD会被docker run之后的参数替换。

  • ENTRYPOINT:指定一个容器启动时候运行的命令。它不会被docker run后面的参数替换,而是追加。

  • ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发。

############################################################
# 用于构建MongoDB容器镜像的Dockerfile
# 基于Ubuntu
############################################################

# 设置基础镜像为Ubuntu
FROM ubuntu

# 文件作者/维护者
MAINTAINER Example McAuthor

# 更新仓库源列表
RUN apt-get update

################## 开始安装 ######################
# 按照MongoDB文档中的说明安装MongoDB
# 参考: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

# 添加软件包验证密钥
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

# 将MongoDB添加到仓库源列表
RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list

# 再次更新仓库源列表
RUN apt-get update

# 安装MongoDB软件包(.deb)
RUN apt-get install -y mongodb-10gen

# 创建默认的数据目录
RUN mkdir -p /data/db

##################### 安装结束 #####################

# 暴露默认端口
EXPOSE 27017

# 默认执行入口点的端口(MongoDB)
CMD ["--port 27017"]

# 设置默认的容器命令
ENTRYPOINT usr/bin/mongod

最后更新于

这有帮助吗?