【架构师面试-云原生-1】-云原生面试之Docker面试题大全30题

1:总体

1 Docker 和虚拟机有啥不同?

Docker是轻量级的沙盒,在Docker当中有操作系统的⽂件⽬录,但是没有操作系统的内核。

虚拟机⾥⾯运⾏着操作系统的。

2 Docker 安全么?

Docker的安全性不如虚拟机,主要原因在于:

Docker是操作系统上被限制的进程。

虚拟机⾥⾯是独⽴的操作系统。

但是,⼤量的⽣产环境证明,Docker的安全性还是很⾼的。

Docker的安全性主要是通过隔离技术,Namespace。

3 如何清理后台停⽌的容器?

单独删除:docker rm container_id

批量删除的命令:docker rm $(docker ps -a -q)

4 如何查看容器⾥⾯⽀持的环境变量?

命令:docker exec -it redis env

5 当启动容器的时候提示:exec format error?如何解决问题?

检查启动命令是否有可执⾏权限,进⼊容器当中,使⽤脚本进⾏排查。

权限的排查,我们直接使⽤ls -l命令。

6 如何退出⼀个镜像的 bash,⽽不终⽌它?

运⾏命令,Ctrl+p,然后Ctrl+q。

7 退出容器时候⾃动删除?

使⽤--rm参数。

rm参数不能与-d参数⼀起使⽤,如果⼀起使⽤,rm参数⽆效。

rm参数使⽤场景,适合临时启动的容器。

8 怎么快速查看本地的镜像和容器?

查看本地镜像:docker images

1. REPOSITORY

2. TAG

3. IMAGE ID

4. CREATED

5. SIZE

查看运⾏的容器:docker ps

1. CONTAINER ID

2. IMAGE

3. COMMAND

4. CREATED

5. STATUS

6. PORTS

7. NAMES

2:镜像相关

1 如何批量清理镜像⽂件?

删除单⼀镜像:

1. docker rmi 镜像的名字

2. docker rmi 镜像的id:注意点,当我们的镜像id关联多个镜像的时候,我们需要强制删除,添加-f参数进⾏强制删除。

批量删除镜像: docker rmi $(docker images -q)

2 本地的镜像⽂件都存放在哪⾥?

Centos系统,镜像存放在/var/lib/docker/overlay2下⾯。

具体的镜像存在哪个⽬录:可以通过命令docker inspect container_id。

镜像是分层来存放的:

LowerDir:底层只读层。

MergedDir:我们看到的最终的⽂件系统。

UpperDir:上层写过的层。

WorkDir:⼯作⽬录。

3 构建 Docker 镜像应该遵循哪些原则?

两⼤原则:

1. 安全:尽量使⽤官⽅的库、依赖以及官⽅的基础镜像。

2. ⽂件的⼤⼩:

1. 使⽤较⼩的基础镜像。

2. 清理⼀些临时⽂件、⽬录。清理⼀些不必要的依赖。

3. 制作镜像的时候,需要指定明确版本号。

3:容器相关

1 容器退出后,通过 docker ps 命令查看不到,数据会丢失么?

容器退出后,处于exited的状态,可以通过docker ps -a查到对应的容器。

其中数据是不会丢失的。

当我们删除容器的时候,才会去清除数据。

容器的状态的演变:

image --》create --》start --》stop --》rm。

2 如何直接删除所有正在运⾏的容器?

使⽤的命令:docker kill $(docker ps -q)

注意点:stop 和 kill 的区别:

stop:停⽌容器,停⽌的容器可以继续运⾏。

kill:删除容器,测试删除容器以及对应的数据。

3 如何清理批量后台停⽌的容器?

docker rm $(docker ps -a -q)

这⾥注意只会删除掉容器的状态是exited的容器。

4 很多应⽤容器都是默认后台运⾏的,怎么查看它们的输出和⽇志信息?

使⽤docker logs container_id命令。

5 使⽤ docker port 命令查看映射容器的端⼝时,系统报错 Error: No public port ‘80’ published是什么意思?

创建镜像的时候,在使⽤EXPOSE暴露端⼝的时候,⼀定要暴露正确的端⼝。

6 可以在⼀个容器中同时运⾏多个应⽤进程吗?

不建议在⼀个容器中运⾏多个进程,因为容器是单进程模型,期望功能单⼀的。

如果有需求,需要在容器⾥运⾏多个进程的话,需要创建⽗进程来管理他们。

7 如何控制容器占⽤系统资源(CPU,内存)的份额?

在我们使⽤docker create或者docker run命令的时候,可以使⽤以下的参数来限制资源:

-c:限制cpu的使⽤

-m:限制内存的使⽤

4:仓库相关

1 仓库(Repository)、注册服务器(Registry)、注册索引(Index)有何关系?

仓库:相关镜像的集合。

注册服务器:实际上存储镜像的地⽅。注册服务器是通过注册索引来实现的镜像相关管理。

注册索引:⽤户的账号、权限、搜索和标签等的管理。

2 从⾮官⽅仓库(如:http://aa.docker.com)下载镜像的时候,有时候会提 示“Error:Invaild registry endpoint https://aa.docker.com:500

0/v1/...”?

当我们需要从⾮官⽅仓库下载镜像的时候,我们需要将⾮官⽅仓库的地址加⼊到docker的配置⽂件中。

"insecure-registries": [

 "aa.docker.com"

 ]

5:配置相关

1 Docker 的配置⽂件放在哪⾥?如何修改配置?

/etc/docker/daemon.json

修改配置的时候,注意要重启docker,配置才能⽣效。

2 如何更改 Docker 的默认存储位置?

默认的存储位置是/var/lib/docker。

当我们需要改变默认存储位置的时候,可以通过软连接来实现,将其他的⽬录软连接指向到/var/lib/docker⽬录。

6:Docker与虚拟化

1 Docker 与 LXC(Linux Container)有何不同?

LXC利⽤Linux上的相关技术实现的容器。

Docker是在基础上做了很多的优化与改进:

镜像系统 便于容器的分发

仓库系统 便于容器的分发

版本管理 类似Git的概念,进⾏镜像的创建于管理

周边⼯具 ⾮常的遍历

移植性 通过镜像不只是封装了应⽤的运⾏的包,还封装了相关的运⾏环境的配置

2 Docker 与 Vagrant 有何不同?

Vagrant ⼀个虚拟机的管理环境 借助Vagrant可以快速的部署⼀个虚拟机

Docker 只能运⾏在Linux平台上 启动和运⾏的性能⾮常快 ⽐虚拟机快的 更加适合快速开发和部署的场景。

3 开发环境中 Docker 与 Vagrant 该如何选择?

Docker 占⽤的资源⽐较少 ⽽且运⾏应⽤⽐较⽅⾯

Vagrant 本质是帮我们创建虚拟机

最终看我们运⾏的应⽤ 是想运⾏在虚拟机上 还是呢 以容器的⽅式运⾏。

7:其他

1 Docker 能在⾮ Linux 平台(Windows+MacOS)上运⾏吗?

Docker可以运⾏在⾮Linux平台上的,但是在⾮Linux平台上,底层是运⾏了⼀个微型的虚拟机的,Docker运⾏在

这个微型虚拟机上的。

2 如何将⼀台宿主机的 docker 环境迁移到另外⼀台宿主机?

停⽌Docker服务,将整个Docker的⽂件(包括配置⽂件)复制到另外⼀台机器上,在其他的机器上启动Docker。

运⾏的容器可以达成镜像,通过镜像进⾏容器的迁移⼯作。

你可能感兴趣的:(架构师面试,docker,云原生,面试,架构师)