[docker] 关于docker的面试题

docker命名空间?

docker与虚拟机的区别?

容器虚拟机
所有容器共享宿主机的内核每个虚拟机都有独立的操作系统和内核
通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量完全隔离。每个虚拟机都有独立的硬件资源
秒级启动速度分钟级启动速度
容器相当于宿主机的进程,性能几乎没有损耗需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访                                问,有一定的性能损耗
单机容量能支持成百上千个容器    单机容器只能支持最多几十个虚拟机

 Docker核心概念

●镜像
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。
Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是Docker镜像的精髓。

●容器
Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。

●仓库
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker 

如何使用Dockerfile构建镜像? 

1)编写Dockerfile文件,在第一行用 FROM 指令指定基础镜像
2)用 MAINTAINER 指令指定镜像维护人信息(可选)
3)用 RUN EXPOSE ENV ADD COPY 等指令编写构建镜像的过程
4)在Dockerfile结尾用 CMD 或 ENTRYPOINT 指令指定容器启动时执行的命令
5)用 docker build -t 镜像名:标签 .  命令来构建镜像

ADD 和 COPY 的区别?

共同点:都可以将本地的文件|目录复制到镜像里
区别:ADD还可以通过URL地址下载文件并复制到镜像里,还能将本地的压缩包解压后再复制到镜像里(URL下载和压缩包解压特性不能同时生效)即通过URL下载的压缩包只能以压缩包的形式复制到镜像里

CMD 和 ENTRYPOINT 的区别?

共同点:都可以用来指定容器的启动命令
区别:ENTRYPOINT指定的容器启动命令优先级更高,如果CMD和ENTRYPOINT同时存在,那么CMD指定的内容将作为ENTRYPOINT指定的容器启动命令的选项或参数使用

docker是什么?

docker是用go语言开发并开源的容器引擎,用来运行容器里的应用。docker也是可用来管理容器和镜像的一种工具。

Dockerfile里有哪些命令?

FROM指定基础镜像(是Dockerfile的第一行指令)
MAINTAINER指定镜像维护人信息(可选)
RUN指定linux命令,尽量将多条linux命令合并在一个RUN指令里,用 ; 或 && 或 <<EOF 串起来使用
EXPOSE指定容器要开启的应用的端口号
ENV 指定容器的环境变量
ADD/COPY复制本地文件|目录到镜像里
VOLUME指定容器的匿名数据卷(作用类似于 docker run -v /var/lib/docker/volumes/容器ID/:容器数据卷目录)
USER指定容器的运行用户
WORKDIR指定后续镜像层的工作目录
ARG 指定构建镜像时传入的参数变量(可通过 "docker build --build-arg 变量=值"  进行传入参数)
CMD/ENTRYPOINT指定容器启动时执行的命令和参数

如何缩小镜像的体积大小?

1)尽可能的使用较小体积的基础镜像(推荐使用 alpine 镜像)
2)尽可能的减少Dockerfile指令的数量,从而来减少镜像的层数
3)在RUN指令结尾添加安装软件后清空yum/apt缓存、软件包的命令
4)在 RUN 之后放置 COPY,这样可以充分利用镜像缓存
5)使用 .dockerignore 文件,将不复制到镜像的文件|目录定义在 .dockerignore 文件里
6)容器镜像里一般只运行单个应用
7)使用多阶段(多级)构建的方法      FROM 第一构建阶段的基础镜像 as 别名
                                     ....
                                     FROM 第二构建阶段的基础镜像
                                     COPY --from=别名|阶段ID(第一阶段为0)  第一阶段构建的文件|目录  当前阶段的路径
                                     ....
                                     CMD|ENTRYPOINT 指定启动命令

docker容器的重启策略? 

格式:docker run --restart no|always|on-failure|unless-stopped  .....

no:不管容器是正常退出还是异常退出,总是不重启容器。默认策略
always:不管容器是正常退出还是异常退出,总是重启容器。
on-failure:只在容器异常退出时重启容器。on-failure:N 表示容器异常退出时重启容器最多N次
unless-stopped:总是重启容器,但不考虑docker服务端进程启动时就已经处于退出状态的容器 

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值