Dcokerfile文件-个人笔记

99 阅读3分钟

基础概念

Dockerfile是什么?

Docker为我们提供的一个用于自定义构建镜像的一个配置文件:描述如何构建一个对象;利用Docker提供的build命令,指定Dockerfile文件,就可以按照配置的内容将镜像构建出来

为什么需要Dockerfile?

作为开发者需要将自己开发好的项目打包成Docker镜像

作为运维人员需要构建更精简的基础设施服务镜像,满足公司需求以及尽可能减少冗余的功能占用过多的资源

Dockerfile能做什么?

1、 可以自定义镜像内容

2、 构建公共基础镜像减少其他镜像配置

3、 开源程序的快速部署

4、 实现企业内部项目的快速交付

常用命令

FROM

指定以什么镜像作为基础镜像,在改进项的基础之上构建新的镜像。 如果不想以任何镜像作为基础:FORM search

语法:

FROM <image>
FROM <image>:<tag>
FROM <image>:<digest>

以上三种写法,后两者为指定具体版本,第一种则使用latest即最新版本

MAINTAINER

描述作者信息

LABEL

为镜像设置标签,一个Dockerfile中可以配置多个LABEL

语法:

LABEL<key>=<value>

如:

LABEL "example.label"="Example Label"
LABEL label-value="LABEL"
LABEL version="1.0.0"
LABEL description="可以写多行,使用'\'符号可以拼接多行的value"

ENV

设置容器的环境变量,可以设置多个

语法:

ENV <key> <value>
ENV <key>=<value> <key>=<value> ...

两种语法的区别为:第一种只能设置一个环境变量,第二个可以一次设置多个

RUN

构建镜像过程中要执行的命令

语法:

RUN <command>
RUN ["executable", "param1", "param2"]

第一种写法就是直接写Shell脚本即可

第二种写法类似函数调用,第一个参数为可执行文件,后面的都是参数

ADD

复制命令,把src的文件复制到镜像的dest位置

语法:

ADD <src> <dest>
ADD ["<src>","<dest>"]

WORKDIR

WORKDIR /app

在设置完工作目录后,执行pwd命令,打印的目录就是/app

VOLUME

设置挂载目录,可以将主机中的指定目录挂载到容器中

语法:

VOLUME ["<dir>"]
VOLUME <dir>
VOLUME <dir> <dir>

以上三种写法都可

EXPOSE

该镜像运行容器后,需要暴露给外部的端口,但仅仅表示该容器想要暴露某些端口,并不会与主机端口有映射关系,如果想将容器暴露的端口与主机映射则需要使用-p-P参数来映射,可以暴露多个端口

语法:

EXPOSE <port>/<tcp/udp>

CMD 和 ENTRYPOINT

CMD 和 ENTRYPOINT选择其一即可,作用是描述镜像构建完成后,启动容器时默认执行的脚本

CMD: 该镜像启动容器时默认执行的命令或参数

语法:

CMD ["executable", "param1", "param2"]
CMD ["param1", "param2"]
CMD <command> <param1> <param2>

以上为该命令的三种写法,第三种与普通Shell命令类似,第一、二两种都是可执行文件+参数形式,另外数组内的参数必须使用双引号。

ENTRYPOINT: 运行容器时的启动命令,感觉与CMD命令很像,实际上还是有很大区别,简单对比一下:

语法:

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

相同点: 在整个Dockerfile中只能设置一次,如果写了多次则只有最后一次生效

不同点:

  • ENTRYPOINT不会被运行容器时指定的命令所覆盖,而CMD会被覆盖

  • 如果同时设置了这两个指令,且CMD仅仅是选项而不是参数,CMD中的内容会作为ENIRYPOINT的参数(一般不这么做)

  • 如果两个都是完整命令,那么只会执行最后一条

构建镜像

commit指令

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

例:

docker commit -a="wolfcode" -m="first image" contos7 mycentos 

OPTIONS:

-a:镜像作者

-c:使用Dockerfile指令来构建镜像

-m:提交时的描述

-p:在commit时暂停容器