Docker Compose 模板文件
Docker Compose 跟 Dockerfile 类似的文件是 docker-compose.yml
根据后缀我们知道使用的是 YAML 语法;
version
docker-compose.yml 的第一行是用来定义版本的;
允许的值我们可以从官网查询;https://docs.docker.com/compose/compose-file
version: "3.7"
service
定义完版本接下来就是 service
了;
service
部分是我们的核心;定义了要使用那些服务;
version: "3.7"
services:
redis: # 服务名称
image: redis:5 # 使用官方的 redis 5 镜像
container_name: lnmp-redis # 容器名称
image
跟Docker image中是一个东西;
可以指定自己制作的 image
;
version: "3.3"
services:
# redis
mysql:
image: xmlwch/mysql
container_name: lnmp-mysql
environment:
- MYSQL_ROOT_PASSWORD=hardwork
- MYSQL_DATABASE=test
- MYSQL_USER=Niord
- MYSQL_PASSWORD=hardwork
这里用 environment
来定义环境变量;
作用是设置账号密码之类的;
更多可以定义的环境变量可以查看官方文档;
再接下来我们把 NGINX
也加进来;
version: "3.3"
services:
# Redis
# MySQL
nginx:
image: xmlwch/nginx
container_name: lnmp-nginx
ports:
- "8082:80"
我们在 NGINX
服务中用 ports
定义了对外暴露的端口;
最后把 PHP 的镜像也加进来;
version: "3.3"
services:
# Redis
# MySQL
# NGINX
php:
image: xmlwch/php:${APP_ENV}
container_name: lnmp-php
tty: true
这里的 tty
是之前命令 docker -it
中的 t
;
表示需要一个交互界面启用 tty
特性;
另外这里还用了变量 ${APP_ENV}
;
但是我们并不能像 Dockerfile
中那样定义变量;
而是要把它定义在跟 docker-compose.yml 同目录的 .env
文件中;
APP_ENV=local
volumes
我们需要持久化保存 MySQL 中的数据;
同时我们需要把我们的代码加载到容器中;
因此我们还需要 volumes
;
version: "3.3"
services:
redis:
image: redis:5
container_name: lnmp-redis
mysql:
image: xmlwch/mysql
container_name: lnmp-mysql
environment:
- MYSQL_ROOT_PASSWORD=hardwork
- MYSQL_DATABASE=test
- MYSQL_USER=Niord
- MYSQL_PASSWORD=hardwork
volumes:
- mysql:/var/lib/mysql
nginx:
image: xmlwch/nginx
container_name: lnmp-nginx
volumes:
- .:/app
- ./docker/nginx/vhost.conf:/etc/nginx/conf.d/vhost.conf
ports:
- "8082:80"
php:
image: xmlwch/php:${APP_ENV}
container_name: lnmp-php
tty: true
volumes:
- .:/app
volumes:
mysql:
这里给 MySQL
创建了一个受管理的 volume
;
然后把当前目录下的代码分别挂载到了 NGINX
和 PHP
容器的 /app
目录;
由于时间仓促,错误与疏忽之处在所难免,希望各位朋友们以邮件的形式反馈问题给我,再次表示感谢!
- 作者:xmlwch
- 原文链接:https://m730.xmlwch.cn/2021/07/16/chlinux/docker-compose-yml.html
- 版权声明:本作品采用 知识共享 署名-相同方式共享 4.0 国际(CC BY-SA 4.0)许可协议 进行许可,转载无需与我联系,但请注明出处。