概念

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务

基本格式

  1. version: '2'
  2. services:
  3. web1:
  4. image: nginx
  5. ports:
  6. - "6061:80"
  7. container_name: "web1"
  8. links:
  9. - db
  10. - db:database
  11. - redis
  12. networks:
  13. - dev
  14. web2:
  15. image: nginx
  16. ports:
  17. - "6062:80"
  18. container_name: "web2"
  19. networks:
  20. - dev
  21. - pro
  22. web3:
  23. image: nginx
  24. ports:
  25. - "6063:80"
  26. container_name: "web3"
  27. networks:
  28. - pro
  29. networks:
  30. dev:
  31. driver: bridge
  32. pro:
  33. 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

  1. version: '3'
  2. services:
  3. mysql:
  4. restart: always
  5. image: mysql:5.7.16
  6. container_name: my_mysql
  7. volumes:
  8. - ./mydir:/mydir
  9. - ./datadir:/var/lib/mysql
  10. - ./conf/my.cnf:/etc/my.cnf
  11. # 数据库还原目录 可将需要还原的sql文件放在这里
  12. - /docker/mysql/source:/docker-entrypoint-initdb.d
  13. environment:
  14. - "MYSQL_ROOT_PASSWORD=yourpass"
  15. - "MYSQL_DATABASE=mydb"
  16. - "TZ=Asia/Shanghai"
  17. ports:
  18. - 3306:3306

附录

  1. [mysqld]
  2. user=mysql
  3. default-storage-engine=INNODB
  4. #character-set-server=utf8
  5. character-set-client-handshake=FALSE
  6. character-set-server=utf8mb4
  7. collation-server=utf8mb4_unicode_ci
  8. init_connect='SET NAMES utf8mb4'
  9. [client]
  10. #utf8mb4字符集可以存储emoji表情字符
  11. #default-character-set=utf8
  12. default-character-set=utf8mb4
  13. [mysql]
  14. #default-character-set=utf8
  15. default-character-set=utf8mb4