DC-Starter是帮你运行Docker-Compose的懒人脚本,不用死背命令,一键启动、关闭容器、查看日志、检查容器状态。
做开发的同学经常要搭建本地运行环境,虽然Docker可以简化工作,但也带来了一堆要记忆的命令和参数。
-
如果你不想手敲mysql命令行:
$ docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p。 -
或者NAS稳定运行三个月后,重启,你已经想不起三个月前启动jellyfin的命令:
$ docker run -d --name jellyfin -v /volume1/docker/jellyfin/config:/config -v /volume1/docker/je-llyfin/cache:/cache -v /volume1/video:/video -p 8096:8096 -p 8920:8920 --device=/dev/dri/renderD128 --restart unless-stopped jellyfin/jellyfin -
你就找对地方了。
只需三步,你就可以拥有一套具备三层结构的后台应用:
-
拉取项目代码:
git clone https://github.com/philiphuang/docker-compose-starter.git -
运行run.sh
cd docker-compose-starter ./run.sh进入交互菜单,选择
a->b,启动所有服务。(第一次运行会经历漫长的拉取镜像过程,请耐心等候。)当你看到下面的文字,你已经喜提一个三层结构的应用,nginx + (tomcat,springboot) + mysql(包含系统库 mysql-sys 和应用库 mysql-app 两个容器)
-
打开浏览器访问宿主机,例如:http://localhost/
关掉所有服务(交互菜单选a -> c),去./code目录下替换你的jar和war,重新执行第二步,你就可以把你的应用跑起来。
DC-Starter开箱时已包含一个三层结构的Java应用,你可以以此为骨架,修改成你自己的应用。或者在家里的NAS跑个jellyfin,aria2,也是挺方便的。
我们倒着来,先看看运行阶段DC-Starter有什么功能。
DC-Starter对Docker-Compose的命令进行封装,已经包含基本的启动,关闭,查看日志等基本功能,如果不够用的话,还可以加入你的自定义脚本。
老规矩,所有操作都从 ./run.sh 开始
主菜单提供以下功能:
a) 对所有服务执行操作 - 进入后选择具体操作(启动、关闭、重启)
b) 对单个服务执行操作 - 选择容器后执行具体操作(启动、关闭、重启)
c) 查看日志 - 选择容器查看实时日志
d) 进入单个容器的shell - 进入容器命令行
e) 进入mysql命令行 - 直接连接到mysql-app容器的mysql命令行
f) 查看服务的运行状态 - 显示所有容器的启动时间、端口和IP等信息
g) 自定义功能菜单 - 通过ACTION_LIST添加的自定义功能(如备份、初始化配置等)
h) 退出,或者返回上一级菜单
无论简单还是复杂的应用,都离不开下面基本步骤:
- 修改.env文件
- 注入docker-compose.yml
- 注入jar,html文件
- 修改run.sh
- .env保存了最核心的配置信息;
- 宿主机上如果运行了多套应用,每套应用的PROJECT_NAME和IP_RANGE不能重复;
- 记得把密码改掉;
- 可以全项目搜索"TODO",找到需要改动的地方。
- 服务名(service name)要和run.sh中CONTAINER_LIST变量的值对应上。
-
DC-Starter设计的起因是方便开发人员调试代码,因此代码不是打包在镜像里面,而是映射到容器里面;同时也预置了一些目录,对配置文件、代码进行了分离。当然,代码打包到镜像里面也是不拒绝的,而且更适合生产环境。
- code目录:运行代码,例如jar,war,也接受其他语言的代码,记得在docker-compose.yml文件中映射到容器里面;
- config目录:存放各个服务的配置文件;
- mysql初始化脚本位于./config/mysql_sys_init(系统库)和./config/mysql_app_init(应用库),参看docker hub的mysql镜像的说明,https://hub.docker.com/_/mysql
- nginx的配置文件位于./config/nginx;
- data目录存放运行过程中产生的业务数据,例如mysql的文件和用户上传的文件,可统一备份此目录下的文件;
- logs目录存放日志,可定时清理。
-
修改run.sh
- 可以在run.sh里面加入自定义的菜单功能,通过ACTION_LIST变量添加,格式为"菜单文本 函数名",例如:
然后实现对应的函数即可。
ACTION_LIST=" 备份数据 backupData 初始化配置 initConfig "
- 如果服务是由多个yml文件组成,需修改DCC_COMMAND变量;
- 如果需要通过不同的脚本提供不同的服务目标,你可以编写针对特定业务流程的代码,例如还原数据是低频操作,不放在run.sh里面,具体实现可参考restore.sh,运行方式是
./run.sh restore.sh。
- 可以在run.sh里面加入自定义的菜单功能,通过ACTION_LIST变量添加,格式为"菜单文本 函数名",例如:
DC-Starter支持子模块化管理,可以将独立的子项目(如prj-dashboard)作为子模块动态加载:
- 在run.sh中的subModules变量里添加子模块目录名:
subModules="prj-dashboard your-submodule" - 子模块目录需包含自己的docker-compose.yml、.env和run.sh文件
- 主项目的run.sh会自动合并子模块的配置(通过laodSubModules函数)
- 子模块的run.sh中定义CONTAINER_LIST和ACTION_LIST,会自动整合到主菜单中
- 如果你需要用DC-Starter管理多个项目,一个方法是把目录复制多一份,另外一个方法是在docker-compose.yml同级建porject1、project2目录,把code,config在project1、project2都复制一份;也可以使用子模块机制来组织独立的子项目;
- config_repositry目录存放了一些常用的配置模板,如redis,可按需食用。



