首页 > 其他分享 >整理一部分docker面试题

整理一部分docker面试题

时间:2024-04-10 15:01:36浏览次数:20  
标签:容器 面试题 指定 指令 COMMAND 整理 镜像 docker

docker 无法访问部署服务怎么解决?

docker container exec -it 容器名称 sh 连接容器。 docker container start 容器名称 启动容器。

yum -y install bridge-utils brctl show docker0 检查docker0的连接的网卡接口。

sysctl -w net.ipv4.ip_forward=1 临时修改内核参数。

docker底层使用了哪些Linux技术?请举例说明。 - iptables 实现流量转发NAT - chroot 改变根目录 - cgoups 资源限制 - namespace 资源隔离 - overlayFS 联合文件系统

docker所用的各网络插件的优缺点

macvlan 优点:无需安装第三方播件。内核直接支持。

缺点:需要手动分配IP地址解夫地址中突问题,默认该网络无法联网,因此需要单独配置—块能用于上网的网卡。

overlay 优点:无需手动分配IP地址

缺点:需要单独安装consul服务,还需要修改docker的配置文件指定consul服务,

falnnel 优点:无需手动分配IP地址

缺点:需要单独安装etcd服务,还需要惨改docker启动脚本。

Dockerfile优化思路: 1.编译速度

指定基础镜像建议是本地存在或者是国内的镜像;

修改国内的软件源

尽量利用Dockerfile构建的镜像缓存技术:

将不经常修改的指令往前放

【FROM

MAINTAINER

LABEL

EXPOSE

WORKDIR

VOLUME】

指定基础镜像建议是本地存在或者是国内的镜像;将经常修改的指令往后放;

【RUN

COPY

ADD

CMD

ENTRYPOINT】

使用".dockerignore" 参考链接: Dockerfile reference | Docker Docs

2.镜像体积

删除无用的缓存;

卸载无用的软件;

使用较小的基础镜像,比如将centos基础环境改为Ubuntu或者alpine镜像。

常用Dockerfile指令 FROM(该参数必须指定): 1.指定基础镜像,必须放在首行!(注意,scratch是保留字,并不是镜像!如果使用了该关键字表示不依赖于任何镜像。) 2.导入ONBUILD指令代码 3.起别名,用做多阶段构建。 RUN: 在容器中运行指令。

COPY: 将宿主机的文件拷贝到容器中。如果容器目录不存在,则会自动创建。 也可以在多阶段拷贝数据。使用"--form"指定源。

ADD: 与COPY作用不同的是,可以解压tar包文件并删除源文件。

ENV: 将变量传递给容器,容器运行时会有该变量。 在容器启动或创建时可以使用-e,--env选项替换默认值。

ARG : 在编译阶段生效的变量。容器运行时不会存在该变量! 在编译的时候可以使用"--build-arg"选项替换默认值。 VOLUME: 对容器的指定路径生成随机存储卷。

EXPOSE: 暴露容器内的端口,外部使用随机端口映射时,可以暴露此处定义的服务端口,通常建议暴露的端口和服务有关。 将来用户使用"-P"(大写)时,就可以根据容器暴露的端口自动做映射啦。

MAINTAINER(Deprecated): 管理者标识,用于声明作者的信息。 官方已废弃(Deprecated),可能在未来的docker版本中移除它,因此我推荐大家使用更加灵活的LABEL指令。 LABEL: 为镜像打标签。基于KEY=VALUE方式打标签。

CMD: 如果用户启动容器时未指定COMMAND时,则使用改指令作为默认的COMMAND。 如果用户启动容器时指定COMMAND时,则该指令会被无视(忽略)。换句话说,该指令可以在容器启动时会被覆盖。 如果CMD和ENTRYPOINT都不指定,则默认为FROM指令的COMMAND。 如果FROM的值为scratch,则没有COMMAND,启动时需要用户自己指定。

ENTRYPOINT: 如果用户启动时未指定COMMAND时,则使用该指令作为默认的COMMAND。 如果用户启动时指定COMMAND时,则用户指定的COMMAND将作为参数传递给该指令。换句话说,该指令可以在容器启动时不会覆盖。 如果CMD和ENTRYPOINT一起使用时,CMD指令会当做参数传递,当然,我们也可以在容器启动时手动修改参数以覆盖CMD指令。 如果CMD和ENTRYPOINT都不指定,则默认为FROM指令的COMMAND,如果FROM的值为scratch,则没有COMMAND,启动时需要用户自己指定。

USER: 指定容器的运行用户,若不指定,默认为root用户,比如ES服务可能会用到。 值得注意的是,运行的服务使用普通用户运行的话,要注意权限问题

WORKDIR: 指定容器的工作目录,当用户连接到容器时,就默认在该目录,若不指定,则默认在"/"路径。 相当于"docker [container] run -w /path/to/workdir ..."

ONBUILD: 基础镜像触发器,构建镜像会构建触发器的相关指令,即当有其他镜像引用该镜像时会调用触发器。

HEALTHCHECK: 用做容器的健康检查,当容器内服务运行正常时,当容器指定了健康检查时,除了正常状态外,它还具有健康状态。 此状态最初为"starting". 每当健康检查通过时,它就会变成"healthy"(无论它以前处于什么状态)。 在连续失败一定次数后,就变成了"unhealthy"。 --interval=DURATION (default: 30s) 容器启动后,间隔多长时间进行健康检查,默认时30秒。也可以是分钟,比如"--interval=5m"。 --timeout=DURATION (default: 30s) 如果单次运行检查花费的时间超过指定的秒数,则认为检查失败,默认超时时间时30秒。 --start-period=DURATION (default: 0s) 启动服务的延迟检查时间,即在这个时间段内检查失败将不记录最大的重试次数。默认为0,表示不延迟检查。 (1)若在这个时间段内检查服务是健康的,则其状态会直接变更为"healthy", (2)若在这个时间段内检查失败将不记录最大的重试次数。 --retries=N (default: 3) 重试检查失败的次数,默认值为3.

SHELL: 调用系统命令的shell。这对Windows很有用,Linux无需使用,默认就是linux的shell。 如果有需要可以指定Windows的shell哟,如下所示,支持powershell和CMD。 SHELL ["powershell", "-command"], SHELL ["cmd", "/S", "/C"]

容器重启策略 always unless-stopped on-failure no

docker容器状态有哪些?

Up: 正在运行

Exit: 容器的COMMAND指定运行结束或者被kill。

Created: 容器被创建但没有运行。

Pause: 容器处于暂停状态,不会对外提供服务。

docker网络类型/模式

单机网络类型 none bridge host container custom network

跨主机网络类型 macvlan falnnel+etcd consul+overlay

你觉得Docker有哪些优缺点? 优点:

部署方便,效率高

资源使用率高,必须虚拟机更加轻量级

简化运维工作?比如: 便于环境迁移

隔离性强?相对于将所有应用部署到同一个节点。

生态好,有很多官方提供的镜像。 缺点:

安全性没有虚拟机强,进程级虚拟化;

基于编排功能较弱,故障冗余差,无法实现故障自愈?很难实现自动伸缩?

docker怎么动态查看容器状态?如何更新容器的资源限制?比如CPU和内存限制? docker stat ... docker update ...

docker与continerd有什么区别? 相同点:

都可以管理容器,镜像;

containerd和docker底层其实都会通过runc创建容器;

不同点:

docker内置了containerd,换句话说,可以使用docker来集成containerd,以实现containerd的功能; containerd生态没有docker完整。

containerd没有CNI插件,没有提供网络,docker有内置的网络类型。

containerd有namespace,可以实现资源隔离,docker并没有;

标签:容器,面试题,指定,指令,COMMAND,整理,镜像,docker
From: https://blog.csdn.net/Cannotbelievesa/article/details/137597180

相关文章

  • docker离线部署Springboot项目
    首先先准备好项目jar包和Dockfile文件Dockfile文件配置如下:点击查看代码#拉取基础镜像FROMopenjdk:11#类似于作者MAINTAINERdpf#创建镜像目录RUNmkdir-p/htht/server/logs\/htht/server/temp\/htht/skywalking/agent#工作区WORKDIR/htht/server......
  • 如何优化在docker容器内的MySQL性能
    前言:在现代数据库应用中,性能和可靠性是至关重要的。对于运行在docker中的MySQL容器,通过优化配置可以充分利用宿主机的的性能,从而提升数据库的整体性能和响应速度。下面将介绍如何通过编辑MySQL容器中的配置文件来优化其性能,并详细说明操作步骤。正文:随着云计算和容器化......
  • docker安装
    1,Ubuntu安装docker#更新ubuntu的apt源索引sudoapt-getupdate#安装包允许apt通过HTTPS使用仓库sudodpkg--configure-asudoapt-getinstallapt-transport-httpsca-certificatescurlsoftware-properties-common#1添加Docker官方GPGkey【这个是国外服务器地址,所......
  • Java面试题-13Spring
    1、事务管理spring事务分为编程式事务和声明式事务Spring事务管理器的行为的重要组成部分。下面是对这些属性的简要解释:1.**value**:用于指定事务管理器的名称。如果应用中只有一个事务管理器,通常可以省略该属性。2.**propagation**:指定事务的传播机制,即在多个事务方法相互调......
  • docker安装emqx
    1.端口介绍1883MQTT/TCP协议端口11883MQTT/TCP协议内部端口,仅用于本机客户端连接8883MQTT/SSL协议端口8081management/HTTP/S协议端口8083MQTT/WS协议端口8084MQTT/WSS协议端口2拉取镜像dockerpullemqx/emqx:v4.0.03.启动临时容器dockerrun-itd--name......
  • 进入Docker容器内部的文件夹
    如果你要进入Docker容器内部的文件夹,可以使用以下命令:首先,使用dockerps命令查找正在运行的容器。找到你要进入的容器的ContainerID。然后,使用以下命令进入容器的命令行界面:dockerexec-it<ContainerID>/bin/bash将<ContainerID>替换为你要进入的容器的实际Contai......
  • 5、docker系统资源限制
    docker系统资源限制1、内存限制:默认docker内存限制可以使用-m参数进行限制,但如果仅-m参数,不添加其他,那么内存限制不会限制死,比如你-m256m内存,那么容器里程序可以跑到256m*2=512m后才会被oom给杀死,原因是源码里memory.memsw.limit_in_bytes 值是被设置成我们指定的内存参数的......
  • 4、docker-registry
    docker-registryregistry用于保存docker镜像,包括镜像的层次结构和元数据;用户可以自建registry,也可使用官方的DockerHub;分类:sponsorregistry:第三方的registry,供客户和docker社区使用;mirrorregistry:第三方的registry,只让客户使用;vendorregistry:由发布doc......
  • 3 docker存储
    docker存储docker镜像有多个只读层叠加而成,启动容器是,docker会加载只读镜像层,并在镜像栈顶部添加一个读写层如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本依然存在,只是被读写层中该文件的副本所隐藏此即“写时......
  • 4-1 dockerfile介绍
    dockerfile介绍一dockerfile概念dockerfile是自定义镜像的一套规则(自定义镜像)dockerfie由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层dockerfile的原理就是镜像分层:1Dockerfile中的每个指令都会创建一个新的镜像层(是一个临时的容器,执行完后将......