Dockerfile笔记

1. 是什么
  • Dockerfile是一个包含用于组合镜像指令的文本文档。Docker通过读取Dockerfile中的指令自动生成镜像。
2. 基础知识
  1. 每条指令由保留字和参数组成
  2. 指令中保留字都必须为大写,且后面要跟随至少一个参数
  3. 指令按照从上到下,顺序执行
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交
  5. # 表示注释
3. 怎么用
  • docker build命令用于从Dockerfile构建映像。
    docker build -f /opt/docker/Dockerfile -t 镜像名称:tag /opt/docker/
    -f:标志指向文件系统中任何位置的Dockerfile,
    -t:指定新镜像名称和tag,
    最后的/opt/docker指定的是 build 上下文。如在命令ADD apache-tomcat-7.0.96.tar.gz /opt/中,apache-tomcat-7.0.96.tar.gz 的位置是相对上下文的。即,虽然ADD指令中直接写的文件名,实际上该文件的真实路径为:/opt/docker/apache-tomcat-7.0.96.tar.gz
4. dockerfile build大致流程
  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker 在基于刚提交的镜像运行一个新的容器
  5. 执行dockerfile中的下一条指令,直到所有指令都被执行
5. 保留字
保留字作用说明用法
FROM指定基础镜像必须为第一个指令FROM <image>[:<tag>] [AS <name>]
MAINTAINER指定镜像维护者信息已弃用MAINTAINER <name>
RUN构建镜像时执行的命令RUN <command>
RUN [“executable”, “param1”, “param2”]
CMD指定容器启动时要运行的命令如果CMD用于为ENTRYPOINT 指令提供默认参数,
则应使用JSON数组格式指定CMD和ENTRYPOINT指令。
多个CMD指令时,只有最后一条生效
CMD [“executable”,“param1”,“param2”] (执行形式,这是首选形式)
CMD [“param1”,“param2”] (作为ENTRYPOINT的默认参数)
CMD command param1 param2 (shell form)
ENTRYPOINT指定容器启动时要运行的命令与CMD区别:不会被docker run 后的参数替换掉ENTRYPOINT [“executable”, “param1”, “param2”] (执行形式,首选)
ENTRYPOINT command param1 param2 (shell form)
EXPOSE镜像启动后对外暴露的端口号可被docker run -p 80:80/tcp -p 80:80/udp 覆盖EXPOSE <port> [<port>/<protocol>…]
WORKDIR指定容器的工作目录如果有多个WORKDIR指令时,
后一条是相对于前一条WORKDIR指令的路径
WORKDIR /path/to/workdir
ENV在镜像构建过程中设置环境变量$<key> 引用变量
使用docker inspect和查看值,
并使用它们进行更改docker run --env =
ENV <key> <value>
ENV <key>=<value>
(两者有区别)
ADD从源拷贝到容器中tar类型文件会自动解压(网络压缩资源不会被解压),
可以访问网络资源,类似wget
ADD [–chown=<user>:<group>] <src>… <dest>
ADD [–chown=<user>:<group>] ["<src>",… “<dest>”]
COPY从源拷贝到容器中不会自动解压文件,也不能访问网络资源CPOY [–chown=<user>:<group>] <src>… <dest>
ADD [–chown=<user>:<group>] ["<src>",… “<dest>”]
VOLUME指定宿主机上持久化目录VOLUME ["/data", “data2”]
ONBUILD当构建一个被继承的Dockerfile时运行的命令父镜像在被子继承后,父镜像的ONBUILD触发ONBUILD [INSTRUCTION]
### Dockerfile 编写指南 官方提供了详细的文档来指导开发者编写Dockerfile,确保能够创建高效、安全的容器化应用。这些资源不仅涵盖了基础语法,还包括最佳实践建议。 #### 官方文档链接 对于希望深入了解Dockerfile编写的用户来说,访问[Docker官方文档](https://docs.docker.com/develop/)是一个很好的起点[^2]。这里包含了完整的指令集说明以及每条指令的具体用法示例。 #### 支持环境变量的指令 值得注意的是,在撰写Dockerfile时可以利用一些特定于环境配置的指令,如`ADD`, `COPY`, `ENV`, `EXPOSE`, `LABEL`, `USER`, `WORKDIR`, `VOLUME`, 和 `STOPSIGNAL`等都支持通过环境变量来进行参数传递。这使得构建过程更加灵活多变。 #### 构建上下文注意事项 当涉及到文件复制操作(`COPY`)时需要注意路径的选择。源路径必须位于当前构建上下文之内;即不能指向父级目录外的内容,这是因为构建的第一步会将整个上下文目录及其子目录打包并传输给Docker守护程序处理[^3]。 ```bash $ docker build --build-arg user=what_user -f Dockerfile . ``` 上述命令展示了如何向构建过程中传入自定义参数,并指定要使用的Dockerfile位置[^1]。 #### 本地镜像构建实例 如果仅需在本机上完成镜像制作而不打算上传至远程仓库,则可采用如下方式快速实现: ```bash ./mvnw compile jib:dockerBuild -Dimage=fairyxingyun/spring-boot-2-with-docker-sample ``` 这条命令适用于Maven项目,它能自动执行必要的编译步骤并将最终产物封装成Docker镜像保存在当地环境中[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值