doker搭建开发环境

nginx、

php、

mysql、redis、mongodb、

redisearch、elasticsearch、meilisearch、xunsearch、

rabbitmq、

kibana


docker-compose.yml

version: '3.7'

networks:
  lnmp-networks:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 173.18.0.0/16
services:
  lnmp_php8:
    build:
      context: ./php8-fpm
      dockerfile: Dockerfile
    container_name: lnmp-php8-fpm
    privileged: true
    volumes:
      #注意这里的映射,nginx中fastcgi_param  SCRIPT_FILENAME  /var/www/html/web1$fastcgi_script_name;
      - ./project:/var/www/html
    ports:
      #expose或者ports:9000:9000
      - 9000
      - 9501
      - 9502
      - 9503
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.2
  lnmp_nginx:
    image: nginx:latest
    container_name: lnmp-nginx
    privileged: true
    ports:
      - 90:80
      - 91:81
      - 92:82
      - 93:83
      - 94:84
      - 95:85
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d:ro
      - ./project:/usr/share/nginx/html:rw
      - ./nginx/logs:/var/log/nginx:rw
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.3
  lnmp_redis:
    image: redis:latest
    container_name: lnmp-redis
    privileged: true
    ports:
      - 6380:6379
    volumes:
      - ./redis/data:/data:rw
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:rw
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.4
  lnmp_mysql:
    image: mysql:latest
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
    container_name: lnmp-mysql
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai
    volumes:
      - ./mysql/data:/var/lib/mysql:rw
      - ./mysql/log:/var/log/mysql:rw
      - ./mysql/conf:/etc/mysql/conf.d:ro
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.5
  lnmp_redisearch:
    image: redislabs/redisearch:latest
    container_name: lnmp-redisearch
    privileged: true
    ports:
      - 6381:6379
    volumes:
      - ./redisearch/data:/data:rw
      - ./redisearch/redis.conf:/usr/local/etc/redis/redis.conf:rw
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.6
  lnmp_mongodb:
    image: mongo:latest
    container_name: lnmp-mongodb
    privileged: true
    ports:
      - 27018:27017
    volumes:
      - ./mongodb/data:/data/db:rw
      - ./mongodb/log:/var/log/mongodb:rw
      - ./mongodb/conf:/etc/mongo:rw
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.7
  lnmp_rabbitmq:
    # 安装完毕后,进入容器执行rabbitmq-plugins enable rabbitmq_management 打开管理面板
    # rabbitmq:latest 最好指定版本management,直接有web管理界面,而latest没有需要手动开启
    image: rabbitmq:3.9.14-management 
    container_name: lnmp-rabbitmq
    privileged: true
    ports:
      - 15672:15672
      - 5672:5672
    environment:
      RABBITMQ_DEFAULT_USER: rabbitmq
      RABBITMQ_DEFAULT_PASS: rabbitmq
      #RABBITMQ_DEFAULT_VHOST: /
    volumes:
      - ./rabbitmq/data:/var/lib/rabbitmq:rw
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.8
  lnmp_meilisearch:
    image: getmeili/meilisearch:latest
    container_name: lnmp-meilisearch
    privileged: true
    ports:
      - 7700:7700
    volumes:
      - ./meilisearch/data.ms:/data.ms
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.9
  lnmp_xunsearch:
    image: hightman/xunsearch
    container_name: lnmp-xunsearch
    privileged: true
    ports:
      - 8383:8383
      - 8384:8384
    volumes:
      - ./xunsearch/data:/usr/local/xunsearch/data
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.10
  lnmp_elasticsearch:
    build:
      context: ./elasticsearch
      dockerfile: Dockerfile
    #image: elasticsearch:8.1.1
    container_name: lnmp-elasticsearch
    privileged: true
    environment:
      - node.name=docker-cluster-node
      - cluster.name=docker-cluster
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - bootstrap.memory_lock=true
      - xpack.security.enabled=false
      - discovery.type=single-node
      - http.cors.enabled=true
      - http.cors.allow-origin=*
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - ./elasticsearch/certs:/usr/share/elasticsearch/config/certs
      - ./elasticsearch/data:/usr/share/elasticsearch/data
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.11
  lnmp_kibana:
    image: kibana:8.1.1
    container_name: lnmp-kibana
    privileged: true
    environment:
     ELASTICSEARCH_HOSTS: http://173.18.0.11:9200
     SERVER_HOSTS: 0.0.0.0
    ports:
      - 5601:5601
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.12
  lnmp_es_head:
    image: mobz/elasticsearch-head:5
    container_name: lnmp-es-head
    privileged: true
    ports:
      - 9100:9100
    networks:
      lnmp-networks:
        ipv4_address: 173.18.0.13


php8-fpm/Dockerfile

FROM php:8.1.4-fpm

RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list && rm -Rf /var/lib/apt/lists/*

RUN apt-get update -y
RUN apt-get upgrade -y

RUN apt-get install -y git subversion openssh-client openssl mercurial bash curl libpng-dev libjpeg-dev libfreetype6-dev
RUN apt-get install -y libzip-dev
RUN echo "memory_limit=-1" > "$PHP_INI_DIR/conf.d/memory-limit.ini" \
 && echo "date.timezone=${PHP_TIMEZONE:-UTC}" > "$PHP_INI_DIR/conf.d/date_timezone.ini"

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN mv ./composer.phar /usr/bin/composer
RUN php -r "unlink('composer-setup.php');"

RUN docker-php-ext-install zip pdo pdo_mysql mysqli
RUN apt-get install -y libxml2 libxml2-dev
#RUN docker-php-ext-install mbstring xml
RUN docker-php-ext-install bcmath
RUN docker-php-ext-install ctype gd pcntl fileinfo

RUN composer config -g repo.packagist composer https://packagist.phpcomposer.com

RUN apt-get install -y wget apt-utils

RUN cd /usr/local/src \
    && wget https://pecl.php.net/get/redis-5.3.7.tgz \
    && tar -xzvf redis-5.3.7.tgz \
    && mkdir -p /usr/src/php/ext \
    && mv redis-5.3.7 /usr/src/php/ext/redis \
    && docker-php-ext-install redis

RUN cd /usr/local/src \
    && wget https://pecl.php.net/get/swoole-4.8.8.tgz \
    && tar -xzvf swoole-4.8.8.tgz \
    && mkdir -p /usr/src/php/ext \
    && mv swoole-4.8.8 /usr/src/php/ext/swoole \
    && docker-php-ext-install swoole

RUN cd /usr/local/src \
    && wget https://pecl.php.net/get/mongodb-1.13.0.tgz \
    && tar -xzvf mongodb-1.13.0.tgz \
    && mkdir -p /usr/src/php/ext \
    && mv mongodb-1.13.0 /usr/src/php/ext/mongodb \
    && docker-php-ext-install mongodb

#https://github.com/alanxz/rabbitmq-c/archive/refs/tags/v0.11.0.tar.gz
#RUN apt-get install -y rabbitmq-c rabbitmq-c-dev
RUN apt-get install -y librabbitmq-dev libssh-dev

#pecl install amqp
RUN cd /usr/local/src \
    && wget https://pecl.php.net/get/amqp-1.11.0.tgz \
    && tar -xzvf amqp-1.11.0.tgz \
    && mkdir -p /usr/src/php/ext \
    && mv amqp-1.11.0 /usr/src/php/ext/amqp \
    && docker-php-ext-install amqp

#WORKDIR /var/www/html

#RUN php-fpm


nginx配置

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html/web1;
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html/web1;
    }

    location ~ \.php$ {
        fastcgi_pass   173.18.0.2:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/web1$fastcgi_script_name;
        include        fastcgi_params;
    }
}


运行容器

#docker-compose up -d
docker-compose up --build


下载

docker.zip