使用Dockerfile构建镜像

   

docker build命令用于根据给定的Dockerfile和上下文以构建Docker镜像

docker build语法

docker build [OPTIONS] <PATH | URL | ->

常用选项说明

--build-arg,设置构建时的变量
--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust,默认true。设置该选项,将对镜像进行验证
--file, -f,Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation,默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label,为生成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器

PATH | URL | -说明

给出命令执行的上下文。
上下文可以是构建执行所在的本地路径,也可以是远程URL,如Git库、tarball或文本文件等。
如果是Git库,如https://github.com/docker/rootfs.git#container:docker 则隐含先执行git clone --depth 1 --recursive,到本地临时目录;然后再将该临时目录发送给构建进程。
构建镜像的进程中,可以通过ADD命令将上下文中的任何文件(注意文件必须在上下文中)加入到镜像中。
-表示通过STDIN给出Dockerfile或上下文。

构建过程

创建镜像所在的文件夹和Dockerfile文件

mkdir sinatra 
cd sinatra 
touch Dockerfile 

在Dockerfile文件中写入指令

This is a comment
FROM ubuntu:14.04
MAINTAINER tiger tiger@localhost.localdomain
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra

创建镜像

docker build -t tiger/sinatra:v2 . 
        Sending build context to Docker daemon 2.048 kB
        Step 1 : FROM daocloud.io/ubuntu:14.04
        Trying to pull repository daocloud.io/ubuntu ... 
        14.04: Pulling from daocloud.io/ubuntu
        f3ead5e8856b: Pull complete 
        Digest: sha256:ea2b82924b078d9c8b5d3f0db585297a5cd5b9c2f7b60258cdbf9d3b9181d828
         ---> 2ff3b426bbaa
        Step 2 : MAINTAINER tiger tiger@localhost.localdomain
         ---> Running in 948396c9edaa
         ---> 227da301bad8
        Removing intermediate container 948396c9edaa
        Step 3 : RUN apt-get update && apt-get install -y ruby ruby-dev
         ...
        Step 4 : RUN gem install sinatra
        ---> Running in 89234cb493d9

Dockerfile

Dockerfile分为四个部分: 基础镜像信息、维护者信息、镜像操作指令和容器启动指令。 即FROM、MAINTAINER、RUN、CMD四个部分

FROM         指定所创建镜像的基础镜像
MAINTAINER   制定维护者信息
RUN          运行命令
CMD          容器启动是默认执行的命令
LABEL        指定生成镜像的元数据标签信息
EXPOSE       声明镜像内服务所监听的端口
ENV          指定环境变量
ADD          复制指定src路径的内容到容器的dest路径下,如果src为tar文件,则自动解压到dest路径下
copy         复制指定src路径的内容到镜像的dest路径下
ENTERPOINT   指定镜像的默认入口
VOLUME       创建数据卷挂载点
USER         指定运行容器是的用户名或UID
WORKDIR      配置工作目录
ARG          指定镜像内使用的参数
ONBUILD      配置当所创建的镜像作为其他镜像的基础镜像时,所执行创建操作指令
STOPSIGAL    容器退出信号值
HEALTHCHECK  如何进行健康检查
SHELL        指定使用shell的默认shell类型

发表评论