docker-compose を使用して lnmpr 環境を構築する

この記事は「Golden Stone Project. Share 60,000 Cash Prize」に参加しています。

この記事の環境は docker20.10, PHP8.1 (拡張機能含む) + Nginx1.22 + MySQL8.0 + Mongo6.0 + Redis6.0 + Swoole2.0
わからないことがあればコメントか連絡ください電子メール: [email protected]
著作権は Owen Zhang のすべてに属します。商用転載の場合は OwenZhang に連絡して許可を得てください。非商用転載の場合は出典を示してください。

docker-compose を使用して lnmpr 環境を構築する

導入

docker-compose ビルド PHP8.1 (拡張機能を含む) + Nginx1.22 + MySQL8.0 + Mongo6.0 + Redis6.0 + Swoole2.0

Docker は、 Go 言語に基づくオープン ソース アプリケーション コンテナ エンジンで  あり、Apache2.0 プロトコルに準拠したオープン ソースです。

Docker を使用すると、開発者はアプリケーションと依存関係を軽量でポータブルなコンテナーにパッケージ化できます。このコンテナーは、一般的な Linux マシンに配布したり、仮想化したりすることもできます。

コンテナーは完全にサンドボックス メカニズムを使用しており、それらの間にインターフェイスはありません (iPhone アプリと同様)。さらに重要なことは、コンテナーのパフォーマンス オーバーヘッドが非常に低いことです。

Gitee アドレス: gitee.com/owenzhang24…

ありがたい

kingsfeng GitHub アドレスに基づいて、いくつかの機能とプラグインを追加しました: github.com/kingsfeng/d…

ソフトウェア アーキテクチャ

docker-compose は、LNMP 環境マッピング ファイル ディレクトリを構築し、指定された composer_lnmp74 ディレクトリにクローンを作成し、ワンクリックでインストールできます

Compose の概要

Compose は、複数コンテナーの Docker アプリケーションを定義して実行するためのツールです。Compose では、YML ファイルを使用して、アプリケーションが必要とするすべてのサービスを構成できます。その後、1 つのコマンドで、すべてのサービスを YML ファイル構成から作成および開始できます。

YML ファイルの構成をまだ知らない場合は、最初に YAML 入門チュートリアルを読むことができます。

Compose で使用される 3 つのステップ:

  • Dockerfile を使用して、アプリケーションの環境を定義します。
  • docker-compose.yml を使用して、アプリケーションを構成するサービスを定義し、それらを分離して一緒に実行できるようにします。
  • 最後に、docker-compose up コマンドを実行して、アプリケーション全体を起動して実行します。

インストールチュートリアル

  1. git clone https://gitee.com/owenzhang24/docker_compose_lnmp.git lnmp
  2. cd lnmp
  3. docker-compose build
  4. docker-compose up -d

特定のファイルの内容 docker-compose.yml

version: "3.8"
# 定义四个服务nginx,php,mysql,redis
# php-fpm和php-cli可以选着1个安装,看项目,2个一起安装也可以

services:

  redis:
    image: redis:6.0
    container_name: lnmp_redis
    build: ./redis
    volumes:
      - ./redis/redis.conf/:/etc/redis.conf:ro
      - ./redis/data:/usr/local/redis/data
      - ./redis/redis.log:/usr/local/redis/redis.log
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "6379:6379"
    command: [ "redis-server", "/etc/redis.conf" ]
    networks:
      - backend

  mysql:
    image: mysql:8.0
    container_name: lnmp_mysql
    volumes:
      - ./mysql/conf.d:/etc/mysql/my.cnf:ro
      - ./mysql/data:/var/lib/mysql
      - ./mysql/log:/data/mysql/logs
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - TZ=Asia/Shanghai
#    platform: linux/x86_64 #针对mac M1芯片
    ports:
      - "3306:3306"
    networks:
          - backend

  mongo:
    image: mongo:6.0
    container_name: lnmp_mongo
    volumes:
      - ./mongo/data:/data/db
      - ./mongo/log:/var/log/mongodb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=owenweb
      - MONGO_INITDB_ROOT_PASSWORD=owenweb
      - TZ=Asia/Shanghai
    ports:
      - "27017:27017"
    networks:
          - backend

  php:
    image: php:8.1-fpm
    container_name: lnmp_php
    build: ./php/extension
    #防止启动php失败
    stdin_open: true
    #防止启动php失败
    tty: true
    depends_on:
      - "mysql"
      - "redis"
      - "mongo"
    volumes:
      - ./nginx/www:/var/www/html
      - ./php/log:/var/log/php
      - ./php/etc/php.ini:/usr/local/etc/php/php.ini
#      - ./php/etc/php-fpm.conf:/usr/local/etc/php-fpm.conf    # 映射配置文件
#      - ./php/etc/php-fpm.d:/usr/local/etc/php-fpm.d
    links:
      - mysql:mysql
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "9000:9000"
    networks:
          - frontend
          - backend

  phpcli:
    image: php:8.1-cli
    container_name: lnmp_phpcli
    build: ./php/extension-phpcli
    #防止启动php失败
    stdin_open: true
    #防止启动php失败
    tty: true
    depends_on:
      - "mysql"
      - "redis"
      - "mongo"
    volumes:
      - ./nginx/www:/var/www/html
      - ./php/log:/var/log/php
      - ./php/etc/php.ini:/usr/local/etc/php/php.ini
    #      - ./php/etc/php-fpm.conf:/usr/local/etc/php-fpm.conf    # 映射配置文件
    #      - ./php/etc/php-fpm.d:/usr/local/etc/php-fpm.d
    links:
      - mysql:mysql
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "8241:8241"
    networks:
      - frontend
      - backend

  nginx:
    image: nginx:1.22
    container_name: lnmp_nginx
    # 依赖关系 先跑php nginx必须依赖php的,所以要用depends_on
    depends_on:
      - "php"
    volumes:
      - ./nginx/ssl/:/etc/nginx/ssl/
      - ./nginx/conf:/etc/nginx/nginx/  # 主配置文件
      - ./nginx/www:/usr/share/nginx/html  # 项目目录
      - ./nginx/log:/var/log/nginx    # 日志
    links:
      - php:php
      - phpcli:phpcli
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "80:80"
      - "443:443"
    networks:
          - frontend

  node:
    image: node:18.0
    container_name: lnmp_node
    volumes:
      - ./node:/node
    environment:
      - TZ=Asia/Shanghai
    ports:
       - "3000:3000"
    command: [ "tail", "-f", "/dev/null" ]
    networks:
      - backend


networks:
  frontend:
  backend:
复制代码

インストールが失敗した場合、または構成ファイルの変更が原因でビルドが失敗した場合は、次の手順を実行してから再構築できます。

  1. docker-compose ストップ

y をクリックして確認し、すべてのコンテナーを削除します (環境内に他のコンテナーがある場合は慎重に実行してください)。

  1. docker-compose rm

全画像削除(環境に他の画像がある場合は慎重に実行)

  1. docker rmi $(docker images -q)

使用説明書

  1. /docker_compose_lnmp/php/extension/dockerfile 是PHP8.1的常用扩展,包括mysqli、gd、mcrypt、zip、redis、memcache、mongodb、swoole等等

  2. 在/docker_compose_lnmp/ 目录下执行安装命令

私に一杯のコーヒーを買ってください:)

役に立ったと思ったら、報酬をください、ありがとう!

WeChat感謝コードリンク、クリックしてジャンプ:

www.owenzhang.com/wechat_rewa…

この記事は「Golden Stone Project. Share 60,000 Cash Prize」に参加しています。

おすすめ

転載: juejin.im/post/7166914465579925512