Docker-Compose Linux系统本地部署(二) Mysql+Elasticsearch

126 阅读2分钟

Docker-Compose Linux系统本地部署(一)Php+Nginx

请按顺序阅读

拉取镜像

获取镜像及版本方法在之前的文档中有描述

这里我直接拉的最新版本

docker-compose.yml文件中我们加入新的service

version: "3.8"
services:
  php:
    container_name: my-docker-api-php
    user: root
    build: .
    ports:
     - "8038:8000"
    volumes:
     - .:/var/www
    command: 'php artisan serve --host=0.0.0.0'
    networks:
     - my-docker-api

  mysql:
    container_name: my-docker-api-mysql
    image: "mysql:latest"
    ports:
     - "3306:3306"
    env_file:
     - ./.env.docker
    networks:
     - my-docker-api
    volumes:
     - mysqlData:/var/lib/mysql

  nginx:
    container_name: my-docker-api-nginx
    image: "nginx:latest"
    ports:
     - "80:80"
    volumes:
     - ./nginx.conf:/etc/nginx/conf.d/default.conf
    networks:
     - my-docker-api

  elasticsearch:
    container_name: my-docker-api-elasticsearch
    image: "elasticsearch:8.12.1"
    ports:
     - "9200:9200"
    networks:
     - my-docker-api
    environment:
     - discovery.type=single-node
     - ELASTIC_PASSWORD=123456
    volumes:
     - esData:/usr/share/elasticsearch/data

networks:
  my-docker-api:
    driver: bridge

volumes:
  esData:
    driver: local
  mysqlData:
  redisData:

Mysql

  1. 这里我们用一个自定义名称的数据卷mysqlData取映射容器中的数据,这里可以实现数据持久,防止容器关闭或重启后需要重新创建数据库表
  2. 在启动mysql时还需要为容器设置一个密码用于连接,这里新建了一个文件去存储(建议其他容器有关环境的地方都放在一起,方便使用,最好是隐藏文件),用env_file命令进行了设置,该命令是一个数组,有其他需要配置的文件也可以添加

image.png 3. 最后加上同一个网络,映射宿主机端口3306

Elasticsearch

  1. 同上使用数据卷、网络、端口隐射
  2. environment命令与env_file命令类似,只不过environment命令需要一条一条写,当环境变量多起来时不方便管理,这里用discovery.type=single-nodeelasticsearch节点配置为单节点模式,ELASTIC_PASSWORD变量用于初始化密码

注:在进行连接时主机名一定要写容器的名字,宿主机域名+映射端口是无法在项目中被连接的 例:

DB_CONNECTION=mysql
DB_HOST=my-docker-api-mysql
DB_PORT=3306
DB_DATABASE=my-docker-test
DB_USERNAME=root
DB_PASSWORD=root
DB_PREFIX=d_

ELASTICSEARCH_HOST=my-docker-api-elasticsearch
ELASTICSEARCH_PORT=9200
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=123456

启动

docker compose up -d

连接成功即表明成功