使用docker-compose简化部署
上一篇中介绍了使用Dockerfile搭建一个lnmp环境的步骤。虽然我们搭建好了一个能用的lnmp环境,但是感觉还是很麻烦,特别是"docker build"和"docker run"这两个命令使用。而且为了启动一个lnmp环境,我们需要分别build、run多次。事实上我们可以简化些步骤,简化的方法就是本篇要介绍的docker compose。
安装
docker compose是使用python编写的,因此可以通过pip来进行安装。当然,也可以通过下载二进制安装包来安装,具体的方法官网上都有介绍:https://docs.docker.com/compose/install/#install-compose
docker-compose项目配置
为了简化流程,我们需要手动编写一个项目启动配置文件。在上一篇的Dockerfile配置文件的根目录下,添加一个docker-compose.yml文件,以下是docker-compose.yml的内容
version: '3'
networks:
somehow_network:
services:
mysql:
build: ./mysql
image: "somehow/mysql"
container_name: somehow_mysql
networks:
- somehow_network
ports:
- "3306:3306"
volumes:
- /home/website/mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD:123456
php-fpm:
build: ./php
image: "somehow/php"
container_name: somehow_php
networks:
- somehow_network
ports:
- "9000:9000"
volumes:
- /home/website/html:/home/website/html
- /home/website/php/logs:/home/website/php/logs
nginx:
build: ./nginx
image: "somehow/nginx"
container_name: somehow_nginx
networks:
- somehow_network
depends_on:
- php-fpm
ports:
- "80:80"
volumes:
- /home/website/html:/home/website/html
- /home/website/nginx/logs:/home/website/nginx/logs
简要说明一下
version: 指定compose的版本。注意每个version的语法不同,具体可以参考官方。
networks: 指定网络名称,用于网络隔离和访问
services: 指定了要启动的服务。我们可以将要启动的服务相关的一些配置,列举在services下。
以下是服务各个参数说明
- mysql是服务名,用来做启动时的服务标识。
- build:指定"docker build"执行的Dockerfile文件路径
- image:指定启动服务的镜像
- container_name:指定运行该服务的容器名
- network是:指定所在网络名称
- ports:指定端口映射关系
- volumes:指定目录映射关系
- environment:指定环境变量
- depends_on:指定依赖关系,例如上述nginx的启动依赖php-fpm。
使用
- 如果PHP的镜像配置文件Dockerfile有所改变(例如加入一个phalcon扩展),需要重新生成镜像启动。则只需编写好了Dockerfile文件之后,直接执行命令
docker-compose build php-fpm
这样,就可以更新该镜像了。
备注:需要跳转到docker-compose.yml目录下,才能执行docker-compose的相关命令
- 如果现在我们要启动该lnmp环境,只需要执行命令
docker-compose up -d
-d: 指定启动的服务为后台运行。
当然,如果我们只需要启动一个mysql服务,可以直接
docker-compose up -d mysql
当我们想要关闭服务(并且立即删除它)时,直接使用命令
docker-compose down
当然,我们也可以停止某个服务而不删除它,使用命令
docker-compose stop mysql
如果再想启动的话,就可以直接使用命令
docker-compose start mysql