Docker篇
Docker和传统虚拟机的区别?
| 对比维度 | Docker容器 | 虚拟机 |
|---|---|---|
| 内核 | 共享宿主机内核 | 每个VM拥有独立的Guest os |
| 启动 | 毫秒级 | 秒到分钟级 |
| 资源开销 | 仅进程+少量overhead | 完整的os开销(GB级) |
| 隔离级别 | 进程级(namespace/cgroup) | 硬件级虚拟化 |
| 镜像 | 分层可复用 | 完整的磁盘镜像 |
Dockerfile 中 CMD 和 ENTRYPOINT 的区别?
| CMD | ENTRYPOINT | |
|---|---|---|
| 作用 | 提供默认命令或参数 | 容器启动的入口参数 |
| 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 集群、多服务器分布式微服务场景 |
原创
Docker常见问题
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法