01-关于镜像的笔记

镜像的操作:

  • docker pull 拉取远程仓库的镜像到本地
  • docker tag 重命名镜像
  • docker image 查看本地存在的镜像
  • docker rmi 删除无用镜像
  • 构建镜像:
    • docker build 基于dockerfile构建镜像
    • docker commit 基于已运行的容器提交为镜像

构建镜像的方式:

1,使用docker commit

  说几个选项的含义:

选项选项简写说明
–detach -d 在后台运行容器,并且打印容器id。
–interactive -i 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。
–tty -t 分配一个伪tty,一般与 -i 连用。

  

  -it其实就是分配一个连接的伪tty;

  正题:以busybox镜像为例,从busybox容器中提交为镜像

  docker run --rm --name=busybox -it busybox  sh  创建一个busybox容器并进入

  

  touch hello.sh && echo "echo \"hello\"" > hello.sh && chmod +x hello.sh  在容器里创建一个hello脚本

      

  现在新开一个窗口:

  使用docker commit busybox busybox:hello 即将当前容器提交为了一个hello镜像

      

2,基于dockerfile的方式:

  dockerfile常见指令

  FROM:Dockerfile 除了注释第一行必须是 FROM ,FROM 后面跟镜像名称,代表我们要基于哪个基础镜像构建我们的容器。
  RUN:RUN 后面跟一个具体的命令,类似于 Linux 命令行执行命令。
  ADD: 拷贝本机文件或者远程文件到镜像内
  COPY: 拷贝本机文件到镜像内
  USER: 指定容器启动的用户
  ENTRYPOINT: 容器的启动命令
  CMD: CMD 为 ENTRYPOINT 指令提供默认参数,也可以单独使用 CMD 指定容器启动参数
  ENV: 指定容器运行时的环境变量,格式为 key=value
  ARG: 定义外部变量,构建镜像时可以使用 build-arg = 的格式传递参数用于构建
  EXPOSE: 指定容器监听的端口,格式为 [port]/tcp 或者 [port]/udp
  WORKDIR: 为 Dockerfile 中跟在其后的所有 RUN、CMD、ENTRYPOINT、COPY 和 ADD 命令设置工作目录。

  Dockerfile 的每一行命令,都生成了一个镜像层,每一层的 diff 夹下只存放了增量数据,这样分层使得docker镜像非常轻量。每一层根据镜像的内容都有一个唯一的 ID 值,当不同的镜像之间有相同的镜像层时,便可以实现不同的镜像之间共享镜像层的效果。

镜像的实现原理:
镜像是由一系列的镜像层(layer )组成,每一层代表了镜像构建过程中的一次提交,当我们需要修改镜像内的某个文件时,只需要在当前镜像层的基础上新建一个镜像层,并且只存放修改过的文件内容。分层结构使得镜像间共享镜像层变得非常简单和方便。

清理容器多余数据相关的命令有两条,分别是:docker image prune -af 仅仅清除没有被容器使用的镜像文件docker system prune -f 清除多余的数据,包括停止的容器、多余的镜像、未被使用的volume等等。

posted @   善辰  阅读(95)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示