# docker-deployer **Repository Path**: ismartyx/docker-deployer ## Basic Information - **Project Name**: docker-deployer - **Description**: 用 Go 编写的 Docker 组件一键部署工具,支持 MySQL / MinIO / Redis / 自定义组件,所有容器运行在同一 Docker 自定义网络中。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-06-04 - **Last Updated**: 2026-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Docker 一键部署工具 用 Go 编写的 Docker 组件一键部署工具,支持 **MySQL / PostgreSQL / MinIO / Redis / Nginx / RabbitMQ / Elasticsearch / 自定义组件**,所有容器运行在同一 Docker 自定义网络中。 ## 功能特性 - **内置 8 大组件** - MySQL、PostgreSQL、MinIO、Redis、Nginx、RabbitMQ、Elasticsearch,覆盖 Java / Go / Python 主流技术栈 - **组件自由开关** - 任意选择安装哪些组件,默认启用 MySQL / MinIO / Redis / Nginx - **统一自定义网络** - 所有容器自动加入同一 bridge 网络,容器间可通过容器名互访 - **Nginx SSL 支持** - 内置 SSL 证书配置,启用后自动将证书目录挂载到容器 - **MySQL 初始化脚本** - 配置 `init_sql` 目录,首次启动自动执行目录内 `.sql` / `.sh` 文件 - **自定义端口映射** - 可选择是否暴露端口,支持自定义宿主机/容器端口 - **自定义挂载卷** - 支持 named volume 和 bind mount - **自定义环境变量** - 支持增删改环境变量 - **自定义启动命令** - 可覆盖镜像默认 CMD - **交互式配置** - 运行时逐步引导配置,无需手写配置文件 - **YAML 配置文件** - 支持持久化配置,一次配置多次复用 - **Docker Compose 集成** - 自动检测并启动 docker-compose.yml(端口默认禁用防冲突) - **镜像拉取进度条** - 实时显示拉取进度 - **跨平台编译** - 支持 Windows 和 Linux 一键编译 ## 内置组件一览 | 组件 | 默认镜像 | 默认端口 | 默认启用 | |------|---------|---------|---------| | MySQL | `mysql:8.0` | 3306 | ✅ | | MinIO | `minio/minio:latest` | 9000 / 9001 (Console) | ✅ | | Redis | `redis:7-alpine` | 6379 | ✅ | | Nginx | `nginx:alpine` | 80 / 443 | ✅ | | PostgreSQL | `postgres:16-alpine` | 5432 | ❌ | | RabbitMQ | `rabbitmq:3-management-alpine` | 5672 / 15672 (Web UI) | ❌ | | Elasticsearch | `elasticsearch:8.13.0` | 9200 / 9300 | ❌ | ## 编译 ### 使用 PowerShell 脚本(推荐) ```powershell # 编译当前平台(默认) .\build.ps1 # 编译所有平台 .\build.ps1 -Target all # 仅编译 Windows .\build.ps1 -Target windows # 仅编译 Linux .\build.ps1 -Target linux ``` 输出文件:`dist/docker-deployer__.exe` ### 手动编译 ```bash go mod tidy go build -o docker-deployer . ``` Windows: ```cmd go build -o docker-deployer.exe . ``` ## 使用方法 ### 1. 交互模式部署(推荐首次使用) ```bash ./docker-deployer ``` 程序将引导你选择组件、配置参数,然后自动部署。 ### 2. 生成默认配置文件 ```bash ./docker-deployer -g # 或 ./docker-deployer --generate ``` ### 3. 使用配置文件部署(跳过交互) ```bash ./docker-deployer -c deploy.yaml -y ``` ### 4. 查看容器状态 ```bash ./docker-deployer status -c deploy.yaml ``` ### 5. 停止所有容器 ```bash ./docker-deployer stop -c deploy.yaml ``` ### 6. 删除所有容器和网络 ```bash ./docker-deployer remove -c deploy.yaml ``` ## Docker Compose 集成 当配置文件同级目录存在 `docker-compose.yml` 时,部署会自动: 1. **检测并启动** docker-compose 服务 2. **禁用端口暴露** - 创建临时配置注释掉所有 `ports`,防止与本机端口冲突 3. **强制重新构建** - 带 `build` 配置的服务每次都会重新构建镜像 4. **统一生命周期** - `stop`/`remove`/`status` 命令同时操作 compose 服务 **docker-compose.yml 示例:** ```yaml version: '3.8' services: api: build: context: . dockerfile: Dockerfile.api ports: - "8080:8080" # 会被自动禁用,不会暴露到宿主机 ``` ## 配置文件说明 (`deploy.yaml`) ### 网络 ```yaml network: name: deployer-net # 自定义网络名,所有容器加入此网络 driver: bridge ``` ### MySQL ```yaml mysql: enabled: true image: mysql:8.0 name: deployer-mysql ports: - host: "3306" container: "3306" volumes: - source: mysql-data # named volume target: /var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root123456 MYSQL_DATABASE: appdb expose_ports: true init_sql: ./mysql/initdb.d # 可选:首次启动自动执行目录内 .sql/.sh 文件 ``` > `init_sql` 目录结构示例: > ``` > ./mysql/initdb.d/ > ├── 01_schema.sql # 建表 > ├── 02_data.sql # 初始数据 > └── 03_users.sh # 创建额外用户 > ``` > ⚠️ 仅在数据卷为空(首次启动)时执行,已有数据不会重复执行。 ### PostgreSQL ```yaml postgres: enabled: false image: postgres:16-alpine name: deployer-postgres ports: - host: "5432" container: "5432" volumes: - source: postgres-data target: /var/lib/postgresql/data environment: POSTGRES_DB: appdb POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres123 expose_ports: true ``` ### MinIO ```yaml minio: enabled: true image: minio/minio:latest name: deployer-minio ports: - host: "9000" container: "9000" - host: "9001" # Web Console container: "9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin123 expose_ports: true ``` ### Redis ```yaml redis: enabled: true image: redis:7-alpine name: deployer-redis ports: - host: "6379" container: "6379" expose_ports: true ``` ### Nginx(含 SSL) ```yaml nginx: enabled: true image: nginx:alpine name: deployer-nginx ports: - host: "80" container: "80" - host: "443" container: "443" volumes: - source: ./nginx/html target: /usr/share/nginx/html - source: ./nginx/conf target: /etc/nginx/conf.d expose_ports: true ssl: enabled: false # 改为 true 启用 SSL cert_file: ./nginx/certs/server.crt # 证书文件路径 key_file: ./nginx/certs/server.key # 私钥文件路径 cert_dir: ./nginx/certs # 证书目录,挂载到容器 /etc/nginx/certs ``` ### RabbitMQ ```yaml rabbitmq: enabled: false image: rabbitmq:3-management-alpine name: deployer-rabbitmq ports: - host: "5672" container: "5672" - host: "15672" # Web 管理界面:http://localhost:15672 container: "15672" volumes: - source: rabbitmq-data target: /var/lib/rabbitmq environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: admin123 expose_ports: true ``` ### Elasticsearch ```yaml elasticsearch: enabled: false image: elasticsearch:8.13.0 name: deployer-elasticsearch ports: - host: "9200" container: "9200" - host: "9300" container: "9300" volumes: - source: es-data target: /usr/share/elasticsearch/data environment: discovery.type: single-node xpack.security.enabled: "false" ES_JAVA_OPTS: "-Xms512m -Xmx512m" # 按实际内存调整 expose_ports: true ``` ### 自定义组件 ```yaml custom: - enabled: true image: your-app:latest name: my-app ports: - host: "8080" container: "8080" volumes: - source: ./app/logs target: /app/logs environment: DB_HOST: deployer-mysql # 通过容器名访问同网络内组件 DB_PORT: "3306" REDIS_HOST: deployer-redis MINIO_ENDPOINT: deployer-minio:9000 AMQP_URL: amqp://admin:admin123@deployer-rabbitmq:5672/ ES_HOST: http://deployer-elasticsearch:9200 expose_ports: true ``` ## 卷挂载说明 **Named Volume(默认)**:`source` 为普通名称(如 `mysql-data`) - Docker 引擎在 ContainerCreate 时自动创建,无需提前操作 - 数据存储在 `/var/lib/docker/volumes//_data` **Bind Mount(自定义路径)**:`source` 以 `/`、`./`(Linux)或盘符 `C:\`(Windows)开头 - 数据存储到指定宿主机目录,适合磁盘空间规划或数据迁移场景 - 宿主机目录**必须提前创建**,否则容器启动报错: ```bash mkdir -p /data/docker-volumes/mysql-data chown 999:999 /data/docker-volumes/mysql-data # mysql 容器内以 UID 999 运行 ``` ## 依赖 - Go 1.21+ - Docker Engine(本机需要安装并运行 Docker)