docker概念

虚拟机和docker的区别

1.虚拟机依赖于服务器的内存和cpu,docker依赖于操作系统。

2.虚拟机应用需要通过快照的形式保存,docker应用可通过镜像版本来保存。

3.虚拟机安装应用需要在操作系统之上,解决系统环境和依赖问题,比较复杂,docker安装应用基于dockerfile,通过发布 Dockerfile 来定义应用的环境和依赖,这样对于持续交付docker

docker engine 包含三组件(docker cli、docker reset api、docker daemon)

1.docker cli命令行接口,开发者可通过命令与docker daemon守护进程交互,管理容器、镜像、数据卷、网络。

2.docker reser api为应用程序接口,开发者可通过命令与docker daemon守护进程交互,指示后台相关操作。

3.docker demon为docker后台守护程序。监听 Docker API 的请求和管理 Docker 对象。

镜像和容器的基本操作及参数

-exec 退出容器时,不会让容器终止。

-d 后台运行容器

-i 命令示交互操作 -t是终端

-rm 删除一个或多个容器  -rmi 删除一个或多个镜像

docker image ls 和 docker system df区别

docker hub镜像大小经过压缩,docker image ls列表镜像体积总和并非是所占实际磁盘大小,因为docker镜像是多层镜像存储结构,可以继承和复用。因此不同的镜像可能使用相同的基础镜像,拥有共同的层,docker使用union fs,相同的层只保存一份。可通过docker system ls 查看镜像实际所占磁盘空间大小。

数据共享与持久化

数据卷绕过联合文件系统,有三种类型:数据卷、主机目录、数据卷容器

数据卷是docker创建存储卷,通常在/var/lib/docker/volumes 目录下,挂在到容器内。

主机目录直接寻找一个宿主机目录与容器目录挂载。

创建一个数据卷容器。

docker的网络模式

bridge模式

容器启动时,创建一个docker0虚拟网桥,相当于交换机。然后给容器分配一个docker0虚拟网桥子网,并在主机创建一对虚拟网卡,一端放在容器内,命名eth0,另一端放在主机,命名veth。

host模式

容器共享主机ip的网络模式

container模式

容器间共享一个ip的网络模式

node模式

容器不创建ip、网卡等配置

dockerfile制作镜像

docker build 时,不必要的文件不要send到docker demon守护程序内去构建。

一个容器只关注做一件事情

  • 在 1.10 以后,只有 RUN、COPY 和 ADD 指令会创建层,其他指令会创建临时的中间镜像,但是不会直接增加构建的镜像大小了。

构建缓存

镜像构建的过程中,docker根据dockerfile顺序执行每条指令,在执行每条指令前,docker会在缓存中查找已经存在可重用的镜像,如果有就使用现存镜像,不在重新创建,如果不想使用缓存构建,可以在docker build命令使用--no-cache=true选项。

如果在构建中使用了缓存,需要了解docker缓存遵循的基本规则:

1.从一个基础镜像开始(FROM指令指定),下一条指令将和该基础镜像的所有子镜像进行匹配,检查这些子镜像被创建时使用的指令是否和被检查的指令完全一样。如果不是,则缓存失效。

2.在大多数情况下,只需要简单对比dockerfile中的指令和子镜像,然而,有些指令需要更多的检查和解释。

3.copy和add,镜像中对应的文件内容也会检查。每个文件计算出校验值,这些文件的修改时间和最后查看时间不会纳入校验范围,这些校验值和已经存在的镜像文件校验值对比,如果文件有任何内容和元数据变化,缓存失效。

4.除了ADD和COPY指令,缓存匹配过程不会查看临时容器的文件来决定缓存是否匹配。当执行完run apt-get -y update指令后,容器内的文件更新,但dockerfile不会检查这些文件,这种清空下,只有指令字符串本身被用来匹配缓存。

5.一旦缓存失效,所有后续的dockerfile指令都会产生新的镜像,缓存不会被使用。

docker的工作原理是什么,讲一下

docker是一个c/s架构系统,docker daemon守护进程接收处理客户端请求,管理运行主机上的容器。

centos镜像几个G,但是docker centos镜像才几百兆,这是为什么?

centos镜像是一个完成的linux操作系统,包含系统内核、根文件系统,选装很多应用、服务、图像化界面。docker centos共享宿主机内核,很小的根文件系统和基本命令、程序、工具库。

讲一下容器的copy-on-write特性,修改容器里面的内容会修改镜像吗?

修改容器里面的内容不会修改镜像,镜像启动时,一个新的可写层加载到容器顶部,称为容器层。

容器的crud只会发生在镜像的可写层,不会修改实际的镜像。

添加文件时:在容器中创建文件时,新文件被添加到容器层中。
读取文件:,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后打开并读入内存。
修改文件:Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
删除文件:Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
 

简单描述一下Dockerfile的整个构建镜像过程

1.编写dockerfile,制作镜像所需程序包都放在同一个目录下。

2.docker bulid构建命令将整个目录打包发送给docker deamon守护进程,该进程负责顺序执行dockerfile的每条指令,这个过程会生成临时容器,在执行run copy add命令时,docker底层类似于执行docker commit命令将容器保存为镜像,然后删除临时容器。以此类推,一层层的构建镜像,运行临时容器安装软件,直到最后镜像构建成功。

docker build -t 镜像名:tag .  -f 指定默认dockerfile文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值