一、什么是Dockerfile
用来构建镜像文本文件,主要用来灵活方便构建自己需要的镜像
二、创建Dockerfile的步骤
通过dockerfile自定义的镜像后,使用 docker build 构建镜像
然后采用 docker save的命令打包
最后可以通过docker push 提交到私有镜像仓库或者 Docker Hub
总结,构建镜像三部曲
1、构建Dockerfile 文件
2、采用docker build 构建镜像
3、采用docker run 依据镜像运行容器
Dockerfile 需要注意的编写规范:
1、# 表示注释
2、命令必须要大写 最少要带一个参数
3、执行顺序从上到下
三、dockerfile 构建镜像的格式
docker build -t 镜像名:版本号 Dockerfile路径
实例:. 表示当前路径
docker build -t work:v1 .
四、Dockerfile的组成
主体内容四部分:基础镜像信息、维护者信息、镜像操作指令、和容器启动时执行指令
五、指令说明
FROM 指定构建新image是使用的基础image,必须是Dockerfile第一个有效指令,定义一个基础镜像 LABEL 附加到image之上的元数据,键值格式 ENV 键值对格式设定环境变量,可被其后的指令所调用,且基于新生成的image运行的Container中也会存在这些变量 RUN 以FROM中定义的image为基础环境运行指令命令,生成结果将作为新image的一个镜像层,并可由后续指令所使用。RUN后跟要执行的命令。 CMD 基于dockerfile生成的image运行的container时,CMD能够指定容器中默认运行的程序,因而其只应该定义一次。 ENTRYPOINT 类似cmd指令的功能,但不能被命令行指定要运行的应用程序覆盖,且与cmd共存时,cmd的内容将作为该指令中定义的程序的参数 WORKDIR 为RUN CMD ENTRPOINT COPY 和 ADD等指令设定工作目录 COPY 复制主机上或者前一阶段结果中文件或目录生成新的镜像层 ADD 与COPY指令相似,但ADD额外也支持使用URL指定的资源作为源文件 VOLUME 指定基于新生成的image运行Container时期望作为Volume使用的目录 EXPOSE 指定基于新生成的Image运行Container时期暴露的端口,但实际暴露与否取决于 docker run 命令选项 USER 为Dockerfile中该指令后面的RUN、CMD和ENTRYPOING指令中要运行的应用程序指定运行者身份UID,以及一个可选的GID ARG 定义专用于build过程中的变量,但仅对该指标之后的调用生效,其值可由命令行选项 --build-arg进行传递 SEHLL 为容器定义运行时使用的默认shell程序,Linux系统默认使用["/bin/sh","-c"] windows默认使用["cmd","/S","/C"]
六、指令说明
1、FROM
作用: 指定基础镜像,必须为第一个命令
格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
实例:
FROM mysql5.6
注:
tag 或 digest 是可选的,如果不指定,将使用latest版本的基础镜像
2、RUN
作用: 构建镜像时执行命令
格式:
RUN <command>
格式:
RUN ["executable", "param1", "param2"]
实例:
RUN ["executable", "param1", "param2"]
RUN apk update
RUN ["/etc/execfile", "arg1", "arg2"]
注意:
RUN 指令创建的中间镜像会被缓存,并在下次构建中使用。如果不想使用这些缓存镜像,
可以在构建时指定 --no-cache 参数,如:docker build --no-cache
七、构建一个Ubuntu Dockerfile
FROM ubuntu:22.04 RUN apt-get -y update && \ apt-get -y upgrade && \ apt-get instal -y && \ cmake git vim curl wget && \ net-tools openssh-server && \ apt-get install -y build-essential && \ apt-get install -y python3
docker build -t myubuntu:v1 .