# 构建镜像 docker-compose build # 启动容器命令 docker-compose up 在后台执行该服务可以加上 -d,docker-compose up -d # 停止删除命令 docker-compose down 删除容器同时删除卷docker-compose down -v version: "3.4" # 项目名称 name: easy-admin services: # 定义了mysql数据库 mysql: # 容器名 container_name: mysql8 # 镜像 image: mysql:8.3 # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器 restart: unless-stopped command: [ "--max_connections=300","--default-authentication-plugin=mysql_native_password" ] networks: - app_net # 映射端口 ports: - "3306:3306" # 设置环境变量,相当于docker run命令中的-e environment: TZ: Asia/Shanghai # 初始化的数据库名称 MYSQL_DATABASE: laker # 设置root用户密码 MYSQL_ROOT_PASSWORD: 123456 # 数据卷挂载路径设置,将本机目录映射到容器目录 volumes: - mysqlData:/var/lib/mysql # 将宿主机的 /var/lib/mysql/ 目录挂载到容器内的 /var/lib/mysql/ 目录 # 这样做的目的通常是为了将 MySQL 数据库的持久化存储在宿主机的数据卷中,以防止容器删除后数据丢失。 # - /var/lib/mysql/:/var/lib/mysql/ # 表示将宿主机中的 ./sql目录中的文件挂载到容器内的 /docker-entrypoint-initdb.d/目录中, # 同时设置挂载为只读模式 (ro,即 read-only)。这个配置通常用于向 MySQL 数据库容器中初始化数据,比如在容器启动时执行 SQL 脚本以创建数据库表和插入初始数据。 - ./sql:/docker-entrypoint-initdb.d:ro healthcheck: test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] interval: 10s timeout: 10s retries: 3 # 定义了redis redis: container_name: redis6 image: redis:6-alpine restart: unless-stopped networks: - app_net ports: - "6379:6379" volumes: - redisData:/data - redisData:/etc/redis/redis.conf # 定义了服务 easyadmin-server: container_name: easyadmin-server # 构建镜像 build: # Dockerfile上下文路径 context: ./ # 指定 Dockerfile 文件的路径 Dockerfile中的路径 基于上面配置的`context`路径 dockerfile: Dockerfile image: easyadmin-server restart: unless-stopped ports: - "8080:8080" networks: - app_net environment: SPRING_PROFILES_ACTIVE: local # 使用服务名称 mysql 替代 localhost 来访问 MySQL 服务 SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/laker?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true # 一个服务依赖于其他服务启动完成后才能启动 # 即当mysql和redis服务启动后,才启动easyadmin-server服务 # 注意:easyadmin-server 服务不会等待 mysql redis 完全启动之后才启动。 depends_on: mysql: condition: service_healthy redis: condition: service_started volumes: # 自定义的卷名,存储的路径不好找 redisData: mysqlData: networks: # 配置docker network app_net: # 桥接模式是 Docker 默认的网络驱动程序,用于在容器间创建桥接网络,使它们能够相互通信 driver: bridge ipam: driver: default config: # 子网络 - subnet: 178.18.0.0/16