Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令) 一、Docker 五大网络模式详解 实操Docker 内置五种网络模式默认使用 bridge 网桥模式所有网络资源均可通过 docker network 系列命令统一管理不同网络模式的隔离性、通信规则、使用场景差异较大。1.1 Bridge 网桥模式默认模式Docker 安装完成后会自动创建 docker0 虚拟网桥。同一网桥下的容器可以相互通信不同网桥的容器相互隔离每个容器都拥有独立的虚拟网卡与独立 IP 地址。核心特点Docker 默认网络模式新建容器默认接入 docker0 网桥容器拥有独立网络栈、独立 IP、独立端口网络隔离基础完善支持端口映射可将容器服务暴露到外网对外提供访问不支持 DNS 自动解析容器之间仅可通过 IP 互访无法通过容器名称通信实操命令bash运行# 手动指定bridge模式启动nginx容器 docker run -d --network bridge --name bridge-nginx nginx1.2 None 无网络模式该模式会彻底禁用容器的所有网络功能容器无网卡、无 IP 地址、无独立网络栈实现完全的网络隔离。核心特点容器无法访问外网也无法与其他容器建立通信网络安全性极高仅适用于本地独立计算、无需联网的业务场景实操命令bash运行# 无网络隔离模式启动容器 docker run -d --network none --name none-test nginx1.3 Host 主机模式该模式下容器不会创建独立网络栈直接完整复用宿主机的网络配置共享宿主机 IP、网卡、端口及网络协议栈。核心特点无需端口映射宿主机端口即为容器服务端口省去网桥转发环节网络传输性能最优无网络隔离性容器直接暴露在宿主机局域网中安全性较低实操命令bash运行# 共享宿主机网络启动容器 docker run -d --network host --name host-nginx nginx1.4 Container 容器互联模式该模式为网络共享模式新创建的容器不会初始化独立网络环境直接复用已运行容器的网络栈、IP 和端口。核心特点两个容器共用同一 IP 和端口端口资源相互占用不能冲突容器之间通信无需网络转发传输效率极高依赖父容器运行状态父容器停止或删除子容器网络直接失效实操命令bash运行# 1.先启动基础父容器 docker run -d --name base-nginx nginx # 2.新容器复用父容器网络 docker run -d --network container:base-nginx --name follow-nginx nginx1.5 自定义网桥模式自定义网桥是增强版的 Bridge 网桥模式区别于默认 docker0 网桥自带内置 DNS 解析服务是企业开发生产首选网络模式。核心特点支持容器通过容器名称直接互访无需记录 IP可自定义网段、网关网络规划更灵活网络隔离性优于默认 bridge适配多项目容器集群部署网络全套实操命令bash运行# 查看本地所有Docker网络 docker network ls # 创建自定义网络指定网段、网关 docker network create --subnet172.16.0.0/16 --gateway172.16.0.1 mynetwork # 查看网络详细信息 docker network inspect mynetwork # 将已有容器加入自定义网络 docker network connect mynetwork 容器名 # 将容器退出自定义网络 docker network disconnect mynetwork 容器名 # 删除无用自定义网络 docker network rm mynetwork容器名称互访实操bash运行# 创建自定义网络 docker network create mynet # 启动两个容器并加入自定义网络 docker run -d --name web1 --network mynet nginx docker run -d --name web2 --network mynet nginx # 容器之间可直接通过名称通信 docker exec -it web1 ping web2二、Dockerfile 全套核心指令详解 案例Dockerfile 是构建自定义镜像的脚本文件指令从上至下顺序执行每条指令都会生成独立镜像层是制作自定义镜像的核心文件。2.1 FROM 基础镜像指令必须为 Dockerfile 首行指令用于指定当前镜像依赖的基础环境优先读取本地镜像本地无镜像则自动从远程仓库拉取。dockerfile# 基于轻量版nginx镜像构建 FROM nginx:1.24-alpine2.2 MAINTAINER 作者信息废弃用于标注镜像作者与联系方式新版本 Docker 已废弃推荐使用 LABEL 替代。dockerfile# 旧写法淘汰 MAINTAINER test test163.com # 新规范写法 LABEL authortest2.3 RUN 构建执行指令仅在镜像构建阶段执行主要用于安装软件、配置环境、初始化系统多条 RUN 会生成多层镜像建议合并编写缩小镜像体积。dockerfile# 不推荐分层过多镜像体积大 RUN yum install wget -y RUN yum install nginx -y # 推荐合并指令清理缓存精简镜像 RUN yum clean all yum install -y wget nginx rm -rf /var/cache/yum/*2.4 CMD 容器启动指令在容器运行阶段执行定义容器默认启动程序多个 CMD 仅最后一个生效可在容器启动时被命令覆盖替换。dockerfile# shell写法 CMD echo 容器启动成功 # 生产推荐exec写法常驻进程容器不退出 CMD [nginx,-g,daemon off;]启动覆盖方式docker run 镜像名 自定义启动命令2.5 ENTRYPOINT 入口指令定义容器固定启动入口优先级高于 CMD无法被 docker run 命令直接覆盖多用于容器初始化脚本、固定启动程序。dockerfile# 先执行初始化脚本再启动业务服务 ENTRYPOINT [/bin/sh,/start.sh] CMD [nginx]2.6 COPY 文件拷贝指令仅支持本地文件、目录拷贝至镜像内部无网络下载、无自动解压功能安全稳定是生产环境首选拷贝指令。dockerfile# 拷贝本地页面文件至nginx站点目录 COPY index.html /usr/share/nginx/html/ # 批量拷贝静态资源目录 COPY ./static /usr/local/nginx/static/2.7 ADD 高级拷贝指令兼容本地拷贝 远程 URL 下载可自动识别并解压本地压缩包文件功能强大但存在文件覆盖风险日常文件拷贝优先使用 COPY。dockerfile# 本地压缩包自动解压至指定目录 ADD test.tar.gz /usr/local/ # 远程下载文件至镜像 ADD 远程文件链接 /tmp/2.8 ARG 构建变量指令仅在镜像构建阶段生效容器运行后失效用于构建时自定义传参灵活适配不同构建版本。dockerfile# 定义默认版本变量 ARG VERSION1.242.9 ENV 全局环境变量构建阶段、容器运行阶段全程永久生效用于配置系统环境、定义全局参数。dockerfile# 配置全局系统路径 ENV PATH/usr/local/bin:$PATH2.10 EXPOSE 端口声明指令用于声明镜像对外提供服务的端口仅为标识声明作用不会自动开放端口端口映射需配合 docker run -p 实现。dockerfile# 声明容器对外80服务端口 EXPOSE 802.11 WORKDIR 工作目录指令设置镜像构建、容器登录后的默认工作路径目录不存在则自动创建后续所有指令的相对路径均基于该目录。dockerfile# 容器默认工作目录为/app WORKDIR /app2.12 USER 用户降权指令指定容器运行的系统用户默认 root 用户生产环境通过该指令切换普通用户运行程序实现容器降权提升安全性。dockerfile# 指定普通用户运行容器程序 USER admin三、Docker 轻量镜像优化方案企业生产环境要求镜像体积尽可能小镜像越小部署越快、漏洞越少、传输成本越低核心优化方式选用极简基础镜像优先使用 alpine、busybox、scratch 轻量化镜像合并 RUN 指令减少镜像分层避免冗余层堆积构建过程中及时清理 yum 缓存、日志、无用依赖包杜绝安装冗余工具、无用依赖精简运行环境四、Docker 与 VM 虚拟机核心区别架构差异虚拟机模拟完整硬件设备独立运行完整操作系统Docker 共享宿主机内核仅打包应用与运行依赖性能差异虚拟机体积大、启动慢、资源占用高Docker 镜像体积小、秒级启动、资源损耗极低隔离差异虚拟机是系统级完全隔离安全性极高Docker 是应用级轻量隔离隔离性弱于虚拟机适用场景虚拟机适合部署独立系统服务Docker 适合微服务、批量容器化部署五、Docker 镜像构建命令bash运行# 标准构建-t 指定镜像名与版本末尾 . 为构建上下文 docker build -t mynginx:v1 . # 自定义Dockerfile文件名构建-f 指定脚本文件 docker build -t mynginx:v1 -f mydockerfile .六、Docker 存储核心说明镜像层只读分层存储多层镜像可共享复用无法修改容器层基于镜像生成的可读写临时层容器删除后数据丢失数据卷独立持久化存储脱离容器生命周期容器删除数据不丢失用于业务数据持久化七、Docker 高频核心命令bash运行# 查看本地所有镜像 docker images # 查看正在运行容器-a 查看所有容器含停止状态 docker ps docker ps -a # 容器启停重启 docker start 容器名 docker stop 容器名 docker restart 容器名 # 删除容器、删除镜像 docker rm 容器名 docker rmi 镜像名 # 进入容器终端 docker exec -it 容器名 /bin/bash