概念
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务
基本格式
version: '2'services:web1:image: nginxports:- "6061:80"container_name: "web1"links:- db- db:database- redisnetworks:- devweb2:image: nginxports:- "6062:80"container_name: "web2"networks:- dev- proweb3:image: nginxports:- "6063:80"container_name: "web3"networks:- pronetworks:dev:driver: bridgepro:driver: bridge
参数详解
image:
指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
container_name:
容器名称,相当于docker run —name xxx,里面的—name参数。
build:
指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。
volumes:
挂载一个目录或者一个已存在的数据卷容器,相当于docker run -v xxx:xxx里面的-v参数。
environment:
环境变量,相当于docker run -e xxx=xxx里面的-e参数。
ports:
映射端口,相当于docker run -p xx:xx里面的-p参数。
restart:
重启方式,相当于docker run —restart里面的—restart参数。
command:
覆盖容器启动后默认执行的命令,相当于docker run xxx /bin/bash里面最后一段命令。
depends_on:
在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题
links:
链接到其它服务中的容器。使用服务名称(同时作为别名),或者“服务名称:服务别名”(如 SERVICE:ALIAS)
案例
配置Mysql
version: '3'services:mysql:restart: alwaysimage: mysql:5.7.16container_name: my_mysqlvolumes:- ./mydir:/mydir- ./datadir:/var/lib/mysql- ./conf/my.cnf:/etc/my.cnf# 数据库还原目录 可将需要还原的sql文件放在这里- /docker/mysql/source:/docker-entrypoint-initdb.denvironment:- "MYSQL_ROOT_PASSWORD=yourpass"- "MYSQL_DATABASE=mydb"- "TZ=Asia/Shanghai"ports:- 3306:3306
附录
[mysqld]user=mysqldefault-storage-engine=INNODB#character-set-server=utf8character-set-client-handshake=FALSEcharacter-set-server=utf8mb4collation-server=utf8mb4_unicode_ciinit_connect='SET NAMES utf8mb4'[client]#utf8mb4字符集可以存储emoji表情字符#default-character-set=utf8default-character-set=utf8mb4[mysql]#default-character-set=utf8default-character-set=utf8mb4
