网站首页 > 技术文章 正文
指令格式有两种:注释和指令
注释以井号开头,后面跟上信息
指令以大写的指令名开头,后面跟上参数
常见的指令
FROM
两种形式如下:
FROM <IMAGE> FROM <IMAGE>:<TAG>
通过FROM指定的镜像名称必须是一个已经存在的镜像,这个镜像称之为基础镜像,必须位于第一条非注释指令
MAINTAINER
MAINTAINER <NAME>
指定镜像的作者信息,包含镜像的所有者和联系人信息
RUN
用于指定构建镜像时运行的命令,两种模式:
RUN <command> (shell模式) RUN [ "executable", "param1", "param2" ] (exec模式)
在shell模式下,是使用/bin/sh -c COMMAND来运行命令的在exec模式下可以指定其他的shell来运行命令RUN [“/bin/bash”, “-c”, “echo hello”]
多条RUN指令可以合并为一条:
RUN yum install httpd && yum install ftp
这样在构建的时候会减少产生中间层镜像
EXPOSE
指定运行该镜像的容器使用的端口,可以是多个。
EXPOSE <PORT>
使用这个指令的目的是告诉应用程序容器内应用程序会使用的端口,在运行时还需要使用-p参数指定映射端口。这是docker处于安全的目的,不会自动打开端口。
docker run -p 80 -d dockertest/dockerfile_build nginx -g "daemon off"
CMD
用于提供容器运行的默认命令,如果在docker run时指定了运行的命令,则CMD命令不会执行。
CMD有三种模式:
CMD <command> (shell模式) CMD [ "executable", "param1", "param2" ] (exec模式) CMD [ 'param1', 'param2'] (通常与ENTRYPOINT搭配指定ENTRYPOINT的默认参数)
ENTRYPOINT
与CMD类似,ENTRYPOINT不会被docker run中指定的命令覆盖,如果想覆盖ENTRYPOINT,则需要在docker run中指定--entrypoint选项
它有两种模式:
ENTRYPOINT <command> (shell模式) ENTRYPOINT [ "executable", "param1", "param2" ] (exec模式)
ADD和COPY
作用都是将文件或目录复制到Dockerfile构建的镜像中
ADD <src> <dest> ADD ["<src>" "<dest>"] (适用于文件路径包含空格的情况) COPY <src> <dest> ADD ["<src>" "<dest>"] (适用于文件路径包含空格的情况)
ADD包含了类似tar的解压功能,如果只是单纯复制文件,建议使用COPY,而且,两者的源文件路径使用Dockerfile相对路径,目标路径使用绝对路径。
COPY index.html /var/www/html
VOLUME
用于向容器添加卷,可以提供共享存储等功能
VOLUME ['/data']
WORKDIR
在容器内部设置工作目录,这样ENTRYPOINT和CMD指定的命令都会在容器中这个目录下进行。
WORKDIR /path/to/workdir
ENV
用于设置环境变量
ENV <KEY> <VALUE> ENV <KEY>=<VALUE>
USER
用于指定镜像为什么用户去运行
USER nginx
镜像就会以nginx身份运行,可以使用uid,gid等各种组合使用
ONBUILD
为镜像创建触发器,当一个镜像被用作其他镜像的基础镜像时,这个触发器会被执行。当子镜像被构建时会插入触发器中的指令。
ONBUILD COPY index.html /var/www/html
Dockerfile的构建过程
- docker会从Dockerfile文件头FROM指定的基础镜像运行一个容器
- 然后执行一条指令,对容器修改
- 接着执行类似docker commit的操作,创建新的镜像层
- 在基于刚创建的镜像运行一个新的容器
- 执行Dockerfile下一条指令,直到所有指令执行完毕
docker会删除中间层创建的容器,但不会删除中间层镜像,所以可以使用docker run运行一个中间层容器,从而查看每一步构建后的镜像状态,这样就可以进行调试。
构建缓存
docker在构建过程中会将之前构建的镜像看做缓存。
当第一次构建的时候,构建过程会比较慢,而在此进行相同的构建的时候,会看见using cache字样,表示使用了缓存,构建过程也非常快。
如果不想使用构建缓存,则在docker build中使用—no-cache选项。
还可以在Dockerfile中使用ENV REFRESH_DATE 2018-01-01来制定缓存刷新时间,更改这个时间,就会让后面的命令不使用缓存。
原文链接:https://blog.csdn.net/sinat_35930259/article/details/79679294
猜你喜欢
- 2024-09-27 【容器篇】认识Dockerfile dockerfile示例
- 2024-09-27 Dockerfile常用指令大全及详解 dockerfile中最常见的指令是什么
- 2024-09-27 阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比
- 2024-09-27 Docker 镜像构建之 Dockerfile docker镜像在哪个文件夹
- 2024-09-27 docker进击之Dockerfile最佳实践 dockersfile
- 2024-09-27 Dockerfile简单使用 dockerfile示例
- 2024-09-27 Dockerfile你值得拥有 dockerfile sh
- 2024-09-27 DockerFile文件详解 dockerfile文件详解java
- 2024-09-27 Docker实战九之Docker Dockerfile
- 2024-09-27 Docker篇(三):Dockerfile实战开启
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)