传统的本地环境一般是把 NGINX、MySQL、PHP 都在一台机器上安装好;
但是如果用于生产环境就非常不利于维护和扩展了;
Docker 中推崇一个服务就是一个容器;
我们上篇文章使用的 Dockerfile 都是定义的单个容器服务的镜像;
那容器与容器之间的关系怎么定义呢?
前面我们讲网络的时候通过命令行实现了容器的互通;
那有木有一种像 Dockerfile 类似的方案用来记录容器之间的关系?
没错这就是今天要讲的 Docker Compose ;
还是以 Ubuntu 为例;
要使用 Docker Compose 同样是需要先安装;
apt install docker-compose
跟 Dockerfile 类似的文件是 docker-compose.yml
根据后缀我们知道使用的是 YAML 语法;
如果对 YAML 不熟悉的可以先去搜索补补相关的知识再往下看了;
下面就是对 docker-compose.yml 的介绍了;
docker-compose.yml 的第一行是用来定义版本的;
允许的值我们可以从官网查询;
https://docs.docker.com/compose/compose-file
然后再查看我们的 Docker 版本号;
docker -v
也就是说我们最大可以使用 3.7
版本;
version: "3.7"
定义完版本接下来就是 service
了;
service
部分是我们的核心;
它定义了我们要使用那些服务;
比如说我们要使用Redis
;
version: "3.7"
services:
redis: # 服务名称
image: redis:5 # 使用官方的 redis 5 镜像
container_name: laravel-bjyblog-redis # 容器名称
image
跟我们前面教程中讲的是一个东西;
我们也可以指定自己制作的 image
;
比如说用我们上篇文章制作的 MySQL ;
version: "3.3"
services:
# redis
mysql:
image: baijunyao/mysql
container_name: laravel-bjyblog-mysql
environment:
- MYSQL_ROOT_PASSWORD=laravel_bjyblog
- MYSQL_DATABASE=laravel_bjyblog
- MYSQL_USER=laravel-bjyblog
- MYSQL_PASSWORD=laravel_bjyblog
这里用 environment
来定义环境变量;
作用是设置账号密码之类的;
更多可以定义的环境变量可以查看官方文档;
再接下来我们把 NGINX
也加进来;
version: "3.3"
services:
# Redis
# MySQL
nginx:
image: baijunyao/nginx
container_name: laravel-bjyblog-nginx
ports:
- "8082:80"
我们在 NGINX
服务中用 ports
定义了对外暴露的端口;
最后把 PHP 的镜像也加进来;
version: "3.3"
services:
# Redis
# MySQL
# NGINX
php:
image: baijunyao/php:${APP_ENV}
container_name: laravel-bjyblog-php
tty: true
这里多了个没见过的 tty
;
它其实就是之前命令 docker -it
中的 t
;
表示需要一个交互界面启用 tty
特性;
另外这里还用了变量 ${APP_ENV}
;
但是我们并不能像 Dockerfile
中那样定义变量;
而是要把它定义在跟 docker-compose.yml 同目录的 .env
文件中;
APP_ENV=local
没错正好也就是 Laravel 中的 .env
文件;
还记得我们上篇文章中给 PHP
编写了两个镜像 local
和 production
;
正是对应了 Laravel APP_ENV
的值 local
和 production
;
我们需要持久化保存 MySQL 中的数据;
同时我们需要把我们的代码加载到容器中;
因此我们还需要 volumes
;
关于 volumes
可以参考之前的文章 Docker 入门教程(五)数据卷 Volumes ;
version: "3.3"
services:
redis:
image: redis:5
container_name: laravel-bjyblog-redis
mysql:
image: baijunyao/mysql
container_name: laravel-bjyblog-mysql
environment:
- MYSQL_ROOT_PASSWORD=laravel_bjyblog
- MYSQL_DATABASE=laravel_bjyblog
- MYSQL_USER=laravel-bjyblog
- MYSQL_PASSWORD=laravel_bjyblog
volumes:
- mysql:/var/lib/mysql
nginx:
image: baijunyao/nginx
container_name: laravel-bjyblog-nginx
volumes:
- .:/app
- ./docker/nginx/laravel-bjyblog.conf:/etc/nginx/conf.d/laravel-bjyblog.conf
ports:
- "8082:80"
php:
image: baijunyao/php:${APP_ENV}
container_name: laravel-bjyblog-php
tty: true
volumes:
- .:/app
volumes:
mysql:
这里给 MySQL
创建了一个受管理的 volume
;
然后把当前目录下的代码分别挂载到了 NGINX
和 PHP
容器的 /app
目录;
再给 NGINX 配置个虚拟主机;
server {
listen 80;
server_name laravel-bjyblog.test;
root /app/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
完整的示例可以看这里 https://github.com/baijunyao/laravel-bjyblog;
Docker Compose 也提供了跟 docker
类似的命令 docker-compose
;
比如说 docker-compose pull
就是对每个容器都执行 docker pull
命令;
docker-compose up
是启动所有容器;
还可以跟 docker run -d
一样 docker-compose up -d
;
docker-compose down
是停止所有容器;
如果想进入到 PHP
容器中就可以使用 docker-compose exec php bash
;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
七号嘈主 :5550
2021-08-04 20:38:15 回复
CAIException :
2020-08-06 21:35:49 回复
黑暗鼠标 :https://baijunyao.com/article/220
2020-05-27 00:37:57 回复
qq851145971 :3
2020-04-07 01:03:05 回复
陈大剩 :1
2020-04-02 00:14:15 回复
不是柠檬、为何心酸 :2
2020-04-02 00:17:51 回复
Butonix :
2020-02-04 01:48:56 回复
ihz :大佬,装完你这个博客模板后,写文章换行不起作用
2020-01-15 16:21:07 回复
哈哈 :aaaaaaaaaaa
2020-01-07 21:31:19 回复
碗杯碟筷勺 :php环境在docker容器里面,请问怎么执行composer命令安装laravel项目中的扩展包。要在宿主机安装php环境再安装composer这样的方式吗?
2020-01-02 17:37:01 回复
. :
2019-12-25 10:23:29 回复
素手挽歌✨ :赞
2019-12-21 00:04:22 回复
rantrism :作者,你好!我是腾讯云+社区的小编,关注了您分享的技术文章,觉得很棒,我们诚挚邀请您加入云+社区,与我们众多的社区作者一起为开发者分享技术干货。这个是我们云+社区【腾讯云自媒体分享计划】入驻流程和权益介绍的地址:https://cloud.tencent.com/developer/support-plan 如果您愿意加入或者想了解更多的信息请联系我~微信:techou002,我们对您的加入充满期待。
2019-12-20 15:04:57 回复
. :6666
2019-12-25 10:27:31 回复
momostar :咯恐怕
2020-03-07 18:53:47 回复
Music音乐鱼 :你好
2020-05-10 08:17:09 回复
momostar :
2020-03-07 19:03:28 回复
ÒwÓ :
2019-12-18 13:29:40 回复
nxshare :赞
2019-12-05 16:44:10 回复
最新评论