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 一键拉起整套微服务环境。
相关推荐
我是唐青枫2 小时前
Docker diff 详解:看清容器里到底改了什么
docker·容器
jiao糖瓜子4 小时前
Docker 完全指南:从镜像容器到生产部署
docker·容器·eureka·镜像·仓库
JavaPub-rodert4 小时前
Docker 容器启动了,不代表服务真的能用:Healthcheck 实战
运维·docker·容器
先吃饱再说6 小时前
别再手动敲三遍 docker run 了:学会使用 Docker Compose 多容器编排
docker·容器
xixiaoyunya7 小时前
Docker 容器化部署实战:从零搭建一套完整的 Nginx + Node.js + MySQL + Redis 项目环境
nginx·docker·node.js
全栈攻略19 小时前
Docker 中 ROS2 工作流 Topic 验证与常用命令指南
运维·docker·容器
名字还没想好☜21 小时前
Docker 数据卷实战:volume、bind mount、tmpfs 到底怎么选,数据持久化与权限坑
运维·docker·容器·kubernetes
唐青枫1 天前
Docker diff 详解:看清容器里到底改了什么
docker
lpfasd1231 天前
Docker存储清理与防膨胀实践
运维·docker·容器