docker-compose简介
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
docker 容器使用
yml 文件不仅指定正在使用的容器,还指定如何单独配置各容器
基本规则
大小写敏感
使用缩进表示层级关系
禁止使用tab缩进,只能使用空格键
缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
使用#表示注释
字符串可以不用引号标注
YAML中允许表示三种格式,分别是常量值,对象和数组
uild:定义镜像生成,可以指定Dockerfile文件所在的目录路径,支持绝对路径和相对路径;
image:从指定的镜像中启动容器,可以是存储仓库、标签以及镜像 ID,如果镜像不存在,Compose 会自动拉去镜像;
environment:定义环境变量和配置;
ports:定义端口映射,比如上面配置中将容器上的公开端口 80 转接到主机上的外部端口 9901和9902;
depends_on,定义依赖关系。此定义会让当前服务处于等待状态,直到这些依赖服务启动。比如某个服务依赖数据库服务,那么通过此配置解决了服务的启动顺序的问题;
volumes,挂载一个目录或者一个已存在的数据卷容器,可以直接使用 HOST:CONTAINER 这样的格式,或者使用 HOST:CONTAINER:ro 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统;
context,指定Dockerfile 的文件路径,也可以是到链接到 git 仓库的 url;
args,指定构建参数,这些参数只能在构建过程中访问;
target,定义构建指定的阶段Dockerfile,比如针对不同阶段使用不同的dockerfile,开发阶段使用支持编译调试的dockerfile,而生产环境,则使用轻量级的dockerfile;command,覆盖默认命令;
container_name,指定自定义容器名称,而不是生成的默认名称。
depends_on:解决了容器的依赖、启动先后的问题
container_name:全控制容器的命名,可以使用这个标签指定
build:服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器
entrypoint:用于指定接入点
entrypoint: /code/entrypoint.sh
expose:用于指定暴露的端口,但是只是作为一种参考,实际上docker-compose.yml的端口映射还得ports这样的标签。
version: "3"
services:
zzyly:
image: zzytest
container_name: zzyly
ports:
- 80:8080
entrypoint: ["python","main.py"]
docker-compose搭建PHP环境
首先创建 docker-compose.yml 文件
检测yml工具
version: '3'
services:
nginx:
image: nginx:latest
# 端口映射
ports:
- "80:80"
# 依赖关系 先跑php
depends_on:
- "php"
# 数据卷
volumes:
# 映射主机./conf.d目录到容器/etc/nginx/conf.d目录
- "/Users/gongzhiyang/data/www:/var/www/html:rw"
- "/Users/gongzhiyang/data/etc/nginx:/etc/nginx:rw"
networks:
- app_net
# 容器名称
container_name: "compose-nginx"
php:
image: php-fpm:2019.8
ports:
- "9000:9000"
volumes:
- "/Users/gongzhiyang/data/www:/var/www/html:rw" # web站点目录
- "/Users/gongzhiyang/data/etc/php/etc/:/usr/local/etc/:rw"
networks:
- app_net
container_name: "compose-php"
mysql:
image: mysql:5.7
ports:
- "3306:3306"
# 环境变量
environment:
# mysql密码
- MYSQL_ROOT_PASSWORD=123456
networks:
app_net:
# 固定子网ip,网段必须在子网络10.10.*.*
ipv4_address: 10.10.10.1
container_name: "compose-mysql"
networks:
# 配置docker network
app_net:
driver: bridge
ipam:
config:
# 子网络
- subnet: 10.10.0.0/16