02-关于容器的知识

容器

  容器是基于镜像创建的可运行实例,且单独存在,一个镜像可以创建多个容器。

  运行容器实际是在容器内部创建该文件系统的读写副本。

容器生命周期

  状态转换:

  

容器操作

  1,创建启动容器

    docker create -it --name=busybox busybox

    基于最新的busybox镜像创建一个busybox容器

    docker start busybox 启动busybox容器

    docker run -it --name=busybox busybox 创建并启动

    docker run后台执行逻辑:检测本地是否存在busybox镜像,不存在则从docker hub拉取,使用busybox镜像创建并启动一个容器,分配文件系统,并且在镜像只读层外创建一个读写层,

    从docker ip池分配一个ip给容器,执行用户启动命令运行镜像。

  2,终止容器

    docker stop busybox  停止一个容器

  3,进入容器

    docker attach busybox attach命令在多个终端窗口使用时,所有的窗口会同步显示相同的内容,一个阻塞都阻塞。

    docker exec -it busybox sh 进入后会启动两个sh,一个是该窗口单独的sh,所以不会出现同步问题

  4,删除容器

    docker rm busybox  删除停止状态的容器

    docker rm -f busybox  删除正在运行中的容器

  5,导入导出容器(容器迁移)

    导出容器: docker export busybox > busybox.tar.gz 

    导入容器: docker import busybox.tar.gz busybox:test

  6,为什么容器的文件系统要设计成写时复制?

     镜像设计成分成结构可以节省很多存储空间,每个容器单独拷贝一份镜像文件会占用较多的磁盘空间。假设我有3个程序都用到了jdk镜像,那该jdk镜像就得复制3份。如果改成写时复制的话,只需要一份jdk镜像,新的内容写在顶层即可。比如用docker images查看镜像的时候,把所有镜像的SIZE加起来可能有十几个G,但是到目录下查看,实际上只有几个G,这是因为很多镜像复用了同一个底层的镜像,起到了节省磁盘空间的作用。

posted @   善辰  阅读(114)  评论(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】
点击右上角即可分享
微信分享提示