当前位置: 首页 > news >正文

Docker 完整保姆级教程

一、Docker 核心概念

  1. 镜像 (image):只读模板,打包好的运行环境(如 mysql:8.0、java:17),相当于系统安装盘
  2. 容器 (container):镜像运行实例,独立隔离环境,可启停删除,一个镜像可跑多个容器
  3. Dockerfile:文本脚本,自定义构建镜像
  4. Docker Compose:多容器编排工具,一键启动多个关联服务(前端 + 后端 + mysql+redis)
  5. 仓库 (Registry):存放镜像,官方公共仓库 Docker Hub,企业私有仓库 Harbor

第一部分:Docker 安装(三大主流系统)

1. CentOS 7/8 / Rocky Linux

1.1 卸载旧版本

bash

yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine

1.2 安装依赖 & yum 源

bash

yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

1.3 安装 Docker 引擎

bash

yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

1.4 启动、开机自启

bash

systemctl start docker systemctl enable docker # 验证是否安装成功 docker -v

2. Ubuntu / Debian

bash

# 更新源 apt update # 卸载旧版 apt remove docker docker-engine docker.io containerd runc # 安装依赖 apt install ca-certificates curl gnupg lsb-release # 添加docker密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加软件源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 apt update apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin # 启动 systemctl start docker systemctl enable docker docker -v

3. Windows / Mac(桌面版,开发用)

  1. 下载 Docker Desktop:https://www.docker.com/products/docker-desktop/
  2. Windows 需要开启 WSL2 / Hyper-V;Mac 直接安装
  3. 安装完成打开终端执行docker -v验证

4. 配置国内镜像加速(必配,否则拉镜像极慢)

Linux 配置

bash

# 创建配置文件 vim /etc/docker/daemon.json

写入内容:

json

{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] }

重启生效:

bash

systemctl daemon-reload systemctl restart docker

Windows/Mac

Docker Desktop 设置 → Docker Engine,粘贴上面 json,点击 Apply & Restart

第二部分:Docker 基础核心命令

1. 镜像操作

bash

# 1. 搜索镜像 docker search mysql # 2. 拉取镜像 格式 docker pull 镜像名:版本,不写版本默认latest最新 docker pull mysql:8.0 # 3. 查看本地所有镜像 docker images # 4. 删除镜像(镜像ID/镜像名) docker rmi mysql:8.0 # 强制删除 docker rmi -f 镜像ID # 5. 导出镜像(备份) docker save -o mysql8.tar mysql:8.0 # 导入镜像 docker load -i mysql8.tar

2. 容器操作(最常用)

bash

# 1. 运行容器(核心命令) # 示例:启动mysql8 docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /data/mysql:/var/lib/mysql \ mysql:8.0 参数解释: -d 后台守护进程运行 --name 给容器起名,方便管理 -p 宿主机端口:容器内部端口 端口映射 -e 环境变量(数据库密码、账号等) -v 宿主机目录:容器目录 数据持久化挂载(容器删除数据不丢失) --restart=always 开机自动重启容器 # 2. 查看运行中容器 docker ps # 查看所有容器(包含已停止) docker ps -a # 3. 停止/启动/重启容器 docker stop mysql8 docker start mysql8 docker restart mysql8 # 4. 删除容器(必须先停止,-f强制删) docker rm mysql8 docker rm -f 容器ID # 5. 进入容器内部终端 docker exec -it mysql8 /bin/bash # 退出容器:exit # 6. 查看容器日志(排查报错) docker logs mysql8 # 实时滚动日志 docker logs -f mysql8 # 7. 拷贝文件 容器 <-> 宿主机 # 宿主机文件传到容器 docker cp /test.txt mysql8:/tmp # 容器文件拷到宿主机 docker cp mysql8:/tmp/test.txt /opt # 8. 查看容器资源占用 docker stats

3. 数据卷 Volume(持久化)

  • 方式 1:绑定挂载-v 宿主机绝对路径:容器路径(自定义目录)
  • 方式 2:管理卷(docker 自动管理)

bash

# 创建卷 docker volume create mysql-data # 使用卷启动容器 docker run -v mysql-data:/var/lib/mysql ... # 查看所有卷 docker volume ls # 删除无用卷 docker volume prune

第三部分:自定义镜像 Dockerfile(打包 Java / 前端项目)

示例 1:打包 SpringBoot Jar 后端项目

1. 准备文件

新建文件夹,放入:

  • app.jar(编译好的 springboot 包)
  • Dockerfile(无后缀)

2. Dockerfile 内容

dockerfile

# 基础镜像 jdk17 FROM openjdk:17-jdk-slim # 作者信息 MAINTAINER test # 设置容器内工作目录 WORKDIR /app # 将宿主机jar复制到容器内 COPY app.jar app.jar # 暴露端口(仅声明,不自动映射) EXPOSE 8080 # 容器启动执行命令 ENTRYPOINT ["java","-jar","app.jar"]

3. 构建镜像

bash

# . 代表当前目录读取Dockerfile,-t 镜像名:版本 docker build -t demo-back:1.0 .

4. 运行自定义镜像

bash

docker run -d --name demo-back -p 8080:8080 demo-back:1.0

示例 2:打包 Vue 前端(Nginx)

Dockerfile

dockerfile

# 阶段1:打包vue代码 FROM node:18 as build WORKDIR /web COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 阶段2:nginx运行静态资源(多阶段构建减小镜像体积) FROM nginx:alpine # 复制打包产物到nginx目录 COPY --from=build /web/dist /usr/share/nginx/html # 复制自定义nginx配置 COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx","-g","daemon off;"]

第四部分:Docker Compose 多服务一键部署(企业主流)

适合项目:后端 + MySQL + Redis + Nginx,不用逐个 run 容器

1. 安装

新版 docker 自带,直接执行docker compose version验证

2. 项目目录结构

plaintext

demo-project/ ├── docker-compose.yml # 编排配置 ├── back/ │ ├── app.jar │ └── Dockerfile ├── web/ │ ├── dist │ ├── Dockerfile │ └── nginx.conf ├── mysql/ # 数据库挂载目录 └── redis/ # redis挂载目录

3. docker-compose.yml 完整示例

yaml

# 版本规范 version: "3.8" # 所有服务 services: # MySQL服务 mysql: image: mysql:8.0 container_name: demo-mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: demo_db volumes: - ./mysql:/var/lib/mysql restart: always networks: demo-net: # Redis redis: image: redis:6-alpine container_name: demo-redis ports: - "6379:6379" volumes: - ./redis:/data restart: always networks: demo-net: # 后端服务(本地Dockerfile构建) backend: build: ./back container_name: demo-back ports: - "8080:8080" # 依赖mysql、redis,启动顺序控制 depends_on: - mysql - redis volumes: - ./logs:/app/logs restart: always networks: demo-net: # Nginx前端 web: build: ./web container_name: demo-web ports: - "80:80" depends_on: - backend restart: always networks: demo-net: # 自定义网络,所有容器互通 networks: demo-net:

4. Compose 常用命令

bash

# 前台启动(看输出日志) docker compose up # 后台守护启动 docker compose up -d # 查看运行服务 docker compose ps # 实时日志 docker compose logs -f # 停止服务,不删除容器 docker compose stop # 停止并删除容器、网络(数据卷不会删) docker compose down # 删除所有+数据卷(清空数据库) docker compose down -v # 重新构建镜像并启动 docker compose up -d --build

第五部分:完整线上部署流程(SpringBoot+MySQL 实战)

步骤 1:服务器安装 Docker(前面 CentOS/Ubuntu 安装脚本)

步骤 2:上传项目 jar 包、Dockerfile 到服务器同一目录

步骤 3:构建后端镜像

bash

docker build -t demo-back:1.0 .

步骤 4:启动 mysql 容器持久化数据

bash

mkdir -p /data/mysql docker run -d \ --name demo-mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /data/mysql:/var/lib/mysql \ --restart always \ mysql:8.0

步骤 5:启动后端项目

bash

docker run -d \ --name demo-back \ -p 8080:8080 \ --restart always \ demo-back:1.0

步骤 6:放行服务器防火墙端口

CentOS

bash

firewall-cmd --add-port=8080/tcp --permanent firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload

Ubuntu

bash

ufw allow 8080 ufw allow 3306

步骤 7:访问测试

服务器IP:8080/接口地址

第六部分:常见排错 & 最佳实践

1. 容器启动失败

bash

# 查看详细日志定位报错 docker logs 容器名

2. 端口被占用

  • 修改-p 宿主机端口:容器端口宿主机端口换一个
  • 停止占用端口程序netstat -lntp

3. 数据丢失

一定要挂载-v持久化目录,不要把数据存在容器内部

4. 镜像过大优化

  1. 使用 alpine 轻量基础镜像
  2. 多阶段构建(前端 / 后端分开打包)
  3. 清理安装缓存

5. 安全规范

  1. 容器不要用 root 运行(添加普通用户)
  2. 数据库密码不要硬编码 Dockerfile,使用环境变量 / 配置文件挂载
  3. 容器禁止映射高危端口外网直接暴露(数据库尽量内网互通,不对外开放 3306)

6. 日常清理命令

bash

# 清理停止的容器、无用镜像、网络 docker system prune -a # 清理所有无用卷(谨慎,会删持久化数据) docker volume prune
http://www.cnnetsun.cn/news/3088990.html

相关文章:

  • Open Claw 搭配淘宝 item\_get\_pro 接口,5 分钟搭建自动化竞品监控 爆款选品系统(完整可运行 Python 教程)
  • 聊聊移动APP的性能指标优化 上
  • 吴恩达《深度学习》之看懂超参数搜索的“对数标尺”
  • 语文提分全攻略,阅读理解+作文双板块突破
  • 恶意软件窃取 Chrome 会话 Cookie 的攻击机制与防御研究
  • 实用小工具上线!BlockSec USDT拉黑查询网站,一键核验地址冻结状态
  • 101、SQLAlchemy ORM 核心(二):关联查询、懒加载、N+1 问题与事件钩子
  • Wu.CommTool工业通信调试工具技术实现深度解析:基于C WPF的模块化架构设计
  • 《深度学习及应用》期末考试计算题回忆版
  • 终极指南:5步为Foobar2000配置三大音乐平台逐字歌词
  • 国企个人工作总结PPT:从无从下手到条理清晰,保姆级教程请收好
  • LTC6904与PIC18F46K80构建可编程方波发生器
  • 深入解析核心组件:企业级USB隔离架构的安全体系与日志API开发实战指南
  • 终极指南:如何在VS Code中使用Mermaid图表预览插件快速绘制专业图表
  • Three.js 延迟光照教程
  • OpenCV端侧处理效率提升系列(二): 硬件加速工具(GPU,NPU)
  • 低成本高精度6DOF运动追踪系统设计与实现
  • 2026护栏厂家采购干货:锌钢、边坡、球场防护工程厂家甄选指南
  • 文件改名一个个改太麻烦?五款批量重命名工具实操记录
  • 终极指南:如何用Python命令行工具完美下载网易云音乐无损资源
  • AI验布机选择指南:五个核心指标比价格更重要
  • 微信聊天记录误删怎么办?官方完整恢复教程整理
  • 工业视觉检测中的漫射照明技术
  • 电站机组振动传感器DP-VB-400
  • 从成年到新生,覆盖犬皮肤研究的“年龄维度”:云克隆犬角质形成细胞(AEK NEK)全系列上线
  • Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
  • 3分钟掌握NCM解密:终极免费工具实现音乐格式自由转换
  • Go 语言 fmt 与 log 打印方式详解
  • 【观止·诗史汇 HarmonyOS 实战系列 07】兴替明鉴:四维总览与六类分析的朝代洞察模型
  • Java计算机毕设之基于 SpringBoot 的加密云端日记本管理系统的设计与实现 基于 SpringBoot 的在线日记归档查询系统(完整前后端代码+说明文档+LW,调试定制等)