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,这是因为很多镜像复用了同一个底层的镜像,起到了节省磁盘空间的作用。

浙公网安备 33010602011771号