dockerfile是一种可以被docker程序解释的脚本,由一条条指令组成。通过编写dockerfile可以做到:点告知docker镜像;整合下载镜像,启动容器,编辑可写层等操作,可重复构建,提升效率;随时维护,修改,分享dockerfile。
dockerfile编写格式:
1、docjkerfile整体由两类语句组成:注释信息,指令和参数(一行一个指令)。
2、dockerfile指令名不区分大小写,但为了方便和参数区分,通常使用大写字母。
3、dockerfile中指令按从上到下顺序一次执行。
4、dockerfile中第一个非注释行必须是FROM指令,其用来指定制作当前镜像依据哪个基础镜像。
5、dockerfile中需要调用的文件必须跟dockerfile文件在同一目录或者其子目录下,其他路径无效
FROM:该指令必须为dockerfile文件的第一个非注释行,用于指定构建经i昂所使用的基础镜像,后续的指令运行都要依靠此基础镜像所提供的环境(简单说就是加入docker中所引起的基础镜像里面没有mkdir命令,哪后续的遏制了是没法是哦那个mkdir命令的)
实际使用中,如果没有指定仓库,docker build会先从本机查找是否有此基础镜像,如果没有会默认去docker hub registry拉取,再找不到就会报错
语法格式:
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
实践::创建目录dockerfile,并且再该目录下创建mydocker-centos
[root@192 dockerfile]# cat mydocker-centos
FROM alpine
EXPOSE 80
docker build -f dockerfile文件路径 -t 镜像名:tag,如果不指定路径,表示是当前路径,后面加 .
[root@192 dockerfile]# docker build -f mydocker-centos -t alpine:0.1 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM alpine
---> 9c6f07244728
Step 2/2 : EXPOSE 80
---> Running in 589c4751fc7e
Removing intermediate container 589c4751fc7e
---> c93f90b5ba53
Successfully built c93f90b5ba53
Successfully tagged alpine:0.1
[root@192 dockerfile]# cat mydocker-centos
FROM alpine
EXPOSE 80
[root@192 dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine 0.1 c93f90b5ba53 About a minute ago 5.54MB
ouerevery/devin v2 6f854eec872b 38 hours ago 5.54MB
mysql latest 40b83de8fb1a 4 days ago 535MB
nginx latest 51086ed63d8c 12 days ago 142MB
postgres latest e270a11b9c8a 12 days ago 376MB
alpine latest 9c6f07244728 2 months ago 5.54MB
centos 7 eeb6ee3f44bd 13 months ago 204MB
MAINTAINER:用于让dockerfile的作者提供个人的信息
dockerfile并不限制MAINTAINER指令的位置,但是建议放在FROM指令之后
在较新的docker版本中,已经被LABEL替代
语法:MAINTAINER <name> 句里:MAINTAINER <devin>
LABEL
同docker run -l
让用户指定各种元数据(键值对的格式)。
语法格式:LABEL <key>=<value> <key>=<value> <key>=<value> ...