Docker的Image与Container
Image的简介
Image其实就是一个文件系统,它里面是一层层文件系统,叫做Union FS(联合文件系统)。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。虚拟文件系统的目录结构就像普通 linux 的目录结构一样,docker 通过这些文件再加上宿主机的内核提供了一个 linux 的虚拟环境。每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的。构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
创建Image的两种方式
-
基于image创建container后,如果在container做了一些变化,l 例如安装了某个软件,可以将这些改变,commit成一个新的image,也可以简写为docker commit
-
交互运行一个centos实例,给里面装一个lrzsz
[root@node01 ~]# docker run -it centos [root@2ea4f2b475ca /]# yum -y install lrzsz
-
装完退出
[root@2ea4f2b475ca /]# exit
-
查看修改后的容器
[root@node01 ~]# docker container ls -a
-
将这个新的容器,打包成一个新的镜像,生成新的镜像
[root@node01 ~]# docker commit 2ea4f2b475ca guhaohao/centos-lrzsz
-
查看镜像
docker image ls
-
可以根据镜像id,查看到镜像分层信息
docker history 3b3d40f4a2b5
-
-
使用Dockerfile,通过build制作image,可以简写为docker build
-
定义Dockerfile文件
vi Dockerfile
-
写入一下内容
FROM centos RUN yum -y install lrzsz
-
编译镜像
[root@node01 ~]# docker build -t guhaohao/centos-lrzsz2 .
-
可以查看到多出了个镜像
[root@node01 ~]# docker image ls
-
Container的简介
container可以理解为运行时的实例。
要有Container首先要有Image,也就是说Container是通过image创建的。
Container是在原先的Image之上新加的一层,称作Container layer,这一层是可读可写的(Image是只读的)。
在面向对象的编程语言中,有类跟对象的概念。类是抽象的,对象是类的具体实现。Image跟Container可以类比面向对象中的类跟对象,Image就相当于抽象的类,Container就相当于具体实例化的对象。
Image和Container的区别
Image负责APP的存储和分发,Container负责运行APP
Container的使用
-
查看所有运行过的container容器
[root@node01 ~]# docker container ls -a
-
可以交互运行容器
[root@node01 ~]# docker run -it centos
-
查看运行时的容器
[root@node01 ~]# docker container ls
-
删除某个容器
[root@node01 ~]# docker container rm 2ea4f2b475ca
-
删除全部容器
[root@node01 ~]# docker rm $(docker container ls -aq)
-
删除没有在运行的容器
[root@node01 ~]# docker rm $(docker container ls -f "status=exited" -q)