1. Docker镜像和Docker容器:
Docker镜像实际上是一系列的文件系统,通常的Linux系统一般是两层文件系统,bootfs和rootfs,bootfs就是bootloader和kernel,系统启动先加载bootfs,加载完成内核起来后,bootfs被卸载,rootfs被挂载,并运行程序,rootfs可以是多种不同的发行版,比如Fedora,Ubuntu。
Docker镜像有多层FS组成,最底层是bootfs,第二层是rootfs,更上面还有其他文件系统,Docker的文件系统是只读的,加载完rootfs后,Docker可以加载更多的上层只读文件系统,最终这些文件系统会被放到一起,从外面看,只有一个文件系统。这种文件系统是叠加的,彼此独立,Docker的这种文件系统被称为镜像。也就是说,Docker的镜像可以放在另一个镜像上面。并且镜像是只读的,要想对镜像数据操作,Docker容器必须先初始化一个可读写的文件系统,然后将下面的只读镜像加载到可读写文件系统,然后执行读写,而底层的只读镜像不会变,这就是“写时复制”。因此一个容器实际上就是Docker生成了一个读写层和其中的配置数据,加上底层的只读镜像组成的。容器可以修改,但是镜像不可修改。这样就可以保证,从同一个镜像中生成的容器各自独立,互不干扰。
2. Docker镜像标签:
Docker镜像存放在Docker仓库中,一个Docker仓库可以存放很多个镜像,为了区别同一个仓库中的不同镜像,可以为不同的镜像打上不同的标签。比如为了区别Ubuntu仓库的不同镜像,就可以Ubuntu:14.04打上标签。用pull拉取的时候,也可以加上标签拉取,特别的,官方仓库拉取的时候,不加标签,默认为拉取最新的镜像,标签为latest。
3. Docker镜像的一些操作命令:
docker images 列出本地存在的镜像;
docker pull img_name:img_tag 从docker hub上拉名为img_name,标签为img_tag的镜像;
docker search xxxx 从dockerhub上查找镜像;
4. 创建Docker镜像:
一般很少从零构建镜像,都是从已经发布的镜像上构建新镜像。主要有两种方法,
1. 使用docker commit命令
2. 使用Dockerfile文件和docker build命令
介绍第一种(第一种最简单,但是官方更推荐第二种):
先运行一个容器:
dcoker start con_name
docker attach con_name
然后在容器中安装一个软件,安装一个vim
apt-get install vim
构建镜像一定要停止容器,退出容器,停止容器,构建这个镜像。使用docker stop con_name命令。
然后可以使用docker commit构建容器,docker commit提交的是修改,用过git的一定不会陌生git commit。
docker commit -a your_name -m message con_name username/reps:tag
其中-a指定作者,-m指定提交信息,username是用户名,reps是仓库名,tag是标签。如图:
第一个就是刚刚创建的镜像。
接下来就可以使用docker run命令,用刚刚创建的镜像创建并启动一个新的容器了
再用docker ps -a查看一下,第一个容器是刚刚创建的容器,用的是刚刚构建的镜像。