Docker 完整保姆级教程 一、Docker 核心概念镜像 (image)只读模板打包好的运行环境如 mysql:8.0、java:17相当于系统安装盘容器 (container)镜像运行实例独立隔离环境可启停删除一个镜像可跑多个容器Dockerfile文本脚本自定义构建镜像Docker Compose多容器编排工具一键启动多个关联服务前端 后端 mysqlredis仓库 (Registry)存放镜像官方公共仓库 Docker Hub企业私有仓库 Harbor第一部分Docker 安装三大主流系统1. CentOS 7/8 / Rocky Linux1.1 卸载旧版本bashyum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine1.2 安装依赖 yum 源bashyum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo1.3 安装 Docker 引擎bashyum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin1.4 启动、开机自启bashsystemctl start docker systemctl enable docker # 验证是否安装成功 docker -v2. Ubuntu / Debianbash# 更新源 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 -v3. Windows / Mac桌面版开发用下载 Docker Desktophttps://www.docker.com/products/docker-desktop/Windows 需要开启 WSL2 / Hyper-VMac 直接安装安装完成打开终端执行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 ] }重启生效bashsystemctl daemon-reload systemctl restart dockerWindows/MacDocker 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.tar2. 容器操作最常用bash# 1. 运行容器核心命令 # 示例启动mysql8 docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD123456 \ -v /data/mysql:/var/lib/mysql \ mysql:8.0 参数解释 -d 后台守护进程运行 --name 给容器起名方便管理 -p 宿主机端口:容器内部端口 端口映射 -e 环境变量数据库密码、账号等 -v 宿主机目录:容器目录 数据持久化挂载容器删除数据不丢失 --restartalways 开机自动重启容器 # 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 stats3. 数据卷 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. 运行自定义镜像bashdocker run -d --name demo-back -p 8080:8080 demo-back:1.0示例 2打包 Vue 前端NginxDockerfiledockerfile# 阶段1打包vue代码 FROM node:18 as build WORKDIR /web COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 阶段2nginx运行静态资源多阶段构建减小镜像体积 FROM nginx:alpine # 复制打包产物到nginx目录 COPY --frombuild /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. 项目目录结构plaintextdemo-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第五部分完整线上部署流程SpringBootMySQL 实战步骤 1服务器安装 Docker前面 CentOS/Ubuntu 安装脚本步骤 2上传项目 jar 包、Dockerfile 到服务器同一目录步骤 3构建后端镜像bashdocker build -t demo-back:1.0 .步骤 4启动 mysql 容器持久化数据bashmkdir -p /data/mysql docker run -d \ --name demo-mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD123456 \ -v /data/mysql:/var/lib/mysql \ --restart always \ mysql:8.0步骤 5启动后端项目bashdocker run -d \ --name demo-back \ -p 8080:8080 \ --restart always \ demo-back:1.0步骤 6放行服务器防火墙端口CentOSbashfirewall-cmd --add-port8080/tcp --permanent firewall-cmd --add-port3306/tcp --permanent firewall-cmd --reloadUbuntubashufw allow 8080 ufw allow 3306步骤 7访问测试服务器IP:8080/接口地址第六部分常见排错 最佳实践1. 容器启动失败bash# 查看详细日志定位报错 docker logs 容器名2. 端口被占用修改-p 宿主机端口:容器端口宿主机端口换一个停止占用端口程序netstat -lntp3. 数据丢失一定要挂载-v持久化目录不要把数据存在容器内部4. 镜像过大优化使用 alpine 轻量基础镜像多阶段构建前端 / 后端分开打包清理安装缓存5. 安全规范容器不要用 root 运行添加普通用户数据库密码不要硬编码 Dockerfile使用环境变量 / 配置文件挂载容器禁止映射高危端口外网直接暴露数据库尽量内网互通不对外开放 33066. 日常清理命令bash# 清理停止的容器、无用镜像、网络 docker system prune -a # 清理所有无用卷谨慎会删持久化数据 docker volume prune