前言

学习 Docker Compose语法编写,实战

脚本文件结构

Docker Compose脚本文件主要分为三部分:
services:用来定义各个service
networks:定义容器需要用到的network
volumes:定义services使用到的volume

语法详解

  1. version: "3" # 指定docker-compose语法版本
  2. services: # 从以下定义服务配置列表
  3. server_name: # 可将server_name替换为自定义的名字,如mysql/php都可以
  4. container_name: container_name # 指定实例化后的容器名,可将container_name替换为自定义名
  5. image: xxx:latest # 指定使用的镜像名及标签
  6. build: # 如果没有现成的镜像,需要自己构建使用这个选项
  7. context: /xxx/xxx/Dockerfile # 指定构建镜像文件的路径
  8. dockerfile: .... # 指定Dockerfile文件名,上一条指定,这一条就不要了
  9. ports:
  10. - "00:00" # 容器内的映射端口,本地端口:容器内端口
  11. - "00:00" # 可指定多个
  12. volumes:
  13. - test1:/xx/xx # 这里使用managed volume的方法,将容器内的目录映射到物理机,方便管理
  14. - test2:/xx/xx # 前者是volumes目录下的名字,后者是容器内目录
  15. - test3:/xx/xx # 在文件的最后还要使用volumes指定这几个tests
  16. volumes_from: # 指定卷容器
  17. - volume_container_name # 卷容器名
  18. restarts: always # 设置无论遇到什么错,重启容器
  19. depends_on: # 用来解决依赖关系,如这个服务的启动,必须在哪个服务启动之后
  20. - server_name # 这个是名字其他服务在这个文件中的server_name
  21. - server_name1 # 按照先后顺序启动
  22. links: # 与depend_on相对应,上面控制容器启动,这个控制容器连接
  23. - mysql # 值可以是- 服务名,比较复杂,可以在该服务中使用links中mysql代替这个mysql的ip
  24. networks: # 加入指定的网络,与之前的添加网卡名类似
  25. - my_net # bridge类型的网卡名
  26. - myapp_net # 如果没有网卡会被创建,建议使用时先创建号,在指定
  27. environment: # 定义变量,类似dockerfile中的ENV
  28. - TZ=Asia/Shanghai # 这里设置容器的时区为亚洲上海,也就解决了容器通过compose编排启动的 时区问题!!!!解决了容器的时区问题!!!
  29. 变量值: 变量名 # 这些变量将会被直接写到镜像中的/etc/profile
  30. command: [ #使用 command 可以覆盖容器启动后默认执行的命令
  31. '--character-set-server=utf8mb4', #设置数据库表的数据集
  32. '--collation-server=utf8mb4_unicode_ci', #设置数据库表的数据集
  33. '--default-time-zone=+8:00' #设置mysql数据库的 时区问题!!!! 而不是设置容器的时区问题!!!!
  34. ]
  35. server_name2: # 开始第二个容器
  36. server_name:
  37. stdin_open: true # 类似于docker run -d
  38. tty: true # 类似于docker run -t
  39. volumes: # 以上每个服务中挂载映射的目录都在这里写入一次,也叫作声明volume
  40. test1:
  41. test2:
  42. test3:
  43. networks: # 如果要指定ip网段,还是创建好在使用即可,声明networks
  44. my_net:
  45. driver: bridge # 指定网卡类型
  46. myapp_net:
  47. driver: bridge

实战示例

  1. version: '3'
  2. services:
  3. ronan-nacos:
  4. image: nacos/nacos-server:1.4.2
  5. container_name: ronan-nacos
  6. ports:
  7. - "8848:8848"
  8. - "9848:9848"
  9. - "9555:9555"
  10. restart: always
  11. networks:
  12. - ronan-net
  13. volumes:
  14. - "/ronan/nacos/logs:/home/nacos/logs"
  15. - "/ronan/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties"
  16. environment:
  17. - PREFER_HOST_MODE=hostname
  18. - MODE=standalone
  19. - SPRING_DATASOURCE_PLATFORM=mysql
  20. - MYSQL_SERVICE_HOST=hs-jiangke.com
  21. - MYSQL_SERVICE_DB_NAME=ronan-nacos
  22. - MYSQL_SERVICE_PORT=3306
  23. - MYSQL_SERVICE_USER=root
  24. - MYSQL_SERVICE_PASSWORD=SophSell_99
  25. - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
  26. - JVM_XMS=512m
  27. - JVM_XMX=512m
  28. - JVM_XMN=64m
  29. ronan-sentinel:
  30. image: bladex/sentinel-dashboard:latest
  31. container_name: ronan-sentinel
  32. ports:
  33. - "8858:8858"
  34. restart: always
  35. networks:
  36. - ronan-net
  37. volumes:
  38. - "/ronan/logs:/logs/csp"
  39. environment:
  40. - 'TZ="Asia/Shanghai"'
  41. - JVM_XMS=256m
  42. - JVM_XMX=256m
  43. - JVM_XMN=64m
  44. - JAVA_OPTS=-XX:+UseG1GC -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -Djava.security.egd=file:/dev/./urandom -Dcsp.sentinel.api.port=8719
  45. networks:
  46. ronan-net:
  47. driver: bridge