Docker的一些问题

问题一:容器与虚拟机之间的区别

根本性区别:容器与宿主机共享相同的内核

docker仅仅隔离单一进程(或者一组进程,这取决去构建镜像的方式),并且所有的容器都运行在相同的宿主机系统上。由于其隔离型应用在内核级别,所以相对于虚拟机而言,容器的运行并不会导致宿主机上的较大开销。当一个容器运行时,所选的一个或一组进程仍然会运行在相同的宿主机上,而不会虚拟化或模拟任何东西。

相比之下,虚拟机运行时,虚拟机管理程序会虚拟化整个系统(从cpu到ram)。为了支撑虚拟机的系统,需要克隆或虚拟化一个新的操作系统。所以说,虚拟化系统就是运行在一台物理计算机中的完整虚拟化计算机。所以,虚拟化的资源开销较大。

二者相比之下,使用容器对应用程序共享宿主机的os内核则意味着免除了额外的os开销。得到的好处就是显著提升了性能,还提高了资源利用率并将计算能力的消耗浪费降到最低。

问题二:关于层

层是指应用于docker镜像的一项修改,通常一个基础镜像产生变化时就会创建一个层。当docker构建该镜像时,每一个层都会堆叠在下一层之上并通过union文件系统合并成一个单个层。这些层都是使用sha256哈希值来唯一区分,这样对于重用或缓存会方便很多。

问题三:关于docker容器

当一个docker镜像在宿主机计算机中运行时,他会产生一个具有专用命名空间的进程,即docker容器。docker容器与docker镜像的区别在于,是否存在被称为容器层的一个浅薄的读/写层。对于容器文件系统的任何变更,比如写入新文件,删除文件等,都是在可写容器层上完成。

当容器运行时,修改等操作都在容器层进行。当容器停止时或删掉时,容器层并不会被保存。所以如果不进行数据卷设置,有状态的应用程序和那些需要持久化存储的应用程序就不推荐在容器中运行。

问题四:数据写入容器

要将数据写入容器的可写层中,也需要一个存储驱动器来管理文件系统。存储驱动器提供了文件系统的抽象,可用于持久化所做的变更。而这一操作与容器的轻量化相悖,会降低性能。

解决:

将docker容器中的数据挂载到宿主机上:卷、绑定挂载以及tmpfs卷tmpfs卷仅存储在宿主机系统的内存中,而绑定和卷是被存储在宿主机文件系统中。

问题五:docker注册服务器

docker注册服务器就是存储docker镜像的地方。除去docker hub还有google container registry

以及amazon elastic container registry 最后有jfrog artifactory 。推送镜像可以选择私有/共有。私有注册服务器会阻止镜像公共访问。

问题六:docker引擎

docker引擎是docker的核心部分。docker引擎是一种客户端-服务器应用程序,它提供了平台、运行时、已经用于构建和管理docker镜像、docker容器等的工具。docker引擎提供以下组件:

  • docker守护程序
  • docker CLI
  • docker API

1、docker守护进程

  docker 守护进程是一个服务,他运行在宿主机计算机的后台中,主要用途是处理大多数docker命令所产生的繁重任务。守护程序会监听创建和管理docker对象(如容器、网络和卷)的API请求。docker守护进程还可以与用于管理和监控docker容器的其他守护程序进行通信。

2、docker CLI

  docker CLI是我们和docker交互的主要方式,简单来说就是docker命令。类似于docker build 、docker pull 、docker run 等。

3、docker API

docker还提供API用于和docker引擎进行交互,在应用程序中创建和管理容器会比较好用。

问题七:指定docker注册服务器。

例如注册服务器被托管在docker-private.registry上并且通过1337端口来提供,那么命令如下:

docker pull docker-private.registry:1337/nginx

问题八:dockerfile构建上下文

构建上下文是特定路径或url处所提供的一个或一组文件。构建上下文可以是本地的,也可以是远程的。build命令会将上下文中设置为所提供的路径或url,将文件上传到docker守护进程并且允许该守护进程构建镜像。

构建上下文期间将所在目录的文件排除在外。即创建.dockerignore文件,并将需要排除的文件写入。

问题九:docker自动重启

    Docker通过重启策略提供容器重启功能。在创建容器或者docker-compose中适用--restart 标识选项。

    可以执行以下操作:

  • 永不重启(默认)--restart=no
  • 检测到故障时尝试重启   --restart=on-failure
  • 检测到故障时尝试在预定时间内重启
  • 无论情况如何,始终重启。 --restart=always

       Docker并不能总是立即重启容器,如果将一个打印命令的容器设置为始终重启,那么这个容器除了重启其他什么也做不了。Docker可以采用指数退让策略来对重启策略来对重启尝试进行计时。

      退让策略决定了两次连续的重启之间应该等待的时间。指数退让策略的作用类似于每一次重启等待的时间是上一次等待时间的两倍。将初始等待时间设定为比较短的指数退让策略是一种常见的服务恢复技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值