在绿联NAS私有云中,我们常常会用到Docker功能来拓展NAS各类玩法。而在搭建 Docker 容器时,采用 Docker Compose 方式,能让搭建过程高效且便捷,快速将各类应用环境搭建就绪。
Docker Compose
是一个用于定义和运行多容器 Docker 应用程序的工具,通过 docker-compose.yml
文件来配置应用的服务、网络和卷等。以下是 docker-compose.yml
文件的编写规则:
docker-compose.yml
文件开头需要声明版本,不同版本支持的特性有所不同。目前较常用的是版本 3,它支持 Docker 1.13.0 及以上版本。
services
部分定义了应用中的各个服务,每个服务对应一个容器。每个服务都有自己的配置项,以下是一些常见的配置:
指定要使用的 Docker 镜像。
services:
web:
image: nginx:latest
如果没有现成的镜像,需要从 Dockerfile 构建镜像,可以使用 build
选项。可以指定 Dockerfile 所在的目录,也可以指定 Dockerfile 的路径。
services:
app:
build:
context: ./app # Dockerfile 所在的目录
dockerfile: Dockerfile.custom # 自定义 Dockerfile 的名称
将容器的端口映射到宿主机的端口,格式为 宿主机端口:容器端口
。
services:
web:
image: nginx:latest
ports:
- "8080:80"
设置容器的环境变量,可以是键值对,也可以是只指定变量名,从宿主机环境中获取值。
services:
db:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=myapp
将宿主机的目录或文件挂载到容器中,格式为 宿主机路径:容器路径
。
services:
web:
image: nginx:latest
volumes:
- ./html:/usr/share/nginx/html
2.6 depends_on
指定服务之间的依赖关系,确保在启动当前服务之前,依赖的服务已经启动。
services:
web:
image: nginx:latest
depends_on:
- app
app:
image: myapp:latest
可以定义自定义网络,让容器之间可以通过网络进行通信。
version: '3'
services:
web:
image: nginx:latest
networks:
- my_network
app:
image: myapp:latest
networks:
- my_network
networks:
my_network:
driver: bridge
可以定义命名卷,用于持久化数据。
version: '3'
services:
db:
image: mysql:latest
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
以下是一个完整的 docker-compose.yml
文件示例,包含一个 Nginx 服务和一个 MySQL 服务:
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=myapp
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
通过以上规则,你可以编写一个完整的 docker-compose.yml
文件,在NAS的Docker应用中可以将文件导入进去使用。