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,低配服务器可以临时注释掉这两个服务
相关推荐
Drache_long18 小时前
Docker(二)
运维·docker·容器
234710212718 小时前
4.20 学习笔记
软件测试·笔记·python·学习
Jackyzhe18 小时前
从零学习Kafka:ZooKeeper vs KRaft
学习·zookeeper·kafka
sensen_kiss18 小时前
CAN302 Coursework1对 JavaScript 和 PHP 的考察
javascript·学习·php
哥本哈士奇18 小时前
SQLAlchemy 学习笔记
笔记·学习
呼叫冰河谷18 小时前
Unity学习笔记(六)——3DRPG游戏(4)
笔记·学习·游戏
qeen8718 小时前
【算法笔记】前缀和经典题目解析
c语言·c++·笔记·学习·算法
小小仙。18 小时前
IT自学第四十天
spring·docker
Aliex_git18 小时前
前端监控笔记(三)
前端·笔记·学习
zzb158018 小时前
Kotlin 密封类与延迟初始化学习笔记
笔记·学习·kotlin