docker——6、Dockerfile相关概念

Dockerfile  -->docker build(RUN) --> images --> docker run(CMD) --> 运行容器

Docker中有个非常重要的概念叫做——镜像(Image)。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

  • 编写.dockerignore文件
  • 容器只运行单个应用
  • 将多个RUN指令合并为一个
  • 基础镜像的标签不要用latest
  • 每个RUN指令后删除多余文件
  • 选择合适的基础镜像(alpine版本最好)
  • 设置WORKDIR和CMD
  • 使用ENTRYPOINT (可选)
  • 在entrypoint脚本中使用exec
  • COPY与ADD优先使用前者
  • 合理调整COPY与RUN的顺序
  • 设置默认的环境变量,映射端口和数据卷
  • 使用LABEL设置镜像元数据
  • 添加HEALTHCHECK

Dockerfile语法说明

1、FROM: 指定基础镜像

FROM <repository>[:<tag>]
FROM <repository>@<digest> 

<repository>指定作为base image的名称
<tag>:可省, base image的标签,为可选项,省略时默认为latest
定制镜像的时候都是以一个镜像为基础,在这个基础上面进行定制。FROM在Dockerfile中是必须的指令,而且必须是第一条指令。
1)在Docker Hub上有非常多的官方镜像,比如服务类(nginx/redis)、语言类(node/openjdk/python)、操作系统类(ubuntu/debian/centos)等,我们可以直接拿来使用。
2)除了选择现有的镜像作为基础镜像外,Docker还存在一个特殊的镜像,名为scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。

2、MAINTAINER

MAINTAINER <author's detail>

<author's detail>可以是任何文本信息,但约定使用作者名称及邮件地址
如: MAINTAINER "can<change_can@qq.com>"
声明作者信息,可以放在文件任何位置,建议放在FROM后面

3、LABEL = = = …
标签,将后面的元数据添加到镜像中,可以用docker inspect查看

4、COPY:复制文件
用于从Docker主机复制文件至创建的新映射文件。COPY 指令将从构建上下文目录中<源路径>的文件复制到新的一层的镜像内的<目标路径>位置。
和 RUN 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用:

COPY <src>... <dest>
COPY ["<src>",... "<dest>"]

<src>:要复制的源文件或目录,支持使用通配符
<dest>:目标路径,即正在创建image的文件系统路径;建议为使用绝对路径,否则COPY指定则以WORKDIR为其其实路径;
注意:在路径中有空白字符时,通常使用第2种格式
文件复制准则:
(1)必须是build上下文中的路径,不能是其父目录中的文件
(2)如果是目录,则其内部文件或子目录会被递归复制,但目录自身不会被复制
(3)如果指定了多个,或在中使用了通配符,则必须是一个目录,且必须以/结尾
(4)如果事先不存在,它将会被自动创建,这包括其父目录路径
示例:

[root@node2 img1]# vim /img1/Dockerfile
# Description: test image
FROM busybox:latest
MAINTAINER "Can <change_can@qq.com>"
#LABEL maintainer="Can <change_can@qq.com>"
COPY index.html /data/web/html/
[root@node2 img1]# vim /img1/index.html
Busybox httpd server.
[root@node2 img1]# docker build -t tinyhttpd:v0.1-1 ./
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM busybox:latest
latest: Pulling from library/busybox
57c14dd66db0: Pull complete 
Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0
Status: Downloaded newer image for busybox:latest
 ---> 3a093384ac30
Step 2/3 : MAINTAINER "Can <change_can@qq.com>"
 ---> Running in 9915777d4c1f
Removing intermediate container 9915777d4c1f
 ---> 65f3bb45add2
Step 3/3 : COPY index.html /data/web/html/
 ---> d91b191fe38f
Successfully built d91b191fe38f
Successfully tagged tinyhttpd:v0.1-1
[root@node2 img1]# docker image ls  #查看镜像创建成功
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tinyhttpd           v0.1-1              d91b191fe38f        2 minutes ago       1.2MB
[root@node2 img1]# docker run --name tinyweb1 --rm tinyhttpd:v0.1-1 cat /data/web/html/index.html
Busybox
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值