docker期末冲刺
单选题
正确的说法是C. 私有仓库比较适合单位内部的合作场景。
解析: A. 在任何情况下,都应该搭建自己的私有仓库:这个说法不正确。是否需要搭建私有仓库取决于具体的需求和情况。在某些情况下,使用公共的 Docker Hub 或其他公共仓库已经能够满足需求,无需搭建私有仓库。 B. 私有仓库可以完全替代 Docker Hub:这个说法不正确。私有仓库主要用于存储和管理私有镜像,但 Docker Hub 提供了更广泛的功能和公共镜像资源,私有仓库无法完全替代 Docker Hub。 C. 私有仓库比较适合单位内部的合作场景:这个说法是正确的。私有仓库可以在单位内部提供一个集中的镜像存储和共享平台,方便团队成员之间的合作和镜像的管理。 D. 私有仓库必须先登录才能下载镜像:这个说法不正确。私有仓库可以设置访问权限,但并不是所有私有仓库都需要登录才能下载镜像,这取决于私有仓库的配置和访问控制设置。
D. 卷没有绕过联合文件系统,其读写性能不如绑定挂载。
正确的说法是D. 卷没有绕过联合文件系统,其读写性能不如绑定挂载。
解析: A. 卷是在 Docker 中持久化数据存储的最佳方式:这个说法是正确的。卷是一种特殊的 Docker 功能,它允许将数据存储到独立于容器的持久化存储区域中,使得数据在容器销毁和重新创建时仍然可访问。使用卷是常见的持久化数据存储方式。 B. 容器的外部存储位于 Docker 主机本地存储区域之外:这个说法是正确的。外部存储可以是 Docker 主机上的文件系统、网络存储或云存储等,它们通常位于 Docker 主机本地存储区域之外。 C. 绑定挂载限制容器的可移植性:这个说法是正确的。绑定挂载将主机上的目录或文件直接映射到容器中,使容器依赖于主机的特定路径和文件结构,从而降低了容器的可移植性。 D. 卷没有绕过联合文件系统,其读写性能不如绑定挂载:这个说法是不正确的。卷是通过在容器内部创建一个指向主机上的目录或文件的符号链接来实现的,并且与绑定挂载相比,卷的读写性能通常是相近的,不会明显降低。
正确的描述是C. 一个镜像可以创建多个容器。
解析: A. 没有镜像,也可以创建容器:这个说法是不正确的。在 Docker 中,容器是基于镜像创建的,镜像包含了容器运行所需的文件系统和应用程序等内容。没有可用的镜像,是无法创建容器的。 B. 一个容器可以来自多个镜像:这个说法是不正确的。每个容器只能基于一个镜像创建。容器是镜像的一个实例,它运行在镜像提供的文件系统和环境中。 C. 一个镜像可以创建多个容器:这个说法是正确的。通过使用同一个镜像,可以创建多个相互独立的容器实例,每个容器都运行在自己的隔离环境中。 D. 容器不能生成镜像:这个说法是不正确的。在容器运行时,你可以对容器所做的更改(例如安装软件、修改文件等)可以通过 docker commit
命令生成一个新的镜像,以便将这些更改保存下来并复用。因此,容器可以生成新的镜像。
正确的说法是A. 使用不带任何选项的 docker ps
命令可以列出本地主机上的全部容器。
解析: A. 使用不带任何选项的 docker ps
命令可以列出本地主机上的全部容器:这个说法是正确的。docker ps
命令用于列出当前正在运行的容器。如果不提供选项,它会列出正在运行的容器的基本信息。
B. 使用 docker rm -f
命令删除正在运行的容器:这个说法是不正确的。docker rm -f
命令用于删除指定的容器,但是要删除正在运行的容器,需要先停止容器,然后再删除。
C. 使用 docker start
命令可以创建并启动一个新的容器:这个说法是不正确的。docker start
命令用于启动已经创建但处于停止状态的容器,而不是创建新的容器。
D. 使用 docker attach
命令可以连接未运行的容器:这个说法是不正确的。docker attach
命令用于连接到正在运行的容器并查看其输出。它并不能连接到未运行的容器。要连接到未运行的容器,可以使用 docker exec -it
命令。
填空
1.使用“docker rm -f 容器ID”可以强制删除一个容器。
2.在Docker-Compose 中,使用version指令定义版本号。
3.数据卷绑定可以实现宿主机和容器的目录绑定。
4.启动 Docker Compose 服务的命令是 docker-compose up
。
5.停止 Docker Compose 服务的命令是 docker-compose down
。
6.使用 HTTPS 访问模式可以使数据传输更加安全。
?7.在宿主机中检查客器的 IP 地址,可以使用 Docker inspect
命令加上容器 ID。
8.绑定一个文件到容器通常用在修改容器应用的配置。
9.Bind 数据绑定可以实现宿主机到容器的目录绑定。
10.私有仓库更适合企业内部合作使用。
11.平时在命令行下载镜像时,使用的是 Docker Hub 仓库。
12.桥接(Bridge)网络模式比较适合于容器间频繁通信的场景。
13.当宿主机目录为空、容器目录数据不为空时,使用数据卷绑定时,宿主机的目录将会被容器目录的数据填充。
14.Docker-Compose 的默认模板文件名称是 docker-compose.yml
。
?15.在宿主机中,检查容器的 IP 地址,可以使用 Docker inspect
命令加上容器 ID。
16.使用 Docker Hub 可以创建公有仓库和私有仓库。
17.面向对象编程中的”对象”类似于Docker中的”容器“,而面向对象编程中的”类”类似于Docker中的”镜像“。
18.Macvlan 技术实现了容器直接访问物理主机网络的功能。
19.主机(Host)网络模式没有网络栈,一般作为测试使用。
20.数据卷绑定后,容器的 Mounts 字段中 type 类型的值是 bind
。
判断题
正确
docker run 命令用于在 Docker 上启动容器,而启动容器的前提是需要一个基于镜像构建的容器实例。在运行 docker run 命令时,需要指定所要使用的镜像的名称或 ID。
例如,以下是一个使用 docker run 命令启动容器的示例:
1 | arduinoCopy code |
在上述命令中,<镜像名称或ID>
指代所要使用的镜像的名称或 ID。基于指定的镜像,docker run 命令会创建并运行相应的容器实例。
因此,docker run 命令确实需要基于一个镜像来启动容器,这个陈述是正确的。
正确
Docker Hub 是一个公开的 Docker 镜像仓库,它是由 Docker 公司提供的服务。Docker Hub 提供了一个集中存储、分享和管理 Docker 镜像的平台。
作为公开的仓库,Docker Hub 上的镜像可以被任何人访问和使用。开发者可以在 Docker Hub 上上传、下载和共享 Docker 镜像,从而方便地获取和使用各种应用程序、服务和工具的容器化版本。
除了公开的镜像,Docker Hub 还支持私有镜像仓库的功能。通过付费订阅,用户可以在 Docker Hub 上创建私有的镜像仓库,用于存储和管理自己的私有镜像,以便在内部使用或与特定用户共享。
因此,Docker Hub 是一个公开的 Docker 镜像仓库,为开发者提供了便捷的方式来共享、发现和获取各种 Docker 镜像。
正确
在不借助编排工具的情况下,Docker 支持在 Linux 系统上安装和运行多个 Docker 引擎。每个 Docker 引擎实例可以通过不同的配置和监听端口来运行,使它们能够独立地管理和运行容器。
通过在不同的目录下创建不同的 Docker 配置文件和运行 Docker 引擎时指定不同的配置文件路径,可以实现在同一台 Linux 系统上运行多个独立的 Docker 引擎实例。每个 Docker 引擎实例都将有自己的独立环境,包括网络、镜像、容器等。
这种能力使得在 Linux 系统上可以同时运行多个 Docker 引擎,方便进行不同环境或项目的隔离和管理。然而,需要注意确保每个 Docker 引擎实例的配置和资源之间不会发生冲突。
正确
Docker 支持在 Windows 和 macOS 系统上本地运行 Linux 容器。这得益于 Docker 的跨平台特性和容器化技术。
在 Windows 系统上,Docker Desktop 通过使用 Hyper-V 或 WSL 2(Windows Subsystem for Linux 2)技术,在本地提供了运行 Linux 容器的环境。这意味着你可以在 Windows 上使用 Docker 运行 Linux 镜像,并获得与在 Linux 环境中相似的容器体验。
同样地,在 macOS 系统上,Docker Desktop 使用了 Hypervisor Framework 和 xhyve 虚拟化技术,使得可以在 macOS 上本地运行 Linux 容器。
因此,无论是在 Windows 还是 macOS 系统上,Docker 都支持本地运行 Linux 容器,让开发人员能够在不同的操作系统上统一开发和部署容器化应用程序。
错误
在默认情况下,Docker 不支持容器间通过容器 ID 进行通信。每个容器都会被分配一个独立的网络命名空间和 IP 地址,并且它们彼此之间是隔离的。
要在 Docker 中实现容器间通信,有几种可选的方法:
- 使用容器名称:在创建容器时,可以为容器指定一个名称。通过使用容器名称,你可以在容器之间进行通信,而不需要直接使用容器 ID。你可以将容器名称用作主机名或服务地址来建立连接。
- 创建自定义网络:可以创建一个 Docker 网络,并将容器连接到该网络中。这样,容器可以通过容器名称或服务名称在网络上进行通信,而不需要使用容器 ID。
- 使用链接(Linking):尽管它已被弃用,但仍然可以使用链接机制来使一个容器与另一个容器建立连接并进行通信。通过链接,一个容器可以访问另一个容器的环境变量和网络连接信息。
综上所述,不使用自定义网络的情况下,Docker 并不直接支持通过容器 ID 进行容器间通信。需要使用其他方法来实现容器间的通信。
错误
Docker Compose 不仅仅是用于定义和运行单个容器的 YAML 文件,它是一个用于定义和管理多个容器应用的工具。
Docker Compose 使用 YAML 文件来定义一个应用程序由哪些服务(即容器)组成以及它们之间的关系和配置。通过编写一个 Compose 文件,你可以定义多个容器、它们的映像、端口映射、网络设置、环境变量等。
然后,你可以使用 Docker Compose 命令来启动、停止、重建和管理整个应用程序,而不仅仅是单个容器。
因此,Docker Compose 不仅限于单个容器,它提供了一种方便的方式来定义和管理多个容器的组合应用。
错误
Docker 容器默认情况下不会使用宿主机的网络,而是会创建自己独立的网络命名空间。每个容器都有自己的网络栈和 IP 地址,并与宿主机以及其他容器进行隔离。
当你在 Docker 中创建一个容器时,Docker 引擎会为该容器创建一个虚拟网络接口(veth pair),一个端口连接到容器内部的网络栈,另一个端口连接到宿主机的网络栈。这样,容器就能够通过宿主机进行网络通信,但容器的网络是独立的,并不直接使用宿主机的网络。
如果你需要容器与宿主机共享网络,可以使用 Docker 的网络模式,如 --network host
参数,这样容器就会直接使用宿主机的网络命名空间。
正确
Docker 支持容器直接挂载到宿主机文件系统。通过在容器创建时使用 -v
或 --volume
参数,可以将宿主机上的目录或文件挂载到容器的指定路径上。这使得容器可以直接访问和操作宿主机文件系统中的内容,方便数据共享和持久化存储。
正确
Namespace 的功能主要是进行访问隔离。通过使用命名空间,可以将进程或资源隔离到不同的命名空间中,从而实现对其访问的隔离。不同的命名空间可以提供不同的视图和环境,使得进程在各自的命名空间中运行时,相互之间无法感知或干扰对方的资源。这种隔离性对于实现容器化和虚拟化等技术非常重要。
简答题
1.什么是 Dockerfile?简述其用途。(10.0分)
2.说说 Docker 网络的几种类型,并简述其区别。(10.0分)
3.请简述Docker容器与虚拟机的区别?(10.0分)
4.Dockerfile分为几部分,每一部分是什么?(10.0分)
5.unshare 和 setns 的区别是(10.0分)
6.什么是“悬挂”镜像?(10.0分)
7.请问Docker编排工具共有几种类型,简述其功能和区别。(10.0分)
8.通过docker run 进去的容器后,请简述exit 和 “ctrl + p + q”两个退出容器命令的区别?(10.0分)
9.卸载docker 的命令有几步,每步分别是?(10.0分)
10.unshare 和 clone 的区别在于(10.0分)
11.请简述docker search、docker history、docker inspect的区别?(10.0分)