Docker容器化平台

一、Docker概念

Docker 是容器化平台 ,可以把应用和它依赖的库、配置、环境一起打包成镜像,在任意环境快速运行,实现一次打包,到处运行。

二、三大核心概念

  1. 镜像 (image):只读模板,相当于安装包。分层存储,联合文件系统,复用层,节省空间。
  2. 容器 (container):镜像运行实例,独立隔离运行环境,一个镜像可以启动多个容器。
  3. 仓库 (repository):存放镜像,公共仓库 Docker Hub,也可以搭建私有镜像仓库 Harbor。

三、核心常用命令(面试必背)

java 复制代码
# 镜像操作
docker images                  # 查看本地镜像
docker pull [镜像名]:[tag]      # 拉取镜像
docker build -t name:tag .      # 通过Dockerfile构建镜像
docker rmi 镜像id               # 删除镜像

# 容器操作
docker run -d --name myapp -p 8080:8080 镜像名  # 后台启动容器,端口映射
docker ps                       # 查看运行中容器,ps -a 全部容器
docker stop 容器id               # 停止容器
docker start/restart 容器id      # 启动/重启容器
docker rm 容器id                 # 删除容器(必须先stop)
docker exec -it 容器id /bin/bash # 进入容器内部

# 日志
docker logs 容器id

重点参数:

  • -d 后台守护进程运行
  • -p 宿主机端口:容器端口 端口映射
  • --name 给容器起名
  • -it 交互式终端

四、Dockerfile(构建镜像脚本)

基础指令:

复制代码
FROM openjdk:17-jdk-slim      # 基础镜像
WORKDIR /app                  # 设置工作目录
COPY target/demo.jar app.jar  # 复制本地jar包到镜像内
EXPOSE 8080                   # 声明端口(仅文档,不实际开放端口)
ENTRYPOINT ["java","-jar","app.jar"] # 容器启动命令
  • 每条指令生成一层镜像;尽量合并 RUN 指令,减少层数减小镜像体积
  • 镜像分层缓存机制:前面层不变,后续构建可以复用缓存,提升打包速度

五、Docker 网络

默认网络模式:

  1. bridge(默认):桥接网络,容器之间、容器和宿主机通信,端口映射就是 bridge 模式
  2. host:直接复用宿主机网络,不做端口映射,性能最高,隔离性差
  3. none:无网络
  4. container:复用另一个容器网络

六、数据持久化(3 种方式)

  1. volumes(卷):docker 管理,推荐,宿主机 /var/lib/docker/volumes,容器删除数据还在
  2. bind mounts(绑定挂载):宿主机指定目录直接挂载到容器,直接读写宿主机文件
  3. tmpfs:临时文件系统,数据存在内存,容器销毁数据丢失

微服务项目一般用 volume 保存 mysql、nacos 等持久化数据,避免容器删除数据丢失。

七、Docker Compose

单机多容器编排工具,通过 yaml 一次性管理多个容器,一键启动 / 停止整套服务(比如 Nacos+MySQL+SpringBoot 微服务)。 适合开发环境,生产环境大规模集群用 K8s。 简单示例 docker-compose.yml

复制代码
services:
  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

命令:

复制代码
docker-compose up -d  #后台启动所有服务
docker-compose down    #停止并删除容器

八、面试高频简答(背诵版)

Q1:Docker 镜像分层原理

A:镜像采用联合文件系统,分层存储。每一条 Dockerfile 指令生成一层,下层只读。构建时会缓存镜像层,相同层直接复用,减小镜像大小,提升构建速度。容器在最上层增加一个可读写层,修改不会改动基础镜像。

Q2:docker run -p 端口映射原理

A:宿主机 iptables 做端口转发,访问宿主机端口,流量转发到容器内部端口。

Q3:容器数据卷的作用

A:实现容器数据持久化;容器删除数据不会丢失;实现宿主机和容器、容器之间的数据共享。

Q4:Docker Compose 和 K8s 区别

A:Compose 单机编排,适合开发测试环境,简单轻量;K8s 是集群编排,多机器管理,生产大规模容器,具备自动扩缩容、故障自愈、负载均衡能力。

九、和 SpringCloud 结合场景(后端面试重点)

微服务打包流程:

  1. SpringBoot 项目打包 jar
  2. 编写 Dockerfile,基于 jdk 镜像复制 jar
  3. docker build 构建镜像
  4. docker run 启动容器,部署 Nacos、Gateway、业务微服务、MySQL,用 docker-compose 一键拉起整套微服务环境。
相关推荐
fengkai454518 分钟前
3、Kubernetes的Namespace&Contexts&Pod&YAML格式
运维·容器·kubernetes·k8s·namespace·yaml·pod
容器魔方2 小时前
Volcano v1.16 发布:新增 NamespaceQueue 与 fairshare,拓展 HyperNode 生态
人工智能·云原生·容器·华为云·云计算
秦jh_3 小时前
【Docker】镜像、卷原理
运维·docker·容器
小马同学-3 小时前
K8s 命名空间与上下文:Namespace 资源隔离与多集群切换实战
云原生·容器·kubernetes
程序员老赵3 小时前
Docker 部署 XWiki:轻松搭建企业知识库与协作 Wiki
前端·docker·开源
I'mChloe3 小时前
飞牛NAS部署flatnotes实战:Docker、8080端口、Markdown笔记与固定地址访问
笔记·docker·容器
许知珩4 小时前
Kubernetes 存储与配置管理 ——Volume、ConfigMap 与 Secret 实战详解
云原生·容器·kubernetes
Flynn Liang8 小时前
5分钟跑通MQTT:EMQX Docker部署+MQTTX联调(2026最新版,含踩坑)
物联网·mqtt·docker·iot·emqx
丨晨 丨9 小时前
K8s存储卷与配置管理实战
云原生·容器·kubernetes
暖核9 小时前
K8s 存储与配置:Volume PV‑PVC ConfigMap Secret 实战解析
云原生·容器·kubernetes