Docker必看-面试基础

1.什么是Docker

Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。

2.Docker与虚拟机有何不同

Docker不是虚拟化方法。它依赖于实际实现基于容器的虚拟化或操作系统级虚拟化的其他工具。为此,Docker最初使用LXC驱动程序,然后移动到libcontainer现在重命名为runc。 Docker主要专注于在应用程序容器内自动部署应用程序。应用程序容器旨在打包和运行单个服务,而系统容器则设计为运行多个进程,如虚拟机。因此,Docker被视为容器化系统上的容器管理或应用程序部署工具。

  • A 容器不需要引导操作系统内核,因此可以在不到一秒的时间内创建容器。此功能使基于容器的虚拟化比其他虚拟化方法更加独特和可取。
  • B 由于基于容器的虚拟化为主机增加了很少或没有开销,因此基于容器的虚拟化具有接近本机的性能。
  • C 对于基于容器的虚拟化,与其他虚拟化不同,不需要其他软件。
  • D 主机上的所有容器共享主机的调度程序,从而节省了额外资源的需求。
  • E 与虚拟机映像相比,容器状态(Docker或LXC映像)的大小很小,因此容器映像很容易分发。
  • F 容器中的资源管理是通过cgroup实现的。Cgroups不允许容器消耗比分配给它们更多的资源。虽然主机的所有资源都在虚拟机中可见,但无法使用。这可以通过在容器和主机上同时运行top或htop来实现。所有环境的输出看起来都很相似

3.什么是Docker镜像

Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像。

4.什么是Docker容器

Docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。

5.Docker容器有几种状态

四种状态:运行、已暂停、重新启动、已退出。

6.DockerFile中最常见的指定是什么?

指令备注
FROM指定基础镜像
LABEL功能为镜像指定标签
RUN运行指定命令
CMD容器启动时要运行的命令

7.DockerFile中的命令COPY和ADD命令有什么区别?

COPY和ADD的区别时COPY的SRC只能是本地文件,其他用法一致。

8.Docker的常用命令?

命令备注
docker pull拉去或更新指定的镜像
docker push将镜像推送到远程仓库
docker rm删除容器
docker rmi删除镜像
docker images列出所有镜像
docker ps列出所有容器

9.容器与主机之间的数据拷贝命令?

Docker cp命令用于穷奇与主机之间的数据拷贝
主机到哦容器:docker cp /www 96f7f14e99ab:/www/
容器到主机:docker cp 96f7f14e99ab:/www /tmp

10.启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令?

Docker run -d -p --name nginx2 -v /home/nginx:/usr/share/nginx/html
nginx

11.如何使用 Docker 技术创建与环境无关的容器系统?

Docker 技术有三中主要的技术途径辅助完成此需求:

  1. 存储卷(Volumes)
  2. 环境变量(Environment variable)
  3. 注入 只读(Read-only)文件系统

12.有什么方法确定一个 Docker 容器运行状态

使用如下命令行命令确定一个 Docker 容器的运行状态

$ docker ps –a

这将列表形式输出运行在主机上的所有 Docker 容器及其运行状态。从这个列表中很容易找到想要的容器及其运行状态。

13. Docker Image 和 Docker Layer (层) 有什么不同

Image :一个 Docker Image 是由一系列 Docker 只读层(read-only Layer) 创建出来的。
Layer: 在 Dockerfile 配置文件中完成的一条配置指令,即表示一个 Docker 层(Layer)。如下 Dockerfile 文件包含 4 条指令,每条指令创建一个层(Layer)。

FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py

重点,每层只对其前一层进行一(某)些进化

14.如何停止所有正在运行的容器?

使用docker kill $(sudo docker ps -q)

15.如何清理批量后台停止的容器?

使用docker rm $(sudo docker ps -a -q)

16.如何临时退出一个正在交互的容器的终端,而不终止它?

按Ctrl+p,后按Ctrl+q,如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。

17.Docker 群(Swarm)是什么

Docker Swarm – Docker 群 – 是原生的 Docker 集群服务工具。它将一群 Docker 主机集成为单一一个虚拟 Docker 主机。利用一个 Docker 守护进程,通过标准的 Docker API 和任何完善的通讯工具,Docker Swarm 提供透明地将 Docker 主机扩散到多台主机上的服务。

18.在使用 Docker 技术的产品中如何监控其运行

  • Docker 在产品中提供如 运行统计和 Docker 事件的工具。可以通过这些工具命令获取
  • Docker 运行状况的统计信息或报告。
  • Docker stats : 通过指定的容器 id 获取其运行统计信息,可获得容器对 CPU,内存使用情况 等的统计信息,类似 Linux系统中的 top 命令。
  • Docker events :Docker 事件是一个命令,用于观察显示运行中的 Docker 一系列的行为活动。
  • 一般的 Docker 事件有:attach(关联),commit(提交),die(僵死),detach(取消关联),rename(改名),destory(销毁)等。也可使用多个选项对事件记录筛选找到想要 的事件信息。

19.什么是孤儿卷及如何删除它?

孤儿卷是未与任何容器关联的卷。在 Docker v。1.9 之前的版本中,删除这些孤儿卷存在很大问题。

20.在 Windows 系统上可以运行原生的 Docker 容器吗?

在 ‘Windows Server 2016’ 系统上, 你可以运行 Windows 的原生容器, 微软推出其映像是’Windows Nano Server’ , 一个轻量级的运行在容器中的 Windows 原生系统。 您可以在其中布署基于 .NET 的应用。
译注: 结合 Docker 的基本技术原理,参考后面的 问题 26 和 问题 27, 可推测, 微软在系统内核上开发了对 Docker 的支持, 支持其闭源系统的容器化虚拟技术。但译者认为,Windows 系统本就是闭源紧耦合的系统, 好像你在本机上不装 .NET 组件,各应用能很好运行似的。何必再弄个容器,浪费资源。这只是译者自己之孔见,想喷就喷! 另: Windows Server 2016 版本之后的都可支持这种原生 Docker 技术,如 Windows Server 2018 版。

21.在 非 Linux 操作系统平台上如何运行 Docker ?

容器化虚拟技术概念可能来源于,在 Linux 内核版本 2.6.24 上加入的对 命名空间(namespace) 的技术支持特性。 容器化进程加入其进程 ID 到其创建的每个进程上并且对每个进程中的系统级调用进行访问控制及审查。 其本身是由系统级调用 clone () 克隆出来的进程, 允许其创建属于自己命名空间的进程实例,而区别于之前的,归属与整个本机系统的进程实例。

如果上述在 Linux 系统内核上的技术实现成为可能, 那么明显的问题是如何在 非 Linux 系统上运行容器化的 Docker 。过去, Mac 和 Windows 系统上运行 Docker 容器都使用 Linux虚拟机(VMs) 技术, Docker 工具箱使用的容器运行在 Virtual Box 虚拟机上。 现在,最新的情况是,Windows 平台上使用的是 Hyper-V 产品技术,Mac 平台上使用的是Hypervisor.framework (框架)产品技术

参考链接
链接: https://www.cnblogs.com/xiaoyangjia/p/11388806.html
链接: https://www.wkcto.com/article/detail/662
链接: https://blog.youkuaiyun.com/qq_43286578/article/details/105160725
链接: https://learnku.com/server/t/42179
链接: https://www.jianshu.com/p/f11077d7b301

<think>好的,我现在需要整理一些关于Docker Compose的面试题。首先,我得回顾一下Docker Compose的基本概念常用命令,这样才能确保问题覆盖到关键点。用户提供的引用中有一些安装配置相关的命令,比如引用34提到了安装Docker Compose的方法,这可能涉及到版本选择权限设置的问题,可以作为面试题的一部分。 接下来,我应该考虑面试题的不同类型,比如基础概念、命令使用、配置文件编写、实际应用场景以及故障排除等。例如,Docker Compose与Dockerfile的区别是一个常见的基础问题,可以引用用户提到的docker-compose.yaml文件(引用2)来举例说明。另外,引用2中的docker restart命令可能涉及到容器管理的相关问题,比如如何通过Compose管理多个容器。 用户还提到了离线安装(引用4),这可能涉及到如何在无网络环境下部署Docker Compose,这也是一个实用的面试题方向。此外,引用3中的curl命令下载特定版本,可以引申到版本管理兼容性问题。 需要确保问题涵盖核心功能,比如服务定义、网络配置、数据卷挂载等。同时,高级主题如多环境配置、扩展性与CI/CD的集成也可能被问到。还要注意实际应用,比如如何通过Compose文件定义多个服务并设置依赖关系,这可以参考用户提供的docker-compose.yaml示例(引用2)。 最后,故障排除调试命令也是面试中常考的内容,比如查看日志、重建服务等。需要结合用户提供的命令如docker restart(引用2)docker-compose up(引用3)来设计相关问题。要确保每个问题都能考察候选人的实际应用能力理解深度,同时引用中的内容可以作为答案的支持材料。</think>### Docker Compose 常见面试题整理 --- #### **基础概念** 1. **Docker Compose 的作用是什么?** Docker Compose 用于定义运行多容器 Docker 应用,通过 YAML 文件配置服务、网络卷,简化多容器编排过程[^3][^4]。 2. **Docker Compose 与 Dockerfile 的区别?** - Dockerfile 用于构建单个镜像,定义容器内的环境。 - Docker Compose 用于编排多个容器,定义服务间的依赖关系资源(如网络、卷)[^2][^3]。 3. **如何指定 Docker Compose 的版本?** 在 `docker-compose.yaml` 文件中使用 `version` 字段,例如: ```yaml version: '3.8' ``` --- #### **核心命令** 4. **如何启动 Docker Compose 定义的所有服务?** ```bash docker-compose up -d ``` `-d` 表示后台运行[^4]。 5. **如何查看 Docker Compose 服务的日志?** ```bash docker-compose logs [服务名] ``` 6. **如何重建并重启所有服务?** ```bash docker-compose up --build -d ``` --- #### **配置文件解析** 7. **如何定义服务间的依赖关系?** 使用 `depends_on` 字段,例如: ```yaml services: web: depends_on: - db ``` 但需注意:`depends_on` 仅控制启动顺序,不保证服务就绪。 8. **如何配置数据卷(Volume)?** ```yaml volumes: - ./app:/app # 挂载宿主机目录 - db_data:/var/lib/mysql # 命名卷 volumes: db_data: # 声明命名卷 ``` 9. **如何设置环境变量?** - 直接在 `environment` 字段定义: ```yaml environment: MYSQL_ROOT_PASSWORD: password ``` - 通过 `.env` 文件引用: ```yaml env_file: .env ``` --- #### **高级场景** 10. **如何实现多环境配置(开发/生产)?** 使用多个 Compose 文件(如 `docker-compose.prod.yml`),通过 `-f` 指定: ```bash docker-compose -f docker-compose.yml -f docker-compose.prod.yml up ``` 11. **Docker Compose 如何管理网络?** - 默认创建名为 `<项目名>_default` 的网络,服务可通过服务名互相通信。 - 自定义网络示例: ```yaml networks: app_net: driver: bridge ``` 12. **如何限制容器资源(CPU/内存)?** ```yaml services: web: deploy: resources: limits: cpus: '0.5' memory: 512M ``` --- #### **故障排查与优化** 13. **如何调试服务启动失败的问题?** - 查看日志:`docker-compose logs [服务名]` - 手动启动容器:`docker-compose run [服务名] sh` 14. **离线安装 Docker Compose 的步骤?** 1. 从 [GitHub Releases](https://github.com/docker/compose/tags) 下载对应版本的二进制文件[^4]。 2. 复制到 `/usr/local/bin/` 并添加执行权限: ```bash sudo cp docker-compose /usr/local/bin/ sudo chmod +x /usr/local/bin/docker-compose ``` --- #### **实际应用** 15. **如何用 Docker Compose 部署一个 Web 应用 + MySQL 服务?** ```yaml version: '3.8' services: web: image: nginx:alpine ports: - "80:80" depends_on: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值