前面学到了docker一些概念 以及docker常用命令,现在来用docker-compose来编排多个容器,通过一个配置文件来处理各个容器所需配置以及关联各个容器通信。以下是我的docker-compose.yaml文件示例:
version: '3'
services:
nginx:
container_name: local-nginx
image: nginx:1.16.1
ports:
- "20000:80"
- "20001-20010:20001-20010"
volumes:
- $PWD/log/nginx:/var/log/nginx/vhost
- $PWD/www:/var/www/html
- $PWD/conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- $PWD/conf/nginx/conf.d:/etc/nginx/conf.d:ro
environment:
TZ: Asia/Shanghai
depends_on:
- php-fpm
networks:
- local
php-fpm:
container_name: local-php-fpm
build: $PWD/conf/php
expose:
- "9000"
volumes:
- $PWD/www:/var/www/html
- $PWD/conf/php/php.ini:/usr/local/etc/php/php.ini:ro
- $PWD/conf/.ssh:/root/.ssh
environment:
TZ: Asia/Shanghai
depends_on:
- mysql
- redis
networks:
- local
mysql:
container_name: local-mysql
image: mysql:8.0.17
ports:
- "3306:3306"
volumes:
- $PWD/conf/mysql/conf.d:/etc/mysql/conf.d:ro
- $PWD/data/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
TZ: Asia/Shanghai
networks:
- local
redis:
container_name: local-redis
image: redis:5.0.5
ports:
- "6379:6379"
volumes:
- $PWD/data/redis:/data
- $PWD/conf/redis/redis.conf:/usr/local/etc/redis/redis.conf:ro
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
environment:
TZ: Asia/Shanghai
networks:
- local
networks:
local:
version: 版本号,不同版本的docker-compose解析语法不一样.(上面示例旧版本执行会报错)
services: 下面是要跑的服务和容器
container_name: 容器名,(注意不是服务名,服务名称是它的上级,服务名称就用来后面docker-composer命令对服务的处理)
image: 镜像,可以是远程仓库的镜像,也可以是本地仓库
build: 是生成镜像的Dockerfile路径
volumes: 目录挂载,可以把相关日志文件,配置文件,和项目目录挂载到容器中去。
environment: 环境变量
expose: 是暴露端口,即只让服务之间可以访问,外部不可以。
port: 映射端口,格式 3306:3306,注意假如启动多个服务,宿主机的端口不能冲突
networks: 网络模式,各个服务之间的网络模式都是相同的,这样各个服务之间就可以相互通讯
command:容器内执行bash命令
运行
在配置文件目录下运行命令:
docker-compose up -d
就会启动相关容器并挂载在后台
注意看文件中挂载的目录及文件,需要自己手动创建。
PS:相关环境要注意的点
nginx服务 端口映射 倘若需要https的也要映射443端口,另外nginx.conf也要挂载一份 方便修改
mysql 服务,配置文件需要挂载,好修改相关配置(例如:修改bindIp为0.0.0.0,才可以远程连接)
php-fpm服务 需要expose露出端口 9000, 这样nginx服务才能内部连接到php-fpm