使用Dockerfile定制镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,这个脚本就叫做Dockerfile。
Dockerfile是一个文本文件,其内包含了一条条指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

创建Dockerfile

首先创建一个目录,然后在该目录里面创建Dockerfile文件。例如:

$ mkdir goweb
$ cd goweb
$ touch Dockerfile

保存Dockerfile文件的目录,称之为构建环境,也叫构建上下文。Docker会在构建镜像时将构建上下文和该上下文中的文件和目录上传到Docker守护进程。这样Docker守护进程就能直接访问你想在镜像中存储的任何代码、文件或者其他数据。
以下面的文档为例来介绍如何使用:

FROM alpine
MAINTAINER benben <benben@csdn.com>
LABEL maintainer="benben <benben@csdn.com>"

# 原utc时间,修改成cst(中国标准东八区时间)
ENV TZ Asia/Shanghai
RUN apk --update add tzdata ca-certificates && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
        echo ${TZ} > /etc/timezone

WORKDIR /opt/benben-project
COPY benbenProject benbenProject
RUN chmod 755 ./benbenProject
COPY conf/ ./conf

RUN mkdir logs

EXPOSE 8088

CMD ./benbenProject
FROM指定基础镜像

定制镜像,就是以一个镜像为基础,在其上进行定制。一个Dockerfile中FROM是必不可少的指令,并且必须是第一条指令。用法如下:

FROM [AS ]
FROM [:] [AS ]
FROM [@] [AS ]

基础镜像可以是任何有效的镜像,通过从公共仓库中拉取镜像非常容易。本文的基础镜像是一个面向安全的轻型Linux发行版。

  • ARG命令是Dockerfile中唯一可以在FROM之前的指令,可以参阅随后的ARG和FROM如何交互
  • FROM可以在单个Dockerfile中多次出现以创建多个映像,或者使用一个构建层作为另一个构建层的依赖。只需要在每个新的FROM指令之前记下最后一个commit镜像的id,因为每个FROM指令会清除事先所有指令创建的状态。
  • tagdigest值是可选的,如果省略,则构建镜像时,会默认采用latest标签。如果找不到,则构建器会返回错误。

除了选择现有镜像为基础镜像外,Docker还存在一个特殊的镜像,scratch。这个镜像是虚拟的概念,实际并不存在,它表示一个空白的镜像。如果你以scratch为基础镜像的话,意味着你不以任何镜像为基础。接下来的指令将作为镜像第一层开始。

ARG和FROM如何交互

FROM指令支持在第一个FROM之前出现任何ARG指令声明的变量。例如:

ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD /code/run-app

FROM extras:${CODE_VERSION}
CMD /code/run-extras

FROM指令之前的ARG指令位于构建阶段之外,因此在FROM命令之后,是不能使用那些环境变量的。上面指令的第二行可以使用变量CODE_VERSION,,但第五行就不能使用。因此要想使用在第一个FROM之前声明的ARG的默认值,需要使用在构建阶段的ARG

ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值