2023学习日志

2023-07-31 14:35:57 浏览数 (2)

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 <命令> 示例:
代码语言:shell复制
    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构建
    • 标准输入中读取上下文压缩包构建

0 人点赞