前言:近年来 Docker 非常火 , 想要玩好 Docker 的话 Dockerfile 是绕不开的 , 这就好比想要玩好 Linux 服务器绕不开 shell 道理是一样的 。 今天我们就来聊一聊 Dockerfile 怎么写 , 那些指令到底是什么意思 。
一、先来看一个简单的 Dockerfile
#这个Dockerfile作用是打一个python3项目环境
二、Dockerfile 编写规则
- 指令到小写不敏感 , 为了区分习惯上用大写
- Dockerfile 非注释行第一行必须是 FROM
- 文件名必须是 Dockerfile
- Dockerfile 指定一个专门的目录为工作空间
- 所有引入映射的文件必须在这个工作空间目录下
- Dockerfile 工作空间目录下支持隐藏文件(.dockeringore)
- (.dockeringore)作用是用于存放不需要打包导入镜像的文件 , 根目录就是工作空间目录
- 每一条指令都会生成一个镜像层 , 镜像层多了执行效率就慢 , 能写成一条指定的就写成一条
1.FROM:基础镜像
1.1、FROM是Dockerfile文件开篇第一个非注释行代码
2.MAINTAINER:镜像作者信息
2.1、废弃了 , 使用LABLE替代
3.LABLE:镜像描述信息
3.1、LABLE author=\"haili\"
4.COPY:从 Docker 宿主机复制文件至创建的新镜像文件
4.1、COPY <src> <dest>
5.ADD:类似于 COPY 指令 , ADD 支持 tar 文件和 URL 路径
5.1、ADD <src> <dest>
6.WORKDIR:用于为 Dockerfile 中所有的 RUN、CMD、ENTRYPOINT、COPY、ADD 指定设定工作目录
6.1、WORKDIR /mnt , 如果目录不存在会自动创建 , 包括他的父目录
7.VOLUME:数据卷 , 用于在 image 中创建挂载点目录 , 以挂载 Docker host 上的卷或者其他容器上的卷
7.1、VOLUM mount_point
8.EXPOSE:为容器打开指定的监听端口以实现与外部通信
8.1、EXPOSE <port> </portocol>
9.ENV:用于为镜像定义所需的环境变量 , 可以被 Dockerfile 文件中其他命令调用(ENV、ADD、COPY、RUN、CMD)
9.1、ENV key value
10.RUN:docker build 镜像构建的时候需要执行的 shell 命令默认\"/bin/sh -c\"运行
10.1、docker build过程中需要执行的命令
11.CMD:启动容器指定默认要运行的程序或命令 , 默认\"/bin/sh -c\"运行
11.1、docker run过程中需要执行的命令
12.ENTRYPOINT:类型 CMD 指令的功能 , 用于为容器指定默认运行程序或命令
1、与CMD不同的是 , 由ENTRYPOINT启动的程序不会被docker run命令行指定的参数覆盖 , 这些命令行参数会被当做参数传递给ENTRYPOINT指定的程序
13.CMD 和 ENTRYPOINT 同时存在 Dockerfile 中
1、CMD的值会当做参数传递给ENTRYPOINT
14.USER:指定运行 image 时和 Dockerfile 中任何 RUN、CMD、ENTRYPOINT 指令指定的程序的用户
1、使用用户名或者UID
15.HEALTHCHECK:健康检查 , 定义一个命令用于检查主进程工作状态是否健康
15.1、HEALTHCHECK参数
16.SHELL:指定运行 RUN、CMD、ENTRYPOINT 的 shell 程序
17.OPSIGNAL:给主进程发送信号
18.ARG:docker build 过程中的参数
18.1、定义pyton镜像作者 , 通过参数传入
19.ONBUILD:用于在 Dockerfile 中定义一个触发器
【三星|Docker 大热,还不了解 Dockerfile 你就OUT啦~】19.1、Dockerfile1中加一个ONBUILD add file , 当docker build -t=testpython Dockerfile1的时候ONBUILD指令不会被执行Dockerfile2中FROM testpython(Dockerfile1构建后生成的镜像) , 当运行docker build -t=test Dockerfile2的时候Dockerfile1中的ONBUILD add file会被执行
- 显卡|三星GalaxyS22与GalaxyS21详细对比:有何区别?
- 三星|三星变了?S22系列新机采用X轴线性马达,国产供应商提供配件
- 刘海屏|iPhone刘海屏,三星也开始学了,还有点不伦不类!
- 三星手机|三星手机的销量可以做到全球第一,为何在我们国内却进不了前五名?
- 三星|国产屏和三星屏:优势从一边倒,逐渐演变成强强对决!
- 三星|号称最强的安卓手机,三星 S22 的跑分依然被 iPhone 13 碾压...
- 三星|北京冬奥有多壕?每位运动员都有“三星大礼包”,为何不用华为?
- realme|三星、苹果远远落后,国产黑马量产新技术,150W快充刷新行业纪录
- 三星|从1999元跌至1319元,6400万四摄+8GB,支持1TB储存容量扩展
- 显卡|因为这5个原因,我决定购买三星GalaxyS22Ultra