docker
docker commit
语法
docker commit 语法格式为:
代码语言:shell复制 docker commit [选项] <容器id或容器名> [<仓库名>[:<标签>]]
作用
可以通过docker commit命令将容器的存储层保存下来成为镜像,也即将通过原容器构建新的镜像。
注意事项
docker commit 会导致大量与实际目的无关的文件被添加进镜像中,导致镜像极为臃肿。此外,生成的镜像前容器中执行的命令是未知的,无法得知其具体情况,被称为黑箱镜像,难以进行后续维护。
Dockerfile 创建镜像
与makefile类似,可以通过执行Dockerfile中的指令,来构建目标镜像,由于Dockerfile中有详细的指令信息,可以通过查看指令来了解镜像的生成过程,便于维护和修改。
语法
代码语言:shell复制 // 第一行必须为 “FROM <镜像名>”,指定基础镜像。也可以为“FROM scratch”
//scratch 为虚拟概念,表示空白的镜像,“FROM scratch”意为不以任何镜像为基础,接下来的指令作为镜像第一层存在
FROM 镜像名
//Dockerfile指令
...
RUN 执行指令
在Dockerfile中,可以通过RUN指令来执行命令行命令
RUN指令有两种格式:
- shell格式:RUN <命令> 示例:
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
- exec 格式: RUN "可执行文件", "参数1", "参数2"(类似于函数调用)
注意事项:Dockerfile中的每一个指令都会建立一层,在其上执行命令,再commit修改,构成新的镜像,而镜像是有层数限制的,因此应尽量将目的相同的命令放在同一层执行。
示例:
代码语言:shell复制 FROM debian:stretch
RUN set -x; buildDeps='gcc libc6-dev make wget'
&& apt-get update
&& apt-get install -y $buildDeps
&& apt-get purge -y --auto-remove $buildDeps
值得注意的是,需要在RUN指令的最后进行清理工作,删除不必要的软件,清理apt缓存文件等,避免导致镜像过于臃肿。
构建镜像
可以通过docker build 命令进行镜像构建。
- 语法 docker build [选项] <上下文路径/URL/->示例: // -t nginx指定了镜像的最终名称 // docker build 默认上下文路径中名为Dockerfile的文件作为Dockerfile执行 docker build -t nginx:v3 .
- 上下文路径 上下文路径是指构建镜像的上下文路径,docker build 会将该路径下所有文件打包后发送给docker引擎进行镜像构建。 因此,Dockerfile中只能使用相对路径,应将需要的资源文件复制到上下文目录中,否则docker引擎无法获取到那些文件,构建镜像失败。
- 其他docker build 用法
- 使用Git repo构建
- 使用给定压缩包构建
- 从标准输入中读取Dockerfile构建
- 从标准输入中读取上下文压缩包构建