一、项目简介

本文将手把手教你使用 Dockerfile + Docker Compose 构建并部署 KodExplorer(可道云)。我们将基于 CentOS 7.9 构建自定义镜像,并使用 MariaDB + Redis + Nginx + PHP 完成完整的运行环境编排。
最终实现效果:
✅ 一键部署
✅ 容器化管理
✅ 浏览器访问私有云盘

二、准备工作

1. 实验环境

组件版本
操作系统CentOS 7.9
Docker20.10+
Docker Composev2.x
可道云KodExplorer 4.37

2. 目录结构建议

KodExplorer/
├── Dockerfile-mariadb
├── Dockerfile-redis
├── Dockerfile-nginx
├── Dockerfile-php
├── docker-compose.yaml
├── local.repo
├── yum/                # 本地 yum 源
├── mysql_init.sh
├── php/
│   └── kodexplorer4.37.zip
└── data/              # 持久化数据目录

三、构建 MariaDB 镜像

编写 Dockerfile 构建镜像 explorer-mysql:v1.0,要求使用 CentOS 7.9.2009 镜像作为基础镜像,完成 MariaDB 数据库的安装,设置 root 用户的密码为 root,并设置 MariaDB 数据库开机自启

3.1 下载软件包解压及导入 CentOS 基础镜像:

tar -zxvf Explorer.tar.gz
docker load -i KodExplorer/CentOS_7.9.2009.tar
cd KodExplorer

3.2 MySQL 初始化脚本:

[root@k8s-master-node1  KodExplorer]# vi mysql_init.sh 

#!/bin/bash

# 初始化 MariaDB 数据目录
mysql_install_db --user=root

# 后台启动 MariaDB
mysqld_safe --user=root &

# 等待数据库启动完成
sleep 8

# 设置 root 密码
mysqladmin -u root password 'root'

# 授权 root 远程访问
mysql -uroot -proot -e \
"grant all on *.* to 'root'@'%' identified by 'root'; flush privileges;"

3.3 编写 yum 源:

[root@k8s-master-node1  KodExplorer]# vi local.repo 
[yum]
name=yum
baseurl=file:///root/yum
gpgcheck=0
enabled=1

3.4 编写 Dockerfile(explorer-mysql:v1.0)

[root@k8s-worker-node1 KodExplorer]# vi Dockerfile-mariadb 
# 使用 CentOS 7.9 作为基础镜像
FROM centos:centos7.9.2009
MAINTAINER Chinaskills

# 清理原有 yum 源
RUN rm -rfv /etc/yum.repos.d/*

# 配置本地 yum 源
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum

# 设置字符集
ENV LC_ALL en_US.UTF-8

# 安装 MariaDB 服务器
RUN yum -y install mariadb-server

# 执行初始化脚本
COPY mysql_init.sh /opt/
RUN bash /opt/mysql_init.sh

# 暴露 3306 端口
EXPOSE 3306

# 启动 MariaDB
CMD ["mysqld_safe", "--user=root"]

3.5 构建镜像:

docker build -t explorer-mysql:v1.0 -f Dockerfile-mariadb .
docker images | grep explorer

四、构建 Redis 缓存镜像

编写 Dockerfile 构建镜像 explorer-redis:v1.0,要求使用 centos:7.9.2009 镜像作为基础镜像,完成 Redis 服务的安装,修改其配置文件关闭保护模式,并设置 Redis 服务开机自启

4.1 编写 Dockerfile(explorer-redis:v1.0)

[root@k8s-worker-node1 KodExplorer]# vi Dockerfile-redis 
FROM centos:centos7.9.2009
MAINTAINER Chinaskills

# 配置本地 yum 源
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum

# 安装 Redis
RUN yum -y install redis

# 修改 Redis 配置
# 1. 绑定 0.0.0.0 允许外部访问
# 2. 关闭 protected-mode 以便 Docker 容器访问
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/redis.conf && \
    sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis.conf

EXPOSE 6379
CMD ["/usr/bin/redis-server", "/etc/redis.conf"]

4.2 构建镜像

docker build -t explorer-redis:v1.0 -f Dockerfile-redis .
docker images

五、构建 Nginx Web 服务器镜像

编写 Dockerfile 构建镜像 explorer-nginx:v1.0,要求使用 centos:7.9.2009 镜像作为基础镜像,完成 Nginx 服务的安装,并设置 Nginx 服务开机自启

5.1 编写 Dockerfile(explorer-nginx:v1.0)

[root@k8s-worker-node1 KodExplorer]# vi Dockerfile-nginx 
FROM centos:centos7.9.2009
MAINTAINER Chinaskills

# 配置本地 yum 源
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum

# 安装 Nginx
RUN yum -y install nginx

EXPOSE 80

# 关键:前台运行 Nginx,防止容器启动后立即退出
CMD ["nginx", "-g", "daemon off;"]

5.2 构建镜像

docker build -t explorer-nginx:v1.0 -f Dockerfile-nginx .
docker images

六、构建 PHP 与可道云运行环境镜像

编写 Dockerfile 构建镜像 explorer-server:v1.0,要求使用 centos:7.9.2009 镜像作为基础镜像,完成 HTTP 和 PHP 服务的安装,然后将 kodexplorer4.37.zip 解压到 /var/www/html 目录下,修改 HTTP 服务的监听地址为本机,并设置 HTTP 服务开机自启。编写 docker-compose.yaml 文件,要求使用镜像 mysql、redis、nginx 和 explorer 完成 Explorer 管理系统的编排部署。

6.1 编写 Dockerfile(explorer-server:v1.0)

[root@k8s-worker-node1 KodExplorer]# vi Dockerfile-php 
FROM centos:centos7.9.2009
MAINTAINER Chinaskills

# 配置本地 yum 源
RUN rm -rf /etc/yum.repos.d/*
COPY local.repo /etc/yum.repos.d/
COPY yum /root/yum

# 安装 Apache 和 PHP 及相关扩展(GD库、MB字符串等)
RUN yum install httpd php php-cli unzip php-gd php-mbstring -y

# 设置工作目录为 Web 根目录
WORKDIR /var/www/html

# 复制可道云压缩包并解压
COPY php/kodexplorer4.37.zip .
RUN unzip kodexplorer4.37.zip

# 赋予目录写权限(可道云需要写入配置文件和上传文件)
RUN chmod -R 777 /var/www/html

# 修改 Apache 配置,取消 ServerName 注释
RUN sed -i 's/#ServerName www.example.com:80/ServerName localhost:80/g' /etc/httpd/conf/httpd.conf 

EXPOSE 80

# 以前台模式启动 Apache
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

6.2 构建镜像

docker build -t explorer-server:v1.0 -f Dockerfile-php .
docker images

七、Docker-Compose 编排部署

编写docker-compose.yaml完成Explorer资源管理系统的部署,要求定义mysql、redis、nginx和explorer 共四个 Service,分别使用镜像explorer-redis:v1.0、explorer-mysql:v1.0、explorer-nginx:v1.0、explorer-server:v1.0,并将explorer 的 80 端口映射到宿主机的8090端口。

[root@k8s-worker-node1 KodExplorer]# vi docker-compose.yaml 
version: '3.2'
services:
  nginx:
    container_name: nginx
    image: explorer-nginx:v1.0
    volumes:
      - ./www:/data/www
      - ./nginx/logs:/var/log/nginx
    ports:
      - "80:80"
      - "443:443"
    restart: always
    depends_on:
      - explorer
    links:
      - explorer
    tty: true

  mysql:
    container_name: mysql
    image: explorer-mysql:v1.0
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./mysql/logs:/var/lib/mysql-logs
    ports:
      - "3306:3306"
    restart: always

  redis:
    container_name: redis
    image: explorer-redis:v1.0
    ports:
      - "6379:6379"
    volumes:
      - ./data/redis:/data
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
    restart: always
    command: redis-server /usr/local/etc/redis/redis.conf

  explorer:
    container_name: explorer
    image: explorer-server:v1.0
    ports:
      - "8090:80"
    links:
      - mysql
      - redis
    restart: always
    depends_on:
      - redis
      - mysql

八、启动与验证

在 docker-compose.yaml所在目录执行:
8.1 启动所有服务

# 后台启动所有容器
docker-compose up -d

# 查看容器运行状态
docker-compose ps

# 查看日志(排错用)
docker-compose logs -f

8.2 访问验证
打开浏览器,访问服务器 IP 加端口:
登录界面
进入成功

九、总结与心得

本文通过 4 个 Dockerfile 和 1 个 Compose 文件,完整实现了可道云的容器化部署。

组件作用端口
MariaDB存储用户数据和配置3306
Redis缓存加速6379
NginxWeb 服务/代理80/443
Explorer可道云应用本体8090

避坑指南:

  1. 本地 yum 源:在生产环境中建议使用阿里云或华为云 yum 源,本地源仅用于无外网环境。
  2. 权限问题:如果访问报 500 错误,通常是 /var/www/html 目录没有写权限,记得 chmod 777
  3. 数据库地址:在可道云安装界面,数据库主机名填 mysql(即 service 名称),而不是 localhost

更多推荐