Dockerfile详解及优化技巧

本文介绍了Dockerfile的原理,如镜像的分层结构和容器的创建过程。详细讲解了Dockerfile中的关键指令,如FROM用于设置基础镜像,RUN执行命令,LABEL设置标签,以及COPY和ADD复制文件。此外,还提到了Exec和Shell格式的区别,CMD和ENTRYPOINT的用法,以及VOLUME、USER和WORKDIR等指令。文章末尾讨论了Dockerfile的优化技巧,包括减少层的数量和大小,以及使用多阶段构建。

写在前面

  • Dockerfile的默认相对路径是Dockerfile所在的目录;
  • Dockerfile中的每一行会被视为一层镜像

一、Dockerfile 原理

1.1 镜像定义

首先我们先来回顾一下 Docker 镜像,它由多个只读层堆叠到一起,每一层是上一层的增量修改。基于镜像创建新容器时,将在基础层的顶部添加一个新的可写层。该层通常称为“容器层”。下图展示了一个基于 docker.io/centos 基础镜像构建的应用镜像,创建出容器时的视图。
在这里插入图片描述

1.2 镜像来源

镜像主要是 Docker 通过读取、运行 Dockerfile 的指令来生成。我们将上篇文章中的Dockerfile拿过来

FROM gcc
MAINTAINER panda	
COPY ./hello.c ./
RUN pwd
LABEL myhello 1.0.0
LABEL env prod
RUN gcc  hello.c -o hello
CMD ["./hello"]

Dockerfile的核心逻辑就是先定义引用的基础镜像(FROM base image),然后再COPY或ADD上下文到容器,然后再RUN执行用户自定义脚本构建,最后定义容器的CMD或ENTRYPOINT。

1.3 Dockerfile 关键字

FROM

设置镜像使用的基础镜像,必须是第一条指令。如果不以任何镜像为基础镜像,则可以不写,但是,接下来的第一条指令会被作为镜像的第一层使用。

用法:FROM image:tag 其中 tag 是可选项,如果不写,默认为最新latest。

FROM nginx
MAINTAINER

设置镜像的作者。

用法:MAINTAINER name

MAINTAINER   panda
RUN

编译镜像时,要执行的命令,经常被用来安装软件包、拉取和编译代码。

RUN apt-get install python3
RUN 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值