玩转绿联NAS:小白入坑之如何使用Docker compose搭建项目?
一、什么是Docker Compose?
Docker Compose 是 Docker 官方推出的一个多容器应用编排工具。它的核心作用是帮助开发者通过一个命令,就能启动、停止和管理一组相互关联的Docker容器。
可以把Docker Compose理解成一个“容器乐队指挥”。当你的应用包含多个服务(如前端、后端、数据库、缓存等)时,逐个手动启动和管理它们会非常繁琐。Docker Compose 能让你用一个统一的“乐谱”(即配置文件)来指挥所有“乐手”(即容器)协同工作。
二、为什么需要 Docker Compose?
小白理解:告别繁琐的命令,直接用一个yaml文件就可以一键启动。
三、既然这么方便在绿联上怎么用?
1、进入应用中心,先要安装docker,然后打开docker;


2、选择项目-点击创建;

3、打开文件管理器-共享文件夹-docker-创建项目名称的文件夹,如test;

4、然后把项目的docker compose粘贴到下方compose配置,点击立即部署就会开始,然后如果是勾选了创建完成后立即运行,就会直接启动;

5、基础的Docker compose搭建项目教程就结束了。
四、基础的语法解读
1、挂载路径解析(Volumes)
在 compose.yaml 中,volumes 的写法分为三种类型,路径解析规则如下:

关键注意点(易错):
宿主机路径不存在:如果使用相对/绝对路径(绑定挂载),且宿主机目录不存在,Docker 会自动创建该目录(但如果是文件,则会报错)。
权限问题:宿主机目录的 UID/GID 会映射到容器内。若容器内进程(如 Nginx 以
www-data用户运行)无权限读写,需确保宿主机目录权限或使用:z/:Z(SELinux)或:c(Windows)标志。只读挂载:在路径末尾加
:ro,容器内将无法修改该目录。- ./config:/app/config:ro
2、重启方法(Restart)
这里需要严格区分 “重启策略”(配置) 和 “手动重启命令”(操作)。
A、重启策略(restart 字段)
写在 Compose 文件中,定义容器异常退出后的行为:

B、手动重启命令(操作)
在终端执行,用于立即生效配置变更或重置容器状态:

3、镜像(Image)
Docker Compose 中,image 字段的写法决定了从哪里拉取或如何命名:

A、与 build 联动(重要):
如果同时写了 image 和 build:

含义:
docker compose build会构建镜像并打上myapp:dev标签。若 只写
build不写image,Compose 会自动生成一个随机镜像名(如project_app)。若 只写
image不写build,直接拉取该镜像。
B、拉取策略(pull_policy):
always:每次都尝试拉取最新镜像。missing:本地没有时才拉取(默认)。never:强制使用本地,存在则用,不存在则报错。
4、环境变量(Environment Variables)
Docker Compose 里有两种截然不同的环境变量,最容易混淆:
A、容器内环境变量(给应用读的)
使用
environment或env_file,写入容器的系统环境变量中(如process.env或$_ENV)。

B、Compose 文件自身的变量替换(给 Compose 读的)
在 yaml 文件的 值中 使用
${VARIABLE},让 Compose 在解析文件时进行文本替换。

这种变量默认从
.env文件(项目根目录)或 当前 Shell 环境 中读取。
C、优先级顺序(由高到低):
docker compose命令行设置:docker compose run -e VAR=value ...Shell 环境变量:
export VAR=value && docker compose upCompose 文件内的
environment字段env_file指定的文件镜像自带的默认环境变量(如
MYSQL_ROOT_PASSWORD默认空)
安全提醒:environment 字段明文显示在 yaml 中,绝对不要写数据库密码等敏感信息。建议使用 env_file + .env(并加入 .gitignore),或使用 Docker Secrets(生产环境)。
5、最终总结
挂载:牢记
./是相对项目目录,命名卷不带点;权限不够就改宿主机目录权限。重启:改配置用
up -d(重建),只重置进程用restart。镜像:和
build配合可以打标签;生产环境强烈建议用@sha256锁定版本。环境变量:区分“给容器用的”和“给 Compose 文件用的”,密码千万别写死在
environment里。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
