Dockerfile

Dockerfile

Dockerfile 介绍

Dockerfile 是一个用来构建镜像的文本文件。

Dockfile 是一种被 Docker 程序解释的脚本,Dockerfile 由多条的指令组成,每条指令对应 Linux 下面的一条命令。Docker 程序将这些 Dockerfile 指令翻译成真正的 Linux 命令。

Dockerfile 有自己书写格式和支持的命令,Docker 程序解决这些命令间的依赖关系,类似于 Makefile。Docker 程序将读取 Dockerfile,根据指令生成定制的镜像。相比镜像这种黑盒子,Dockerfile 这种显而易见的脚本更容易被使用者接受,它明确的表明镜像是怎么产生的。有了 Dockerfile,当有定制额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成镜像。

创建镜像的三种方法

  • 基于已有镜像创建
  • 基于本地模板创建
  • 基于 Dockerfile 创建。

基于已有镜像创建

基于现有镜像创建主要使用 docker commit 命令,即把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。

命令格式:

docker commit [选项] 容器ID/名称 仓库名称:[标签]

  • -m:说明信息
  • -a:作者信息
  • -p:生成过程中停止容器的运行

首先,启动一个镜像,在容器里做修改,然后将修改后的容器提交为新的镜像。需要记住该容器的 ID 号,之后,可以使用 docker commit 命令创建一个新的镜像,创建完成后,会返回新创建镜像的 ID 信息。查看本地镜像列表时,可以看到新创建的镜像信息。

example:
docker ps -a 

CONTAINER ID   IMAGE             COMMAND       CREATED      STATUS          PORTS     NAMES
aea2cc2ab1e6   centos:7.6.1810   "/bin/bash"   6 days ago   Up 22 seconds             centos

docker commit -m "new centos" -a "qingshan" aea2 centos:7.6
sha256:53fd43b0fc4f9ce2caaa784949ca8b60706370684a65a7a9c7a20bf34fa3c499

docker images | grep "centos"

REPOSITORY   TAG        IMAGE ID       CREATED          SIZE
centos       7.6        53fd43b0fc4f   28 seconds ago   202MB
centos       7.6.1810   f1cb7c7d58b7   2 years ago      202MB

基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板可以从 OPENVZ 开源项目下载。下载地址为:link

下面是使用 docker 导入命令将下载的 debian 模板压缩包导入为本地镜像的例子。

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
cat debian-7.0-x86-minimal.tar.gz | docker import - debian:new_test
sha256:f4856d1c424695f6f9565958673b7f2d7d6b12483185785dab280b7025f4a5b7

导入完成后,会返回生成镜像的 ID 信息。查看本地镜像列表时,可以看到新创建的镜像信息。

docker images | grep debian

REPOSITORY   TAG        IMAGE ID       CREATED          SIZE
debian       new_test   f4856d1c4246   43 seconds ago   215MB

基于 Dockerfile 创建

Dockerfile 是由一组指令组成的文件,其中每条指令对应 Linux 中的一条命令,Docker 程序将读取Dockerfile 中的指令生成指定镜像。

Dockerfile 结构大致分为四个部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令。

Dockerfile 每行支持一条指令,每条指令可携带多个参数,支持使用以 “#“ 号开头的注释,Dockerfile 有十几条命令可用于构建镜像。

常用的 Dockerfile 操作指令如下所示:

指令含义
FROM 镜像指定新镜像所基于的镜像,第一条指令必须为 FROM 指令,每创建一个镜像就需要一条 FROM 指令
MAINTAINER 名字说明新镜像的维护人信息
RUN 命令在所基于的镜像上执行命令,并提交到新的镜像中
CMD [“要运行的程序”,“参数 1”,“参数 2”] 令。启动容器时要运行的命令或者脚本,Dockerfile 只能有一条CMD 命令。如果指定多条命令,只执行最后一条命令
EXPOSE 端口号指定新镜像加载到 Docker 时要开启的端口
ENV 环境变量 变量值设置一个环境变量的值,会被后面的 RUN 使用
ADD 源文件/目录 目标文件/目录将源文件复制到目标文件,源文件要与 Dockerfile 位于相同目录中,或者是一个 URL
COPY 源文件/目录 目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录要与 Dockerfile 在相同的目录中
VOLUME [“目录”]在容器中创建一个挂载点
USER 用户名/UID指定运行容器时的用户
WORKDIR 路径为后续的 RUN、CMD、ENTRYPOINT 指定工作目录
ONBUILD 命令指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTHCHECK健康检查
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值