Docker 学习之路-从入门到放弃:2

Docker 一站式部署:

想在 Docker 中一站式部署 数据库、缓存、中间件、运维工具 ,再运行 SpringCloud 后端 + Vue 前端 项目,这个需求非常典型:

Docker Compose (Docker 官方的多容器管理工具)一个配置文件 + 一行命令,就能启动所有服务,不用反复敲命令,全程目录统一、无冗余错误,新手零踩坑。

所有服务的配置文件、数据文件,全部放在服务器 /docker 根目录下,每个服务单独建文件夹,结构一眼看懂,找任何配置都不用乱翻:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| plaintext # 最终统一目录结构(固定不变) /docker ├── portainer/ # Portainer图形工具配置+数据 ├── nginx/ # Nginx配置+Vue前端文件 │ ├── conf/ # Nginx核心配置文件(反向代理、前端路由配置) │ └── html/ # Vue打包后的dist文件放这里 ├── mysql/ # MySQL配置+数据库数据 │ ├── conf/ # MySQL核心配置(my.cnf) │ └── data/ # 数据库存储数据(删容器也不丢) ├── redis/ # Redis配置+缓存数据 │ ├── conf/ # Redis配置文件 │ └── data/ # 缓存持久化数据 ├── es/ # Elasticsearch配置+索引数据 ├── jenkins/ # Jenkins自动化部署配置 └── gitlab/ # GitLab代码仓库配置+数据 |

一、前置准备:安装Docker Compose

Windows/Mac电脑

安装 Docker Desktop 时自带 Compose,直接跳过这一步,不用额外安装。

Linux服务器(云服务器/物理机)

复制以下命令逐行运行,一键安装Docker Compose:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Bash # 下载 Docker Compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 赋予执行权限 sudo chmod +x /usr/local/bin/docker-compose # 验证安装(显示版本号就是成功) docker-compose --version |

docker-compose 这个插件下载会比较慢。请耐心等待。

二、核心步骤:创建统一目录+完整配置文件(零错误版)

1. 一键创建所有统一目录(复制运行,自动建全文件夹)

这一步是关键,直接运行命令,自动生成上面的统一目录结构,不用手动一个个建:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Bash # 进入服务器根目录,创建docker统一根目录 cd / && mkdir -p docker # 批量创建所有服务的配置+数据文件夹 mkdir -p /docker/portainer /docker/nginx/{conf,html} /docker/mysql/{conf,data} /docker/redis/{conf,data} /docker/es /docker/jenkins /docker/gitlab # 赋权(避免权限不足报错,小白直接运行) chmod -R 777 /docker |

2. 创建完整docker-compose.yml(零笔误+统一挂载,直接复制)

进入docker目录,创建配置文件,所有端口、密码、目录全部优化好,无任何笔误,挂载路径全部指向统一目录,新手直接复制全量内容:

|--------------------------------------------------------------------------------|
| Bash # 进入docker目录 cd /docker # 创建并编辑docker-compose.yml文件 vi docker-compose.yml |

按【i】进入编辑模式,把以下2G内存低配精简版配置粘贴进去(固定MySQL+Redis版本、删除ES、关闭GitLab、保留核心服务),按【Esc】,输入【:wq】回车保存:

YAML

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| version: '3.8' # 统一网络:所有服务互通,SpringCloud微服务直接调用 networks: app-network: driver: bridge services: # 1. Portainer(Docker图形化管理工具,已修正笔误,只装一个) portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always # 开机自启 ports: - "9000:9000" # 网页访问端口 volumes: - /docker/portainer:/data # 挂载到统一目录,配置数据好找 - /var/run/docker.sock:/var/run/docker.sock networks: - app-network # 2. Nginx(运行Vue前端+反向代理后端) nginx: image: nginx:stable container_name: nginx restart: always ports: - "80:80" # Vue网页访问端口 - "443:443" # HTTPS端口(可选) volumes: - /docker/nginx/html:/usr/share/nginx/html # Vue前端dist目录 - /docker/nginx/conf:/etc/nginx/conf.d # Nginx配置文件目录 networks: - app-network # 3. MySQL8.0.12(固定精确版本,稳定省内存) mysql: image: mysql:8.0.12 container_name: mysql restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root123456 # root默认密码,可自行修改 TZ: Asia/Shanghai # 时区设置 volumes: - /docker/mysql/conf:/etc/mysql/conf.d # MySQL配置文件 - /docker/mysql/data:/var/lib/mysql # 数据库数据(核心,不丢失) networks: - app-network # 4. Redis6.2.17(低版本省内存,适配2G服务器,开启持久化) redis: image: redis:6.2.17 container_name: redis restart: always ports: - "6379:6379" volumes: - /docker/redis/conf:/usr/local/etc/redis # Redis配置 - /docker/redis/data:/data # 缓存数据 command: redis-server --appendonly yes # 开启持久化,重启不丢缓存 networks: - app-network # 5. Jenkins(自动化部署,核心服务,实现一键部署) jenkins: image: jenkins/jenkins:lts container_name: jenkins restart: always user: root # 避免权限不足 ports: - "8080:8080" - "50000:50000" volumes: - /docker/jenkins:/var/jenkins_home # Jenkins配置+插件 - /var/run/docker.sock:/var/run/docker.sock networks: - app-network # 6. GitLab(2G内存服务器直接注释关闭,占用太高,不用装) # gitlab: # image: gitlab/gitlab-ce:latest # container_name: gitlab # restart: always # ports: # - "8081:80" # GitLab网页访问端口 # - "2222:22" # Git代码提交端口 # volumes: # - /docker/gitlab:/etc/gitlab # GitLab配置 # - /docker/gitlab/logs:/var/log/gitlab # environment: # TZ: Asia/Shanghai # networks: # - app-network # Elasticsearch(2G内存直接删除,必卡服务器,需要时再加) # elasticsearch: # image: elasticsearch:8.15.0 # container_name: es # restart: always # ports: # - "9200:9200" # environment: # - discovery.type=single-node # - xpack.security.enabled=false # - ES_JAVA_OPTS=-Xms512m -Xmx512m # volumes: # - /docker/es:/usr/share/elasticsearch/data # networks: # - app-network |

�� 配置说明:已经帮你固定好省内存的稳定版本,删掉ES、注释GitLab,2G内存服务器直接运行不卡顿,核心的Jenkins一键部署、数据库、缓存、前端服务全部保留,完全满足你的需求。

3. 一键启动所有服务(只需1行命令)

第一次启动会自动下载所有镜像,耐心等待5-10分钟(看服务器网速),后台运行命令:

|-------------------------------------------------------------------------|
| Bash # 后台启动所有容器 docker-compose up -d # 查看容器启动状态(确保所有服务都是Up状态) docker ps |

三、所有服务访问地址+默认账号+配置文件路径(小白速查)

把 服务器IP 换成你的云服务器公网IP,本地虚拟机换成对应内网IP,同时标注每个服务的配置文件位置,找文件直接抄路径:

|---------------|-------------------|-------------------|--------------------|
| 服务名称 | 访问地址 | 默认账号/密码 | 配置文件路径(统一目录) |
| Portainer | http://服务器IP:9000 | 首次登录自行设置 | /docker/portainer |
| Nginx(Vue前端) | http://服务器IP | 无 | /docker/nginx/conf |
| MySQL | 服务器IP:3306 | root / root123456 | /docker/mysql/conf |
| Redis | 服务器IP:6379 | 无密码 | /docker/redis/conf |
| Elasticsearch | http://服务器IP:9200 | 无密码 | /docker/es |
| Jenkins | http://服务器IP:8080 | 初始密码看日志 | /docker/jenkins |
| GitLab | http://服务器IP:8081 | root / 首次自行设置 | /docker/gitlab |

查看Jenkins初始密码(小白专属命令)

|---------------------------------------------------------|
| Bash docker logs jenkins | grep "initialAdminPassword" |

四、修改配置文件后,如何让容器生效(小白必学)

按照上面的路径找到对应配置文件修改后,千万不要直接重启服务器,只需要重启对应容器即可生效,步骤:

  1. 修改对应服务的本地配置文件(比如改Nginx,就改/docker/nginx/conf下的文件)
  2. 重启对应容器(命令格式:docker restart 容器名)

|----------------------------------------------------------------------------------------------------|
| Bash # 示例:修改Nginx配置后,重启Nginx容器 docker restart nginx # 示例:修改MySQL配置后,重启MySQL容器 docker restart mysql |

重启后,新配置就会在容器里生效,完全不影响镜像,安全无风险。

五、前后端项目部署(小白极简版)

1. Vue前端部署

  1. 本地Vue项目运行打包命令:npm run build,生成dist文件夹
  2. 把dist文件夹里的所有文件,上传到服务器 /docker/nginx/html 目录
  3. 浏览器访问http://服务器IP,直接看到前端页面

2. SpringCloud后端部署

  1. 每个微服务打包成jar包,编写简单Dockerfile(自带JDK)
  2. 把微服务配置加入docker-compose.yml,和其他服务共用同一网络
  3. 微服务连接MySQL、Redis时,直接用容器名当地址(比如mysql:3306),不用改IP

六、小白常用Docker命令(收藏好,随时用)

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Bash # 查看所有运行中的容器 docker ps # 停止所有服务 docker-compose down # 重启单个服务 docker restart 容器名(比如nginx、mysql) # 查看容器运行日志(排查错误用) docker logs -f 容器名 # 查看所有容器(包括停止的) docker ps -a |

七、2G内存服务器专属注意事项(必看)

  1. 内存优先级 :2G内存禁止装ES和GitLab,只运行Portainer、Nginx、MySQL8.0.12、Redis6.2.17、Jenkins,内存占用刚好达标。
  2. 版本固定好处:MySQL指定8.0.12、Redis指定6.2.17,比模糊大版本更稳定、更省内存,不会出现版本浮动报错。
  3. 数据绝对安全:所有数据都存在/docker目录下,哪怕删除容器,数据也不会丢。
  4. 服务互通:同一网络下,微服务直接用容器名访问数据库,不用记服务器IP。
  5. 服务器内存要求:GitLab+ES比较占内存,建议服务器≥2G,低配服务器可以临时注释掉这两个服务
相关推荐
H_老邪几秒前
Linux 与 Docker 常用命令
linux·运维·服务器·docker
吃杠碰小鸡7 分钟前
前端 IndexedDB 完全指南
学习
sky wide23 分钟前
[特殊字符] Docker Swarm 集群搭建指南
java·docker·容器
问道飞鱼35 分钟前
【大模型学习】LangGraph 深度解析:定义、功能、原理与实践
数据库·学习·大模型·工作流
烤麻辣烫1 小时前
I/O流 基础流
java·开发语言·学习·intellij-idea
xmlhcxr1 小时前
Docker容器常用操作与私有仓库部署实验笔记
docker·云原生·eureka
云边散步1 小时前
godot2D游戏教程系列二(22)
笔记·学习·游戏
jincheng_1 小时前
软件设计师上午题|9模块极速背诵版
学习
Eine .1 小时前
Docker容器技术
运维·docker·容器
code_pgf2 小时前
Orin NX 16GB 的 package 安装命令清单 + Docker/工作区目录结构 + bringup 顺序
运维·docker·容器·ros