一、软件安装的两种方式与 Docker 镜像获取

1.1 普通软件的安装方式

在日常使用中,我们安装软件通常有两种途径:

​方式一:应用市场安装​

  • 打开应用市场 → 搜索软件名称 → 点击安装

​方式二:官网下载安装​

  • 访问软件官网 → 下载离线安装包 → 手动安装

1.2 Docker 镜像获取的两种对应方式

Docker 获取镜像的方式与普通软件安装有着相似的逻辑:

​方式一:在线搜索下载(类似应用市场安装)​​
# 1. 搜索镜像(如搜索MySQL)
docker search mysql
# 返回结果格式:mysql:tag → 软件名称:版本号

# 2. 下载镜像
docker pull mysql:5.7

# 3. 运行容器
docker run mysql:5.7

​适用场景​:网络通畅环境,获取官方最新镜像

​方式二:离线包安装(类似官网下载)​​
# 1. 上传镜像包到服务器
# 2. 从离线包加载镜像
docker load -f 镜像包名称

​为什么需要这种方式?​​

  • Docker 官方镜像在国外,下载速度慢或不稳定
  • 内网环境无法访问外网
  • 需要固定特定版本,避免自动更新带来的不兼容

​推荐场景​:生产环境、内网部署、网络受限情况

二、Docker 核心概念解析

2.1 镜像 vs 容器:通俗理解

​镜像就像软件的安装包,​容器就像安装好的软件​:

  • 安装软件需要对应的安装包 → 运行容器需要对应的镜像
  • 一个安装包可以安装多个软件 → 一个镜像可以启动多个容器
  • 删除软件不会影响安装包 → 删除容器不会影响镜像(但有容器运行时不能删除对应镜像)

三、常用 Docker 命令大全

3.1 基础管理命令

# 镜像管理
docker images              # 查看所有镜像
docker rmi 镜像id          # 删除指定镜像

# 容器管理
docker ps                  # 查看运行中的容器
docker ps -a               # 查看所有容器(包括已停止的)
docker rm 容器id           # 删除容器
docker start/stop/restart 容器id  # 启动/停止/重启容器

3.2 运维调试命令

# 日志查看
docker logs -f 容器id       # 实时查看容器日志

# 进入容器
docker exec -it 容器id /bin/bash  # 进入容器内部

# 性能监控
docker stats               # 查看容器资源占用情况
docker help                # 查看所有命令帮助

四、Dockerfile 实战:SpringBoot 项目部署

4.1 为什么需要 Dockerfile?

Dockerfile 就像一份"烹饪菜谱",告诉 Docker 如何一步步构建出包含你应用程序的标准化镜像,实现环境一致性。

4.2 实战示例:SpringBoot 项目 Docker 化

​项目结构​:

​Dockerfile 详解​:

# 指定基础运行环境
FROM openjdk:8

# 设置容器内工作目录
WORKDIR /app

# 复制jar包到容器(注意路径匹配)
ADD ./data/docker-1.0-SNAPSHOT.jar /app/docker-1.0-SNAPSHOT.jar

# 容器启动命令
ENTRYPOINT ["java", "-jar", "docker-1.0-SNAPSHOT.jar"]

4.3 镜像构建与运行

# 在Dockerfile所在目录执行构建
docker build -t test:1.0 .

# 运行容器(-d 表示后台运行)
docker run -d test:1.0

五、Docker Compose:多容器编排利器

5.1 为什么需要 Docker Compose?

单纯使用 docker run 管理多个关联容器(如 MySQL + Redis + 应用)十分繁琐,Docker Compose 通过配置文件实现一键部署。

5.2 Docker Compose 文件详解

version: '3.3'  # 配置文件格式版本

services:
  # 应用服务定义
  test:
    image: "test:1.0"      # 使用镜像
    restart: always         # 自动重启确保高可用
    ports:
      - "18090:8080"       # 端口映射:宿主机18090 → 容器8080
    volumes:
      - ./data/:/app       # 数据卷挂载:宿主机data目录→容器app目录
    environment:
      - TZ=Asia/Shanghai   # 设置时区
    networks:
      - test               # 连接到test网络

# 网络配置
networks:
  test:
    external: true         # 使用外部已存在的网络

5.3 核心概念深度解析

🔄 ​数据卷挂载:数据的"双向传送门"​​

​作用​:在容器和宿主机之间建立持久化数据通道

  • ​数据安全​:容器崩溃时数据不会丢失
  • ​方便调试​:直接查看宿主机上的日志文件
  • ​持久存储​:容器删除后数据依然保留

​示例效果​:

容器内 /app/application.log ←→ 宿主机 ./data/application.log
🌐 ​网络隔离:系统的"安全围墙"​​
# 创建专用网络
docker network create test

# 使用Compose部署
docker-compose up -d    # 启动所有服务
docker-compose down     # 停止并清理

5.4 生产环境重要提醒

💾 ​数据库持久化必须做!​​

MySQL等数据库容器必须配置数据卷挂载,否则:

  • 容器重启 → 数据全部丢失
  • 容器崩溃 → 业务数据不可恢复
🛡️ ​网络隔离保障安全​
  • 不同系统使用不同网络组,避免相互干扰
  • 外部网络需要提前手动创建

六、实战部署流程总结

6.1 单容器部署流程

  1. 编写 Dockerfile 定义环境
  2. 构建镜像:docker build -t 镜像名 .
  3. 运行容器:docker run -d 镜像名

6.2 多容器编排流程

  1. 创建网络:docker network create 网络名
  2. 编写 docker-compose.yml 配置文件
  3. 一键部署:docker-compose up -d
  4. 问题排查:docker-compose down 后重新部署

更多推荐