Docker篇

Docker和传统虚拟机的区别?

对比维度Docker容器虚拟机
内核共享宿主机内核每个VM拥有独立的Guest os
启动毫秒级秒到分钟级
资源开销仅进程+少量overhead完整的os开销(GB级)
隔离级别进程级(namespace/cgroup)硬件级虚拟化
镜像分层可复用完整的磁盘镜像

Dockerfile 中 CMD 和 ENTRYPOINT 的区别?

CMDENTRYPOINT
作用提供默认命令或参数容器启动的入口参数
docker run 加参数时会被覆盖不会被覆盖

组合使用的经典模式:

ENTRYPOINT ["java", "-jar", "app.jar"]
CMD ["--spring.profiles.active=dev"]

运行 docker run myapp --spring.profiles.active=prod
→ 实际执行:java -jar app.jar --spring.profiles.active=prod

docker compose 和 docker run 的使用场景区别?

docker compose被用来维护多个service,可以一键启动/暂停多个docker,常见于微服务
docker run 主要用来启动单容器,常见于单体项目

docker的网络模式有几种?

网络模式说明适用场景
bridge(默认)Docker 默认创建 docker0 虚拟网桥,容器拥有独立网络子网(172.17.0.0/16),同网桥容器可二层互通,通过 NAT 规则访问外网、配合端口映射对外暴露服务。单机多容器部署、日常开发测试、普通业务服务
host容器不创建独立网络命名空间,直接复用宿主机完整网络栈,无独立容器 IP,端口直接绑定宿主机网卡,无 NAT 开销,网络性能最高。性能敏感服务、监控采集、网关代理;不允许多容器占用同一端口
none容器仅保留本地回环 lo 接口,禁用所有外网与局域网网络,完全隔离,无法和宿主机、其他容器、外网通信。离线计算、数据处理、高安全隔离、无需网络的任务
overlay基于 VXLAN 隧道实现的跨主机网络,打通多台宿主机的容器网络,构建统一集群虚拟网络,支持跨节点容器互通,常用于容器集群编排。Docker Swarm、K8s 集群、多服务器分布式微服务场景