Dockerfile详解

概述

  Docker镜像包含两种常用的构造方式:

  1. docker commit – 通过对已经存在的容器修改后提交生成镜像
  2. docker build – 通过Dockerfile文件生成镜像

  相较于第一种方式,第二种通过编写Dockerfile文件,将生成镜像的步骤固化下来,使得创建镜像的过程更加灵活且可以被重复执行,更加具有实用价值。

Dockerfile语法

FROM

  FROM语法用来指明构建镜像的基础镜像,一般位于Dockerfile文件的开头。如果本地镜像库不包含该镜像,将会自动通过docker pull命令进行下载。

FROM centos:7

  ps:可以在一个Dockerfile文件中使用多条FROM语句,用于生成多个镜像。

MAINTAINER

  该命令用于指明Dockerfile的维护者信息

MAINTAINER cx1ng leec1ng@gamil.com
RUN

  RUN命令用于在父镜像之上添加新的镜像层,通常用于安装软件。

RUN yum install mysql
EXPOSE

  EXPOSE命令用来指明容器运行时对外开放的端口。

EXPOSE 3306

  在容器运行时,可以通过-p参数进行端口映射,使其可以通过宿主机的端口进行访问。

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=12345 -d -p 3306:3306 mysql

  这样就可以通过宿主机的3306端口访问容器的3306端口。

CMD

  CMD用来指明容器启动时的服务,可以被容器运行时的command参数覆盖。每个Dockerfile文件只有最后一个CMD命令会生效。当Dockerfile存在ENTRYPOINT时,该命令通常用于为ENTRYPOINT指定的服务提供参数.

CMD service mysqld start

  当Dockerfile存在ENTRYPOINT时,该命令通常用于为ENTRYPOINT指定的服务提供参数

CMD ["param1","param2"]
ENTRYPOINT

  ENTRYPOINT用来指定容器运行时的入口,即运行时启动的服务。与CMD命令相同的是,当存在多个,只有最后一个会生效;不同的是,该命令不会被容器启动时指定的command覆盖

ENTRYPOINT service mysqld start
ENV

  ENV命令用于配置容器运行时的环境变量,同时,会对Dockerfile中后续的RUN命令产生影响

ENV HOME /home/cx1ng/
ADD

  将指定<src>复制到容器中的<dst>

  • <src>除常规文件外,还可以是URL、压缩文件。如果是压缩文件则会自动解压缩。
  • <src>的路径可以是Dockerfile所在目录的一个相对路径。
ADD <src> <dst>
COPY

  复制宿主机的<src>到容器的<dst><src>的路径必须是Dockerfile文件所在目录的相对路径。

COPY <src> <dst>
VOLUME

  在容器中添加一个挂载点,但主机挂载目录是自动生成的。主机对应目录可以通过docker inspect container_name/container_id进行查看。

VOLUME ["/data1","/data2"]

  如果要指定主机的挂载目录,则需要在容器运行时通过-v参数指定挂载目录。

docker run -d -v /home/cx1ng/data:/data -e MYSQL_ROOT_PASSWORD=12345 mysql
USER

  USER命令用于指明容器运行时的用户。

USER cx1ng
WORKDIR

  为后续的指令(RUN、CMD、ENTRYPOINT)配置工作目录,如果路径是相对路径,则会基于之前命令指定的路径。

WORKDIR /home/cx1ng/
ONBUILD

  当本镜像作为Dockerfile的基础镜像,会执行的命令

更详细的请查看这里S

本文使用CC BY-NA-SA 4.0协议许可
本文链接:http://404-notfound.com/Dockerfile详解/