[TOC]
Docker 面试常见问题
镜像相关
- 1、如何批量清理临时镜像文件?
sudo docker rmi $(sudo docker images -q -f danging=true)
- 2、如何查看镜像支持的环境变量?
sudo docker run IMAGE env
-
3、本地的镜像文件都存放在哪里?
于Docker相关的本地资源存放在 /var/lib/docker/目录下、其中container目录存放容器信息、graph目录存放镜像信息、aufs目录存放具体的镜像底层文件
- 4、构建Docker镜像应该遵循哪些原则?
整体原则上、尽量保持镜像功能的明确和内容的精简、要点包括:
1、尽量选取满足需求但较小的基础系统镜像、建议选择Debian:wheezy镜像,仅有86MB大小
2、清理编译生成的文件、安装包的缓存等临时文件
3、安装各个软件时候要指定准确的版本号、并避免引入不需要的依赖
4、从安全的角度考虑、应用尽量使用系统的库和依赖
5、使用Dockerfile创建镜像时候要添加dockerignore文件或使用干净的工具目录
容器相关
-
1、容器退出后、通过docker ps 命令查不到数据丢失么?
容器退出后会处于中止(exited)状态、此时可以通过 docker ps -a 查看、其中数据不会丢失、还可以通过docker start来启动、只有删除容器才会清除数据
- 2、如何停止所有正在运行的容器?
sudo docker stop $(sudo docker ps -aq)
sudo docker kill $(sudo docker ps -aq)
- 3、如何清理批量后台停止的容器?
sudo dokcer rm $(sudo docker ps -aq )
-
4、如何临时退出一个正在交付的容器的终端、而不中止它?
按Ctrl+p 后按Ctrl+q、如果按Ctrl+c 会使容器内的应用进程终止、进而会使容器终止
- 5、很多应用容器都是默认后台运行的、怎么查看它们的输出和日志信息?
sudo docker logs 、后面容器名称或容器ID号
sudo docker logs -f -t --tail 100 容器名称或容器ID号
-
6、使用docker port 命令映射容器的端口号时、报错Error:No public port 80 published for ... 是什么意思?
创建镜像时Dockerfile要指定正确的EXPOSE的端口、容器启动时指定publishallport=true
-
7、可以在一个容器中同时运行多个应用进程吗?
一般不推荐在同一个容器内运行多个应用进程、如果有类似需求、可以通过额外的进程管理机制、比如supervisord来管理所运行的进程
-
8、如何控制容器占用系统资源(cpu、内存)的份额?
在使用docker create命令创建容器或使用docker run 创建并运行的时候、可以使用 -c|-cpu-shares[=0]参数来调整同期使用cpu的权重、使用-m|-memory参数来调整容器使用内存的大小
仓库相关
-
1、仓库(Reposittory)、则注册索引(Index)有何关系?
首先、仓库是存放一组关联镜像的集合、比如同一个应用的不同版本的镜像、注册服务器是存放实际镜像的地方、注册索引则负责维护用户的账号、权限、搜索、标签等管理。注册服务器利用注册索引来实现认证等管理
- 2、从非官方仓库(如:dl.dockerpool.com)下载镜像的时候,有时候会提示"Error:Invaild registry endpoint https://dl.docker.com:5000/v1/"?
Docker 自1.3.0版本往后以来,加强了对镜像安全性的验证,需要手动添加对非官方仓库的信任。
DOCKER_OPTS=”–insecure-registry dl.dockerpool.com:5000”
重启docker服务
配置相关
-
1、Docker的配置文件放在那里。如何修改配置?
Ubuntu系统下Docker的配置文件是/etc/default/docker,CentOS系统配置文件存放在/etc/sysconfig/docker
-
2、如何更改Docker的默认存储设置?
Docker的默认存放位置是/var/lib/docker,如果希望将Docker的本地文件存储到其他分区,可以使用Linux软连接的方式来做。