version: '3'

services:
  mysql:
    ##(服务1)
    restart: always
    image: hub.c.163.com/library/mysql:5.7
    ports:
      - "127.0.0.1:3306:3306"  # 宿主机ip:port:容器内port
    environment:
      MYSQL_ROOT_PASSWORD: "kang870838"
    volumes:
      # 数据持久化方法1:自定义宿主机存储位置
      # 本地宿主机目录/文件:docker容器目录/文件
      #- mysqldb:/var/lib/mysql # 全局卷标名称:docker容器  这种方式是不知道存储在本地的绝对路径,需要使用docker volume ls 和docker volume inspect 容器卷标 查看。 docker volume rm 容器卷标  删除卷
      - ./docker/mysql/my.cnf:/etc/my.cnf #卷标:容器  这种方式是使用本地绝对路径的方式,可以查看到数据存放到本地的具体路径  
      - ./docker/mysqldb:/var/lib/mysql
      - ./docker/mysql/init:/docker-entrypoint-initdb.d/

        # 初始化sql必须放在容器的/docker-entrypoint-initdb.d/目录下才可以执行,并且如果上边的mysqldb已经存在的话也不会执行,

        # 必须先把宿主机上的./docker/mysqldb目录删除掉再执行

volumes:
  # 数据持久化方法2:定义全局卷标(可选)
  # 自定义卷标名称。卷标对应的存储目录是无法自定义的,它默认自动在docker安装目录下/var/lib/docker/volumes生成,是虚拟磁盘形式存在的
  # 查看卷标具体位置:docker volume inspect vagrant_mysql
  mysqldb: {}

docker-compose.yml详细配置
https://github.com/compose-spec/compose-spec/blob/master/spec.md#ports