Docker 基础面试题 – 你能回答多少?

什么是Docker?

Docker 是一个基于 Go 编程语言开发的开源应用容器引擎,遵循 Apache2.0 协议开源。它可以让企业创建、测试和部署各种应用程序和软件包到被称为容器的单元中,轻松创建一个轻量级、便携、自给自足的容器,用于在单个主机上运行任何应用程序。

Docker的常见用途是什么?

Docker 的优势是什么?

Docker 能够将应用程序与基础设施分离,使您能够快速交付软件。通过利用 Docker 快速交付、测试和部署代码的方法,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

  • 灵活性:即使是最复杂的应用程序也可以被容器化。
  • 轻量级:容器利用并共享主机内核。
  • 不可变性:容器镜像是不可变的。
  • 可移植性:可以在本地构建,部署到云端,并在任何地方运行。
  • 可伸缩性:可以根据需要添加和分发容器副本。
  • 可堆叠:服务可以在垂直方向上堆叠并立即启动。

Docker 和虚拟机之间的区别是什么?

虚拟机通过添加 Hypervisor 层来虚拟化虚拟硬件,例如网络卡、内存和 CPU,然后在其上构建虚拟机。每个虚拟机都有自己的系统内核。

另一方面,Docker 容器通过隔离(命名空间)来隔离文件系统、进程、设备和网络等资源,然后通过 cgroup 控制权限、CPU 资源等,使容器之间不会互相影响。

容器消耗的资源更少。在同一主机下,可以创建的容器数量比虚拟机多。 然而,虚拟机的安全性略高于容器,Docker 容器与主机共享内核和文件系统,更容易受到其他容器的影响,从而影响主机的安全性。

请解释 Docker 的三个核心特性。

  • 镜像(Image):Docker 镜像是创建容器的基础,类似于虚拟机的快照,并且可以理解为 Docker 容器引擎的只读模板。
  • 容器(Container):从镜像创建的正在运行的实例,可以启动、停止和删除。每个创建的容器都是隔离的,互相看不到,以确保平台的安全性。
  • 仓库(Registry):Docker 仓库是具有相同名称但具有不同标记的不同 Docker 镜像的集合。标记就像 Docker 镜像的版本,例如 v1、v2、v2.1 等。

如何修改Docker的存储位置?

默认情况下,Docker的存储位置是:/var/lib/docker。要更新默认的存储位置,需要停止Docker进程:

$ systemctl stop docker

更新/etc/docker/daemon.json

配置文件如下:

{
  "data-root": "/new/docker/storage/location"
}

然后重新启动守护进程:

$ systemctl daemon-reload
$ systemctl start docker

常用的Docker命令有哪些?

如何创建一个 Nginx 容器?

使用docker run命令:

$ docker run -d --name my-nginx -p 8080:80 nginx:latest
1d24755e09ffdacc017f6a1d703bc098d24e56f3dc2cabe069b2551c2074ccd7

相关:如何在 Docker 容器中运行 Nginx https://www.linuxmi.com/docker-run-nginx.html

如何进入正在运行的容器?

可以使用docker exec命令,例如:

$ docker exec -it my-nginx bash

什么是 Docker 容器的运行过程?

  • 检查本地是否存在指定的镜像。当镜像不存在时,将从公共仓库下载;
  • 使用镜像创建并启动容器; 为容器分配文件系统,在只读的镜像层外面挂载一个读写层;
  • 从主机配置网络桥接(默认模式);
  • 为容器分配地址池中的 IP 地址;
  • 执行用户指定的应用程序,执行后容器终止。

Docker 网络模式有哪些?

  • host:使用 host 网络模式,容器的网络栈与 Docker 主机不隔离(容器共享主机的网络命名空间),容器不会被分配自己的 IP 地址。
  • bridge:它使用软件桥接,允许连接到同一桥接网络的容器进行通信,同时提供与未连接到该桥接网络的容器的隔离。
  • container:这种模式指定新创建的容器与现有容器共享网络命名空间,而不是与主机共享。
  • none:使用 none 模式,Docker 容器拥有自己的网络命名空间,但不为 Docker 容器进行任何网络配置。也就是说,该 Docker 容器没有网络接口卡、IP、路由和其他信息。在这种网络模式下,容器只有 lo 回环网络,没有其他网络接口卡。无法连接到此类型的网络,但封闭的网络可以确保容器的安全性。

什么是Docker数据卷?

数据卷是容器中使用的特殊目录,位于容器内。可以将主机的目录挂载在数据卷上,并且可以立即看到数据卷的修改操作,更新后的数据不会影响镜像,从而实现主机和容器之间数据的迁移。数据卷的使用类似于Linux下的目录挂载操作。

如果需要在容器之间共享一些数据,则最简单的方法是使用数据卷容器。数据卷容器是一个普通的容器,为其他容器提供数据卷进行挂载和使用。

CMD和EntryPoint之间有什么区别?

它们都指定在容器启动时执行的程序,但有以下区别:

当docker run命令中指定参数时,Docker Daemon 会忽略 CMD 命令。例如:

$ docker run my-image echo Hello 

将替换 Dockerfile 中的 CMD 行。

EntryPoint 指令不会被忽略,而是被视为命令的参数附加在命令行后面。例如:

# Dockerfile
From ubuntu:20.04ENTRYPOINT
["echo", "Hello From ENTRYPOINT"]
$ docker build . -t my-ubuntu
$ docker run my-ubuntu
Hello From ENTRYPOINT

如果带以下参数运行:

$ docker run my-ubuntu echo hello Again
Hello From ENTRYPOINT echo hello Again

ADD 和 COPY 有什么区别?

  • ADD:从 <src> 处复制新文件、目录或远程URL,并将它们添加到 <dest> 处的镜像文件系统中。它也可以进行本地 tar 提取。
  • COPY:将 <src> 中的新文件或目录复制到容器的文件系统中路径为 <dest> 处。

总的来说,COPY 更透明,因此通常更受欢迎。因为镜像大小很重要,强烈不建议使用 ADD 从远程URL获取软件包,而应使用 curl 或 wget。

OK,这就是本文的内容。如果还有什么疑问,请在下面的评论区告诉我们。

相关:

The post Docker 基础面试题 – 你能回答多少? first appeared on Linux迷.

版权声明:
作者:admin
链接:https://www.techfm.club/p/41414.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>