Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 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 启动时的配置文件位置 下面给出一个配置文件的简单示例

config 复制代码
# 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 启动要注意数据存储目录的挂载,** <math xmlns="http://www.w3.org/1998/Math/MathML"> H O M E / d o c k e r / m y s q l / d a t a : / v a r / l i b / m y s q l ∗ ∗ 这个千万不要漏了,当 m y s q l 启动后对应目录下会生成很多初始化文件,可以确认挂载是否成功。 2 、 " HOME/docker/mysql/data:/var/lib/mysql**这个千万不要漏了,当mysql 启动后对应目录下会生成很多初始化文件,可以确认挂载是否成功。 2、" </math>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 的授权策略功能。
相关推荐
用户4099322502122 小时前
PostgreSQL视图不存数据?那它怎么简化查询还能递归生成序列和控制权限?
后端·ai编程·trae
karry_k2 小时前
CopyOnWriteArraySet
后端
spmcor2 小时前
NestJS 统一响应格式最佳实践:标准化 API 返回结构
后端
SamsongSSS2 小时前
Django之APPEND_SLASH配置爬坑
后端·python·django
EMQX3 小时前
ESP32 + MCP over MQTT:基于大模型打造人格化情感智能体
后端
karry_k3 小时前
为什么CopyOnWriteArrayList是线程安全的?
后端
hello 早上好3 小时前
Spring Boot 核心启动机制与配置原理剖析
java·spring boot·后端
武子康3 小时前
大数据-112 Flink DataStream API :数据源、转换与输出 文件、Socket 到 Kafka 的完整流程
大数据·后端·flink
Leon_az3 小时前
Docker 容器如何实现隔离
linux·docker·容器