Docker容器镜像:
1)docker client 向docker daemon发起创建容器的请求;
2)docker daemon查找本地有客户端需要的镜像;
3)如无,docker daemon则到容器的镜像仓库中下载客户端需要的镜像;
4)拿到容器镜像后启动容器。
容器镜像介绍:
Docker镜像就是一组只读的目录,或者叫只读的Docker容器模板。镜像中含有一个Docker容器运行所需要的文件系统,所以我们说Docker镜像是启动一个Docker容器的基础。
可以将Docker镜像看成是Docker容器的静态时,也可将Docker容器看成是Docker镜像的运行时。
从Docker的官方文档来看,Docker容器的定义和Docker镜像的定义几乎是相同的,Docker容器和Docker镜像的区别主要在于Docker容器多出了一个可写层。
容器中的进程就运行在这个可写层,这个可写层有两个状态,即运行态和退出态。当我们dockerrun运行容器后,docker容器就进入了运行态,当我们停止正在运行的容器时,docker容器就进入了退出态。
当我们将容器从运行态转为退出态的时候,期间发生的变更都回写入到容器的文件系统中(需要注意的是,此处不是写入到docker镜像中。)
联合文件系统(UnionFS)是一种轻量级的高性能分层文件系统。它支持将文件系统中的修改信息作为一次提交,并层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,应用看到的是挂载的最终效果。
联合文件系统是实现Docker镜像的技术基础。Docker镜像可以通过分层来进行继承。例如:用户基于基础镜像(用来生成其他镜像的基础,往往没有父镜像)来制作各种不同的应用镜像。这些镜像共享同一个基础镜像层,提高了存储效率。此外,当用户改变了一个Docker镜像(比如升级程序到新的版本),则会创建一个新的层layer,因此,用户不用替换整个原镜像或者重新建立,只需要添加新层即可。用户分发镜像的时候,也只需要分发被改动的新层内容(增量部分)。这让Docker的镜像管理变得十分轻量级和快速。
基础镜像支持tomcat应用的运行。
容器镜像是用来启动容器的,容器镜像就是文件系统,将文件系统进行分层管理,通过联合文件系统进行分层叠加。在可写层来安装新的软件。
基础镜像:
1)部署一台主机,最小化软件安装操作系统
2)把最小化软件安装操作系统进行打包,打包操作系统的根目录
排除/proc及/sys
tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos7u6.tar /
说明:
1、 --numeric-owner: 以UID和GID代替用户名和组名 (numeric:数字、分数)因为有些用户的UID和GID不一样。文件的属主和属组全部替换成数字。
2、--exclude=/proc(给每个进程创建文件夹,文件描述符相关信息) --exclude=/sys(内核程序使用的目录)在新的docker镜像不包括上述目录
3、-cvf:压缩选项
4、centos7u6.tar为目标文件
5、/ 代表从根开始
3)把获取的根打包文件导入到Docker Host中。这样就得到了基础镜像。
docker import centos7u6.tar centos7u6:latest
[root@vm1 ~]# docker import --helpUsage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]Import the contents from a tarball to create a filesystem imageAliases:docker image import, docker importOptions:-c, --change list Apply Dockerfile instruction to the created image-m, --message string Set commit message for imported image--platform string Set platform if server is multi-platform capable
[root@vm1 ~]#
再次说明:
Usage:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
导入的过程中,给镜像起名字加版本。
import和Export,save和load都是成对出现的。
4)检查:
docker imagesdocker image ls
通过这个试验,我们看到镜像是什么,是文件系统。
5)拿基础镜像来启动容器:
docker run -it --name c1000 centos7u6:latest /bin/bash
在容器中,我们进入到/proc中,看到的内容就是容器中的进程。
应用镜像制作:
应用镜像的概念:指应用程序运行的环境。
基础镜像,安装apache应用,打包成一个应用镜像,启动容器的时候,再也不用安装apache,只要把网页的内容放到目录中。程序员不用安装任何软件,只要拿到应用镜像,他们就获得了应用程序的运行的环境。应用镜像,运行起来就可以了。
只要应用镜像制作出来,就不需要再做什么事情了。
# 在docker容器中安装apache,使用的是容器的文件系统
yum install -y httpd# 安装的过程中,可能会出现失败的情况,使用如下命令可以解决
yum clean all
然后是让这个容器变成一个镜像:
之前,我们学过export和import命令,先将容器打包成一个tar文件,然后再将tar包导入,配置容器名称和版本。
使用commit命令对正在运行的容器提交一个应用镜像:
[root@vm1 ~]# docker commit --helpUsage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]Create a new image from a container's changesAliases:docker container commit, docker commitOptions:-a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")-c, --change list Apply Dockerfile instruction to the created image-m, --message string Commit message-p, --pause Pause container during commit (default true)
[root@vm1 ~]#
说明:
1)从一个容器的改变创建提交成一个容器的镜像。
2)-p:把容器暂停的状态打包成镜像,默认就是开启的。
3)-m:提交备注信息
[root@vm1 ~]# docker commit c105 centos7u6-httpd:v1
sha256:4090500d5d7aeebf23d9fcb93789b7c13cfa39c94bf44513f168d460c560a6c4
[root@vm1 ~]#
[root@vm1 ~]#
[root@vm1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7u6-httpd v1 4090500d5d7a 11 seconds ago 280MB
centos-httpd v1 a769afc16a9e 46 hours ago 351MB
centos latest 5d0da3dc9764 21 months ago 231MB
[root@vm1 ~]#
centos是基础镜像。
centos7u6-httpd是应用空间。
从SIZE我们可以看到SIZE在扩大。
然后是使用应用镜像:
docker run it centos7u6-httpd:v1 /bin/bash
echo "ttt" >> /var/www/html/index.html
httpd -k start
curl http://localhost
那学到这个地方就是一个关键点。
我们甚至可以进一步,把网页的内容页放到容器中,然后commit成镜像。
那么以后就使用这个镜像启动容器,非常快速地运行。非常方便。