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,这是因为很多镜像复用了同一个底层的镜像,起到了节省磁盘空间的作用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】