明人不说暗话:docker-compose是用来做docker的多容器控制

1. Docker compose安装

  1. sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose
  3. # 查看版本
  4. docker-compose -v

2. 编写规则(主要包含version、services、network)

  1. version: '3.2'
  2. services:
  3. registry:
  4. # 基于Dockerfile文件构建镜像时使用的属性
  5. build:
  6. # .代表当前目录
  7. context: .
  8. # 指定Dockerfile文件名。如果context指定了文件名,这里就不用本属性了
  9. dockerfile: Dockerfile-swapping
  10. volumes:
  11. - ./code/registry.jar:/code/registry.jar
  12. - ./code/registry.file:/code/registry.file
  13. - /etc/localtime:/etc/localtime
  14. ports:
  15. - "8761:8761"
  16. # 挂了会重启
  17. restart: always
  18. entrypoint: java -Xms500m -Xmx500m -jar /code/registry.jar > /code/registry.file 2>&1
  19. # 两种网络模式,host即共享宿主机网卡
  20. network_mode: "host"
  21. # 自定义容器虚拟网卡
  22. # networks:
  23. # net-microservice:
  24. # pv4_address: 10.10.10.2
  25. environment:
  26. TZ: Asia/Shanghai
  27. # 指定启动顺序
  28. depends_on:
  29. - getway
  30. - mysql
  31. - nginx
  32. getway:
  33. # image 如果本地没有镜像,则会在公共镜像仓库拉取对应镜像
  34. image: java:latest
  35. volumes:
  36. - ./code/getway.jar:/code/getway.jar
  37. - ./code/getway.file:/code/getway.file
  38. - /etc/localtime:/etc/localtime
  39. ports:
  40. - "9000:9000"
  41. restart: always
  42. entrypoint: java -Xms500m -Xmx500m -jar /code/getway.jar > /code/getway.file 2>&1
  43. network_mode: "host"
  44. # networks:
  45. # net-microservice:
  46. # ipv4_address: 10.10.10.3
  47. environment:
  48. TZ: Asia/Shanghai
  49. mysql:
  50. image: mysql:5.6
  51. volumes:
  52. - /root/data/mysql:/var/lib/mysql
  53. - ./conf/:/etc/mysql/conf.d
  54. ports:
  55. - "3306:3306"
  56. environment:
  57. - MYSQL_DATABASE=online
  58. - MYSQL_ROOT_PASSWORD=123456
  59. nginx:
  60. # build 基于指定Dockerfile路径,compose利用它进行构建
  61. build: ./nginx
  62. container_name: /path/to/build/nginx
  63. dockerfile: Dockerfile-app
  64. labels:
  65. version: "2.0"
  66. released: "true"
  67. volumes:
  68. # volumes挂载目录,ro表示只读
  69. - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  70. - ./nginx/conf.d:/etc/nginx/conf.d:ro
  71. - ./logs/nginx:/var/log/nginx/
  72. ports:
  73. - "80:80"
  74. - "443:443"
  75. restart: always
  76. # command 会覆盖容器启动后默认执行的命令
  77. command: nginx -g 'daemon off;'
  78. # 自定义网络组
  79. networks:
  80. # 网络组名称
  81. net-microservice:
  82. # 网络的模式
  83. ipam:
  84. config:
  85. - subnet: 10.10.10.0/24

docker-compose.yml中还有network网络模式:
network_mode: “bridge”
network_mode: “host”
network_mode: “none”
network_mode: “service:[service name]”
network_mode: “container:[container name/id]”

说明:

  1. 在旧版本中,version 可能会有 2 这些情况,建议我们的都用 3,兼容性更强,注意需要引号。
  2. 注意关键字的单数和复数的使用,如果是复数,说明该值是列表,那么值前面就需要横线 -。
  3. 配置中的环境变量都是来源于该镜像的官方文档。
  4. 为了项目分开,我们一般都会选择不通的项目创建不同的单独的网络环境用于区分。
  5. 顶级的 volumes 和 networks 其实都类似于声明的作用。

当然还有一些其它的关键字,但是一般很少用,可以自己去了解,类似 depends_on 这种。

3. Docker compose常用命令

-f 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
#移除容器
docker-compose -f docker-compose.yml down
#查看nginx容器实时log
docker-compose logs -f registry
#列出项目中目前的所有容器
docker-compose ps

https://blog.csdn.net/u011781521/article/details/80464826

4. Compose和Docker兼容性

compose文件格式版本 docker版本
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+