Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析

Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析

文章目录

  • [Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析](#Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析)
  • 一、文章简介
  • 二、镜像选择
  • [三、docker 通用参数介绍](#三、docker 通用参数介绍)
  • [四、docker 启动 gitlab-ce](#四、docker 启动 gitlab-ce)
  • [五、docker 启动 nacos](#五、docker 启动 nacos)
  • [六、docker 启动 redis](#六、docker 启动 redis)
  • [七、docker 启动 mysql](#七、docker 启动 mysql)
  • [八、docker 启动 minio](#八、docker 启动 minio)

一、文章简介

本篇文章用于介绍 gitlab-ce、nacos、redis、mysql、minio 服务的 docker 启动命令行

(ps:本来不想再写 docker 启动命令行,但之前有位读者想要 docker 启动 gitlab-ce ,又因为一个服务的启动命令行实在没什么可写,所以将最近用到的几个服务写在一起)

二、镜像选择

我使用的 docker 镜像都来自 Docker hub,请需要的朋友自行查阅。

三、docker 通用参数介绍

  • -d:表示后台运行容器
  • -p:端口映射,格式:宿主机端口:容器内端口
  • -v:用于目录挂载,实现数据持久化,格式:宿主机目录:容器目录
  • -e:设置环境变量
  • --name:用于指定容器名称

四、docker 启动 gitlab-ce

bash 复制代码
docker run  \
-d \
-p 180:80 \
-p 1443:443 \
-p 122:22 \
-v "$HOME/docker/gitlab/config:/etc/gitlab" \
-v "$HOME/docker/gitlab/logs:/var/log/gitlab" \
-v "$HOME/docker/gitlab/data:/var/opt/gitlab" \
--hostname 127.0.0.1 \
--name gitlab \
gitlab/gitlab-ce:latest

1、启动 gitlab-ce 需要注意 gitlab-ce 所需的三个端口

  • 80、443 端口是用于 http(s) 协议,22 端口用于 ssh 协议
  • http(s) 协议用于 web 控制台和拉取代码库的 http(s) 路径
  • ssh 协议用于拉取代码库的 git 路径
  • 由于启动容器时将三个端口映射至其他端口,所以访问 web 页面、拉取代码时要指定端口
  • http(s) 协议比较好理解,略过,这里我贴一下 ssh 协议端口指定和未指定的样式
  • 从 gitlab 页面复制的链接样式
bash 复制代码
git clone git@127.0.0.1:root/test.git
  • 指定端口后的 ssh 链接样式
bash 复制代码
git clone ssh://git@127.0.0.1:122/root/test.git

2、-v 参数是将容器内的目录挂载出来,用于实现 gitlab 数据持久化,格式:宿主机目录:容器目录

  • 容器启动后会在 "$HOME/docker/gitlab/config:/etc/gitlab" 目录下生成配置文件,其中 initial_root_password 文件内会生成 root 用户的初始密码
  • 容器启动后会在每个挂载出来的目录下生成很多文件,可据此确认挂载是否成功。

ps:一定要确定目录是否挂载成功,数据持久化是否成功,避免数据丢失。

3、hostname 参数

  • 此处指定的 hostname 会用在访问仓库链接上,运行容器时未指定可以删除容器重新指定、启动,域名或地址会自动更改

五、docker 启动 nacos

bash 复制代码
docker run \
  -d \
  -p 18080:8080 \
  -p 18848:8848 \
  -p 19848:9848 \
  -e MODE=standalone \
  -e SPRING_DATASOURCE_PLATFORM=mysql \
  -e MYSQL_SERVICE_HOST=host.docker.internal \
  -e MYSQL_SERVICE_PORT=3306 \
  -e MYSQL_SERVICE_DB_NAME=nacos \
  -e MYSQL_SERVICE_USER=root \
  -e MYSQL_SERVICE_PASSWORD=password \
  -e MYSQL_DATABASE_NUM=1 \
  -e NACOS_AUTH_ENABLE=true \
  -e NACOS_AUTH_IDENTITY_KEY=nacos \
  -e NACOS_AUTH_IDENTITY_VALUE=nacos \
  -e NACOS_AUTH_TOKEN=ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQ== \
  --name nacos \
  nacos/nacos-server:latest

关于 nacos 的端口映射不做介绍,感兴趣的朋友可以自行查阅 nacos 相关信息

环境变量介绍

  • -e MODE=standalone:表示但节点运行 nacos
  • SPRING_DATASOURCE_PLATFORM=mysql:指定用于数据存储的数据库类型为 mysql
  • MYSQL_SERVICE_HOST=host.docker.internal:指定数据库域名或ip,此处使用 host.docker.internal 是我想连接宿主机部署的 mysql,该参数好像只在 mac 版本的 docker-desktop 中有用。
  • MYSQL_SERVICE_PORT=3306:指定 mysql 端口
  • MYSQL_SERVICE_DB_NAME=nacos:指定数据库名称
  • MYSQL_SERVICE_USER=root:数据库连接用户
  • MYSQL_SERVICE_PASSWORD=password:数据库连接密码
  • MYSQL_DATABASE_NUM=1:指定数据库数量为1
  • NACOS_AUTH_ENABLE=true:开启Nacos的认证功能
  • NACOS_AUTH_IDENTITY_KEY=nacos:控制台登陆用户名
  • NACOS_AUTH_IDENTITY_VALUE=nacos:控制台登陆密码
  • NACOS_AUTH_TOKEN=ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQ==:认证中使用的 JWT 令牌密钥。备注:此处的 token 不可泄露

ps:初次启动 nacos 后,数据库中会自动创建很多表,可据此确认数据持久化是否成功,避免数据丢失。

六、docker 启动 redis

bash 复制代码
docker run \
-d \
-p 6379:6379 \
-v "$HOME/docker/redis/redis.conf:/etc/redis/redis.conf" \
-v "$HOME/docker/redis/data:/data" \
--name redis \
redis:latest \
redis-server /etc/redis/redis.conf

1、redis 配置登陆密码、绑定 ip 时可以挂载配置文件,然后在命令行最后写redis-server /etc/redis/redis.conf指定 redis 启动时的配置文件位置

下面给出一个配置文件的简单示例

yaml 复制代码
# Redis配置文件

# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
# daemonize no

# 指定Redis监听端口,默认端口为6379
# port 6379

# 绑定的主机地址,不要绑定容器的本地127.0.0.1地址,因为这样就无法在容器外部访问
bind 0.0.0.0

#需要密码则打开
requirepass password

# 持久化
appendonly yes

2、-v "$HOME/docker/redis/data:/data":挂载 redis 的数据存储目录

备注:由于 redis 一般用于存储缓存数据,容器删除重建问题也不大,所以测试环境中数据存储目录可以不用挂载。如果懒得设置 redis 密码,配置文件也可以不用挂载。

七、docker 启动 mysql

bash 复制代码
docker run \
-d \
-p 13306:3306 \
-v "$HOME/docker/mysql/log:/var/log/mysql" \
-v "$HOME/docker/mysql/data:/var/lib/mysql" \
-e MYSQL_ROOT_PASSWORD=password \
--name mysql \
mysql:latest
  1. mysql 启动要注意数据存储目录的挂载,$HOME/docker/mysql/data:/var/lib/mysql这个千万不要漏了,当mysql 启动后对应目录下会生成很多初始化文件,可以确认挂载是否成功。
  2. "$`HOME/docker/mysql/data:/var/lib/mysql":用于挂在日志文件
  3. -e MYSQL_ROOT_PASSWORD=password:指定 mysql 初始密码

八、docker 启动 minio

bash 复制代码
docker run \
-d \
-p 9090:9090 \
-p 9000:9000 \
-e "MINIO_ACCESS_KEY=root" \
-e "MINIO_SECRET_KEY=password" \
-v "$HOME/docker/minio/data:/data" \
--name minio \
minio/minio:RELEASE.2025-04-22T22-12-26Z \
server /data --console-address ":9090" -address ":9000"

minio 是一个提供对象存储的服务,个人感觉比较鸡肋,建议有条件的朋友使用各大厂商提供的对象存储服务,省心。

  • 9090:该端口是 minio web 控制台的端口,浏览器访问时要指定端口
  • 9000:该端口是 API 服务端口,服务内存储的文件可以用ip + 9000 + bucket + 文件路径访问
  • "MINIO_ACCESS_KEY=root":指定用户名
  • "MINIO_SECRET_KEY=password":指定密码
  • "$HOME/docker/minio/data:/data":挂载数据文件
  • server /data --console-address ":9090" -address ":9000"
    用于指定容器内 minio 服务控制台、api服务的端口地址

ps:数据文件一定要挂载,且需要创建 bucket、上传文件进行测试目录是否挂载成功,避免数据丢失,成功的会在该目录下看到对应的 bucket

ps:minio 服务自minio/minio:RELEASE.2025-04-22T22-12-26Z版本后删除了 web 控制台中关于 bucket 的授权策略功能。

相关推荐
要站在顶端3 小时前
Jenkins 使用容器运行自动化任务详细文档
docker·自动化·jenkins
道可到3 小时前
别再瞎拼技术栈!Postgres 已经能干 Redis 的活了
redis·后端·postgresql
野犬寒鸦3 小时前
从零起步学习Redis || 第十二章:Redis Cluster集群如何解决Redis单机模式的性能瓶颈及高可用分布式部署方案详解
java·数据库·redis·后端·缓存
闲人编程4 小时前
将你的Django/Flask应用部署到云服务器(Docker实战)
服务器·docker·容器·django·flask·部署·web
没有口袋啦4 小时前
K8s集群多节点部署(Ubuntu22.04)
docker·云原生·容器·kubernetes
IvanCodes4 小时前
七、Docker核心技术:深入理解网络模式 (Bridge, Host, None, Container)
网络·docker·容器
黑金IT7 小时前
本地 Docker 镜像送上云:腾讯云无服务器与容器化全栈迁移实战
docker·serverless·腾讯云
勇往直前plus7 小时前
CentOS 7 环境下 RabbitMQ 的部署与 Web 管理界面基本使用指南
前端·docker·centos·rabbitmq