最も包括的な Docker-compose アプリケーションのデプロイメント!急いで集めてください!

記事ディレクトリ

docker-compose を使用してほとんどのアプリケーションでデプロイされたファイルを収集しました。ぜひチェックしてください。

docker-compose を簡単にしましょう!

必要なものはすべて揃っています (すべてが主流であり、必ずしもニッチなものではありません)。何も持っていない場合は、コメント欄にメッセージを残してください。

不足がある場合は修正してください、ありがとう!

docker-compose を使用してサービスを実行する手順は次のとおりです。

  1. docker-compose.yml という名前のファイルを作成し、その中にサービスを定義します。例:
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"   
  1. docker-compose.yml ファイルを含むディレクトリで次のコマンドを実行して、サービスを開始します。
docker-compose up -d    

これにより、サービスがバックグラウンド モードで開始されます。すべてが正常であれば、次のような出力が表示されます。

[+] Running 1/1
 ✔ Container nginx  Started                                                                                                  0.3s
  1. サービスを停止するには、docker-compose.yml ファイルを含む
docker-compose down    

1. Web サーバーとアプリケーション サーバー

1.1 Nginx

Nginx は、高性能のオープンソース Web サーバーおよびリバース プロキシ サーバーです。

version: '3'
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/html:/usr/share/nginx/html
  • version: '3': Docker Compose ファイルのバージョンを指定します。「3」は Docker Compose の最新バージョンです。
  • services:: このセクションでは、Docker 環境で作成されるサービスを定義します。各サービスは Docker コンテナを表します。
  • nginx:: これはサービスの名前で、「nginx」という名前のコンテナが作成されることを示します。
  • image: nginx:latest: 使用する Docker イメージ (つまり、Nginx Web サーバーの最新バージョンである nginx:latest) を指定します。
  • container_name: nginx: コンテナの作成時に「nginx」という名前になるようにコンテナの名前を設定します。
  • ports:: このセクションではポート マッピングを定義します。ここでは、ホストのポート 80 をコンテナのポート 80 にマッピングします。これは、ブラウザでホスト マシンのポート 80 にアクセスすると、リクエストがコンテナのポート 80 にルーティングされることを意味します。これは、Nginx サーバーがリッスンするポートです。
  • volumes:: このセクションではボリューム マウントを定義します。ここでは、ホストの ./nginx/conf ディレクトリをコンテナの /etc/nginx/conf.d ディレクトリにマウントします。これは、./nginx/conf ディレクトリ内の Nginx 構成ファイルをホスト マシンで更新でき、コンテナの再起動後に変更が Nginx サーバーに適用されることを意味します。さらに、ホストの ./nginx/html ディレクトリはコンテナの /usr/share/nginx/html ディレクトリにマウントされます。つまり、 ./nginx/html ディレクトリはホスト上で更新できます。コンテナー内の Web ページ ファイルを保存し、コンテナーの再起動後に Nginx サーバーのデフォルトの Web ページ ディレクトリに変更を適用します。

./nginx/conf ディレクトリに default.conf という名前の Nginx 構成ファイルを作成します。

server {
    listen 80;
    server_name localhost;

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

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

この構成ファイルは、単純な Nginx サーバーを定義し、ホストのポート 80 をリッスンし、リクエストを /usr/share/nginx/html ディレクトリにマッピングし、エラー ページの処理を定義します。

./nginx/html ディレクトリに index.html という名前の静的 HTML ファイルを作成します。必要に応じてHTMLコンテンツを記述できます。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Welcome to My Nginx Server</title>
    <style>
        body {
            font-family: 'Arial', sans-serif;
            text-align: center;
            margin: 100px;
        }

        h1 {
            color: #333;
        }

        p {
            color: #666;
        }
    </style>
</head>
<body>
    <h1>Welcome to My Nginx Server</h1>
    <p>This is a simple HTML page served by Nginx.</p>
</body>
</html>
1.2 アパッチ
version: '3'
services:
  apache:
    image: httpd:latest
    container_name: apache
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/local/apache2/htdocs
  • version: '3': Docker Compose ファイルのバージョンを指定します。「3」は Docker Compose の最新バージョンです。
  • services:: このセクションでは、Docker 環境で作成されるサービスを定義します。各サービスは Docker コンテナを表します。
  • apache:: これはサービスの名前で、「apache」という名前のコンテナが作成されることを示します。
  • image: httpd:latest: 使用する Docker イメージ (つまり、Apache HTTP サーバーの最新バージョンである httpd:latest) を指定します。
  • container_name: apache: コンテナの作成時に「apache」という名前が付けられるようにコンテナの名前を設定します。
  • ports:: このセクションではポート マッピングを定義します。ここでは、ホストのポート 80 をコンテナのポート 80 にマッピングします。これは、ブラウザでホスト マシンのポート 80 にアクセスすると、リクエストがコンテナのポート 80 にルーティングされることを意味します。これは、Apache HTTP サーバーがリッスンするポートです。
  • volumes:: このセクションではボリューム マウントを定義します。ここでは、ホストの ./html ディレクトリをコンテナの /usr/local/apache2/htdocs ディレクトリにマウントします。これは、 ./html ディレクトリの内容をホスト マシン上で更新し、コンテナの再起動後に Apache サーバーのデフォルト Web ディレクトリに変更を適用できることを意味します。
1.3 トムキャット
version: '3'
services:
  tomcat:
    image: tomcat:latest
    container_name: tomcat
    ports:
      - "8080:8080"
    volumes:
      - ./webapps:/usr/local/tomcat/webapps
    environment:
      - CATALINA_OPTS=-Xmx512m
  • environment: - CATALINA_OPTS=-Xmx512m: これにより、コンテナーの環境変数が設定されます。この場合、CATALINA_OPTS 環境変数を -Xmx512m に設定します。これにより、Java 仮想マシン (JVM) の最大ヒープ メモリ サイズが 512MB に指定されます。これは、Tomcat サーバーが使用できるメモリの最大量を制御するのに役立ちます。
1.4 ライトTPD
version: '3'
services:
  lighttpd:
    image: lighttpd:latest
    container_name: lighttpd
    ports:
      - "80:80"
    volumes:
      - ./lighttpd.conf:/etc/lighttpd/lighttpd.conf
      - ./html:/var/www/html
  • "80:80"`: ホストのポート 80 を、一般的な Web サーバー ポートであるコンテナのポート 80 にマップします。
  • ./lighttpd.conf:/etc/lighttpd/lighttpd.conf`: ローカルの「lighttpd.conf」ファイルをコンテナ内の「/etc/lighttpd/lighttpd.conf」パスにマウントして、Lighttpd サービスを構成します。
  • - ./html:/var/www/html: ローカルの「html」ディレクトリをコンテナ内の「/var/www/html」パスにマウントします。これは、Web サーバーのデフォルトのドキュメント ルート ディレクトリです。

2. データベース

2.1mysql
version: '3.0'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    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
      --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    ports:
      - 3306:3306
    volumes:
      - ./log:/var/log/mysql
      - ./data:/var/lib/mysql
      - ./conf:/etc/mysql
  • MYSQL_ROOT_PASSWORD: 123456: 環境変数 MYSQL_ROOT_PASSWORD を、MySQL root ユーザーのパスワードを表す「123456」に設定します。
  • command:: コンテナ起動時に実行するコマンドを指定します。ここでは、デフォルトの認証プラグイン、文字セットと照合順序、タイムスタンプのデフォルト、大文字と小文字の区別、SQL モードなどを含む、いくつかの MySQL 構成オプションを示します。
  • ports:: コンテナのポートマッピングを指定します。
  • - 3306:3306: ホストの 3306 ポートを、MySQL のデフォルト ポートであるコンテナの 3306 ポートにマッピングします。
  • volumes:: ローカルファイルシステム上のディレクトリとコンテナ内のパスのマウント関係を指定します。
  • - ./log:/var/log/mysql: MySQL ログ ファイルを保存するには、ローカルの「log」ディレクトリをコンテナ内の「/var/log/mysql」パスにマウントします。
  • - ./data:/var/lib/mysql: MySQL データ ファイルを保存するために、ローカルの「data」ディレクトリをコンテナ内の「/var/lib/mysql」パスにマウントします。
  • - ./conf:/etc/mysql: MySQL 設定ファイルを保存するために、ローカルの「conf」ディレクトリをコンテナ内の「/etc/mysql」パスにマウントします。
2.2 ポストグレSQL
version: '3'
services:
  db:
    image: postgres:13.8
    container_name: postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123456
      POSTGRES_DB: postgres
    ports:
      - "5433:5432"
    volumes:
      - ./data:/var/lib/postgresql/data
  • version: '3': Docker Compose ファイルのバージョンを 3 として指定します。
  • services:: デプロイするサービスを指定します。
  • db:: PostgreSQL データベース サーバーとなる「db」という名前のサービスを定義します。
  • image: postgres:13.8: 指定された PostgreSQL イメージのバージョンは 13.8 です。
  • container_name: postgres: コンテナの名前を「postgres」と指定します。
  • restart: always: コンテナが終了後に自動的に再起動するように設定します。
  • environment:: コンテナの環境変数を指定します。
  • POSTGRES_USER: postgres: 環境変数 POSTGRES_USER を PostgreSQL のユーザー名を表す「postgres」に設定します。
  • POSTGRES_PASSWORD: 123456: 環境変数 POSTGRES_PASSWORD を、PostgreSQL のパスワードを表す「123456」に設定します。
  • POSTGRES_DB: postgres: 環境変数 POSTGRES_DB を「postgres」に設定し、使用するデータベース名を示します。
  • ports:: コンテナのポートマッピングを指定します。
  • - "5433:5432": ホストの 5433 ポートを、PostgreSQL のデフォルト ポートであるコンテナの 5432 ポートにマッピングします。
  • volumes:: ローカルファイルシステム上のディレクトリとコンテナ内のパスのマウント関係を指定します。
  • - ./data:/var/lib/postgresql/data: ローカルの「data」ディレクトリを、コンテナ内の「/var/lib/postgresql/data」パスにマウントします。これは、PostgreSQL のデフォルトのデータ ストレージ パスです。
2.3 オラクル
version: '3.0'
services:
  oracle:
    image: wnameless/oracle-xe-11g-r2
    container_name: oracle
    ports:
      - "1521:1521"
    environment:
      - ORACLE_ALLOW_REMOTE=true
  • environment:: コンテナの環境変数を指定します。
  • - ORACLE_ALLOW_REMOTE=true処置: 環境変数 ORACLE_ALLOW_REMOTE を true に設定して、Oracle データベースへのリモート アクセスを許可します。
2.4 モンゴDB
version: '3.0'
services:
  mongodb:
    image: mongo:latest
    container_name: mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
    volumes:
      - ./data:/data/db
    ports:
      - "27017:27017"
  • image: mongo:latest: 使用する MongoDB イメージを指定します。これは最新バージョンです。
  • container_name: mongodb: コンテナの名前を「mongodb」と指定します。
  • environment:: コンテナの環境変数を指定します。
  • MONGO_INITDB_ROOT_USERNAME: root: 環境変数 MONGO_INITDB_ROOT_USERNAME を、MongoDB の root ユーザー名を表す「root」に設定します。
  • MONGO_INITDB_ROOT_PASSWORD: 123456: 環境変数 MONGO_INITDB_ROOT_PASSWORD を、MongoDB root ユーザーのパスワードを表す「123456」に設定します。
  • volumes:: ローカルファイルシステム上のディレクトリとコンテナ内のパスのマウント関係を指定します。
  • - ./data:/data/db: ローカルの「data」ディレクトリをコンテナ内の「/data/db」パスにマウントします。これは、MongoDB のデフォルトのデータ ストレージ パスです。
  • ports:: コンテナのポートマッピングを指定します。
  • - "27017:27017": ホストの 27017 ポートを、MongoDB のデフォルト ポートであるコンテナの 27017 ポートにマップします。
2.5 SQLサーバー
version: '3.0'
services:
  db:
    image: mcr.microsoft.com/mssql/server:2017-latest
    restart: always
    container_name: sqlserver
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: 123456
    ports:
      - 1433:1433
    volumes:
      - ./mssql:/var/opt/mssql
  • db:: SQL Server データベース サーバーとなる「db」という名前のサービスを定義します。
  • image: mcr.microsoft.com/mssql/server:2017-latest: 使用する SQL Server イメージを指定します。これは 2017 バージョンの最新バージョンです。
  • restart: always: 終了後にコンテナを自動的に再起動します。
  • container_name: sqlserver: コンテナの名前を「sqlserver」と指定します。
  • environment:: コンテナの環境変数を指定します。
  • ACCEPT_EULA: Y: 環境変数 ACCEPT_EULA を Y に設定して、エンド ユーザー使用許諾契約への同意を示します。
  • SA_PASSWORD: 123456: 環境変数 SA_PASSWORD を、SQL Server システム管理者 (SA) アカウントのパスワードである 123456 に設定します。
  • ports:: コンテナのポートマッピングを指定します。
  • - 1433:1433: ホストの 1433 ポートを、SQL Server の既定のポートであるコンテナーの 1433 ポートにマップします。
  • volumes:: ローカルファイルシステム上のディレクトリとコンテナ内のパスのマウント関係を指定します。
  • - ./mssql:/var/opt/mssql: ローカルの「mssql」ディレクトリをコンテナ内の「/var/opt/mssql」パスにマウントします。

3. メッセージキューとイベント駆動型システム

3.1 アクティブMQ
version: '3'
services:
  activemq:
    image: rmohr/activemq:latest
    container_name: my_activemq
    ports:
      - "61616:61616"
      - "8161:8161"
    volumes:
      - ./data:/var/lib/activemq

は、 ミラーを使用して、activemq という名前のサービスを定義します。このイメージには ActiveMQ が含まれており、ホストのポート 61616 (メッセージング用) と 8161 (管理インターフェイス用) をコンテナ内の対応するポートにマップします。 ActiveMQ データ ディレクトリをホスト上の ディレクトリにマップするボリュームもマウントされます。 rmohr/activemq./data

3.2 ラビットMQ
version: '3'
services:
  activemq:
    image: rmohr/activemq:latest
    container_name: my_activemq
    ports:
      - "61616:61616"
      - "8161:8161"
    volumes:
      - ./data:/var/lib/activemq

は、公式の RabbitMQ イメージを使用して、rabbitmq という名前のサービスを定義します。ホストのポート 5672 (AMQP 用) および 15672 (RabbitMQ 管理インターフェイス用) をコンテナ内の対応するポートにマップします。 RabbitMQ データ ディレクトリをホスト上の ./data ディレクトリにマップするボリュームもマウントされます。

3.3 アパッチカフカ
version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:latest
    container_name: my_zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka:latest
    container_name: my_kafka
    ports:
      - "9092:9092"
    expose:
      - "9093"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_CREATE_TOPICS: "my-topic:1:1"

は 2 つのサービス、zookeeperkafka を定義します。 zookeeper は wurstmeister から提供された Zookeeper イメージを使用し、 kafka は wurstmeister から提供された Kafka イメージを使用しました。 zookeeper サービスはポート 2181 でホストをリッスンします。 kafka サービスはポート 9092 でホストをリッスンします (外部アクセス用)。一部の環境変数は、Kafka を構成するために設定されます。 KAFKA_CREATE_TOPICS 変数に注目してください。この変数は、起動時に my-topic という名前のトピックを作成するために使用されます。

3.4 NATS
version: '3'
services:
  nats-server:
    image: nats:latest
    container_name: my-nats-container
    ports:
      - "4222:4222"
      - "6222:6222"
      - "8222:8222"

  nats-publisher:
    image: nats:latest
    container_name: my-nats-publisher
    command: nats-pub -s nats://nats-server:4222 my_subject "Hello NATS!"
    depends_on:
      - nats-server
  • nats-serverこのサービスは公式 NATS イメージを使用し、コンテナーの 4222、6222、および 8222 ポートをホストにマッピングします。これらのポートは、クライアント接続、クラスター通信、および監視に使用されます。
  • nats-publisher サービスも NATS ミラーリングを使用し、 nats-server サービスに依存します。そのコマンドは、起動時に nats-pub を使用して NATS サーバーにメッセージをパブリッシュすることです。

4. キャッシュとメモリ内データ ストレージ

4.1 リディス
version: '3'
services:
  redis:
    image: redis:latest
    container_name: my-redis-container
    ports:
      - "6379:6379"
    volumes:
      - ./redis-data:/data
    command: redis-server --appendonly yes
    environment:
      - REDIS_REPLICATION_MODE=master
      - REDIS_PASSWORD=123456
  • image: redis:latest公式 Redis イメージを使用するように指定します。
  • container_name: my-redis-containerRedisコンテナの名前を指定します。
  • ports: - "6379:6379"コンテナの 6379 ポートをホストの 6379 ポートにマッピングします。
  • volumes: - ./redis-data:/dataデータの永続性を実現するには、Redis データ ディレクトリをホストにマップします。
  • command: redis-server --appendonly yesRedisコンテナ起動時にコマンドを設定し、永続化を有効にします。
  • environment: - REDIS_REPLICATION_MODE=master - REDIS_PASSWORD=123456パスワードやマスター/スレーブ レプリケーション モードの設定など、Redis コンテナーの環境変数を設定します。
4.2 Memcached
version: '3'
services:
  memcached:
    image: memcached:latest
    container_name: my-memcached-container
    ports:
      - "11211:11211"
    environment:
      - MEMCACHED_MEMORY_LIMIT=64 # 设置内存限制为64MB
      - MEMCACHED_LOG_FILE=/var/log/memcached/memcached.log
      - MEMCACHED_LOG_LEVEL=-vv # 设置日志级别为详细
    volumes:
      - ./memcached-data:/data
      - ./memcached-logs:/var/log/memcached
  • memcachedこのサービスは公式の Memcached イメージを使用し、コンテナーの 11211 ポートをホストにマップします。
  • environment セクションには、メモリ制限を設定するための MEMCACHED_MEMORY_LIMIT 、ログ ファイルのパスを指定するための MEMCACHED_LOG_FILE など、いくつかの環境変数が含まれています。 >< a i=3> はログ レベルの設定に使用されます。 MEMCACHED_LOG_LEVEL
  • volumes 部分は、コンテナ内の /data ディレクトリをホスト上の ./memcached-data ディレクトリにマッピングし、 /var/log/memcached ディレクトリをマッピングします。ディレクトリへの./memcached-logs ホスト上のディレクトリは、データとログの永続化を実装します。

5. 分散ファイルシステム

5.1 高速DFS

FastDFS は、高性能、高信頼性のファイル ストレージ ソリューションを提供するように設計されたオープン ソースの分散ファイル システムです。通常、画像、オーディオ、ビデオなどの大量の小さなファイルの分散ストレージに使用されます。

version: '3.3'
services:
  tracker:
    image: season/fastdfs:1.2
    container_name: tracker
    network_mode: host
    restart: always
    ports:
      - "22122:22122"
    command: "tracker"

  storage:
    image: season/fastdfs:1.2
    container_name: storage
    network_mode: host
    restart: always
    volumes:
      - "./storage.conf:/fdfs_conf/storage.conf"
      - "./storage_base_path:/fastdfs/storage/data"
      - "./store_path0:/fastdfs/store_path"
    environment:
      TRACKER_SERVER: "192.168.1.100:22122"
    command: "storage"

  nginx:
    image: season/fastdfs:1.2
    container_name: fdfs-nginx
    restart: always
    network_mode: host
    volumes:
      - "./nginx.conf:/etc/nginx/conf/nginx.conf"
      - "./store_path0:/fastdfs/store_path"
    environment:
      TRACKER_SERVER: "192.168.1.100:22122"
    command: "nginx"

設定ファイル

ストレージ.conf


# the name of the group this storage server belongs to
group_name=group1

# bind an address of this host
# empty for bind all addresses of this host
bind_addr=

# if bind an address of this host when connect to other servers
# (this storage server as a client)
# true for binding the address configed by above parameter: "bind_addr"
# false for binding any address of this host
client_bind=true

# the storage server port
port=23000

# connect timeout in seconds
# default value is 30s
connect_timeout=30

# network timeout in seconds
# default value is 30s
network_timeout=60

# heart beat interval in seconds
heart_beat_interval=30

# disk usage report interval in seconds
stat_report_interval=60

# the base path to store data and log files
base_path=/fastdfs/storage

# max concurrent connections the server supported
# default value is 256
# more max_connections means more memory will be used
max_connections=256

# the buff size to recv / send data
# this parameter must more than 8KB
# default value is 64KB
# since V2.00
buff_size = 256KB

# accept thread count
# default value is 1
# since V4.07
accept_threads=1

# work thread count, should <= max_connections
# work thread deal network io
# default value is 4
# since V2.00
work_threads=4

# if disk read / write separated
##  false for mixed read and write
##  true for separated read and write
# default value is true
# since V2.00
disk_rw_separated = true

# disk reader thread count per store base path
# for mixed read / write, this parameter can be 0
# default value is 1
# since V2.00
disk_reader_threads = 1

# disk writer thread count per store base path
# for mixed read / write, this parameter can be 0
# default value is 1
# since V2.00
disk_writer_threads = 1

# when no entry to sync, try read binlog again after X milliseconds
# must > 0, default value is 200ms
sync_wait_msec=50

# after sync a file, usleep milliseconds
# 0 for sync successively (never call usleep)
sync_interval=0

# storage sync start time of a day, time format: Hour:Minute
# Hour from 0 to 23, Minute from 0 to 59
sync_start_time=00:00

# storage sync end time of a day, time format: Hour:Minute
# Hour from 0 to 23, Minute from 0 to 59
sync_end_time=23:59

# write to the mark file after sync N files
# default value is 500
write_mark_file_freq=500

# path(disk or mount point) count, default value is 1
store_path_count=1

# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/fastdfs/store_path
#store_path1=/home/yuqing/fastdfs2

# subdir_count  * subdir_count directories will be auto created under each
# store_path (disk), value can be 1 to 256, default value is 256
subdir_count_per_path=256

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.1.100:22122

#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info

#unix group name to run this program,
#not set (empty) means run by the group of current user
run_by_group=

#unix username to run this program,
#not set (empty) means run by current user
run_by_user=

# allow_hosts can ocur more than once, host can be hostname or ip address,
# "*" means match all ip addresses, can use range like this: 10.0.1.[1-15,20] or
# host[01-08,20-25].domain.com, for example:
# allow_hosts=10.0.1.[1-15,20]
# allow_hosts=host[01-08,20-25].domain.com
allow_hosts=*

# the mode of the files distributed to the data path
# 0: round robin(default)
# 1: random, distributted by hash code
file_distribute_path_mode=0

# valid when file_distribute_to_path is set to 0 (round robin),
# when the written file count reaches this number, then rotate to next path
# default value is 100
file_distribute_rotate_count=100

# call fsync to disk when write big file
# 0: never call fsync
# other: call fsync when written bytes >= this bytes
# default value is 0 (never call fsync)
fsync_after_written_bytes=0

# sync log buff to disk every interval seconds
# must > 0, default value is 10 seconds
sync_log_buff_interval=10

# sync binlog buff / cache to disk every interval seconds
# default value is 60 seconds
sync_binlog_buff_interval=10

# sync storage stat info to disk every interval seconds
# default value is 300 seconds
sync_stat_file_interval=300

# thread stack size, should >= 512KB
# default value is 512KB
thread_stack_size=512KB

# the priority as a source server for uploading file.
# the lower this value, the higher its uploading priority.
# default value is 10
upload_priority=10

# the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
# multi aliases split by comma. empty value means auto set by OS type
# default values is empty
if_alias_prefix=

# if check file duplicate, when set to true, use FastDHT to store file indexes
# 1 or yes: need check
# 0 or no: do not check
# default value is 0
check_file_duplicate=0

# file signature method for check file duplicate
## hash: four 32 bits hash code
## md5: MD5 signature
# default value is hash
# since V4.01
file_signature_method=hash

# namespace for storing file indexes (key-value pairs)
# this item must be set when check_file_duplicate is true / on
key_namespace=FastDFS

# set keep_alive to 1 to enable persistent connection with FastDHT servers
# default value is 0 (short connection)
keep_alive=0

# you can use "#include filename" (not include double quotes) directive to
# load FastDHT server list, when the filename is a relative path such as
# pure filename, the base path is the base path of current/this config file.
# must set FastDHT server list when check_file_duplicate is true / on
# please see INSTALL of FastDHT for detail
##include /home/yuqing/fastdht/conf/fdht_servers.conf

# if log to access log
# default value is false
# since V4.00
use_access_log = false

# if rotate the access log every day
# default value is false
# since V4.00
rotate_access_log = false

# rotate access log time base, time format: Hour:Minute
# Hour from 0 to 23, Minute from 0 to 59
# default value is 00:00
# since V4.00
access_log_rotate_time=00:00

# if rotate the error log every day
# default value is false
# since V4.02
rotate_error_log = false

# rotate error log time base, time format: Hour:Minute
# Hour from 0 to 23, Minute from 0 to 59
# default value is 00:00
# since V4.02
error_log_rotate_time=00:00

# rotate access log when the log file exceeds this size
# 0 means never rotates log file by log file size
# default value is 0
# since V4.02
rotate_access_log_size = 0

# rotate error log when the log file exceeds this size
# 0 means never rotates log file by log file size
# default value is 0
# since V4.02
rotate_error_log_size = 0

# if skip the invalid record when sync file
# default value is false
# since V4.02
file_sync_skip_invalid_record=false

# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false

# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600

# use the ip address of this storage server if domain_name is empty,
# else this domain name will ocur in the url redirected by the tracker server
http.domain_name=

tracker_server=192.168.1.100:22122

# the port of the web server on this storage server
http.server_port=8888

nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8088;
        server_name  localhost;

        #charset koi8-r;

        #缩略图需要使用插件,需要单独构建nginx镜像,此处忽略
        #location /group([0-9])/M00/.*\.(gif|jpg|jpeg|png)$ {
         #   root /fastdfs/storage/data;
         #   image on;
         #   image_output off;
         #   image_jpeg_quality 75;
         #   image_backend off;
        #    image_backend_server http://baidu.com/docs/aabbc.png;
       # }

        # group1
        location /group1/M00 {
        # 文件存储目录
            root /fastdfs/storage/data;
            ngx_fastdfs_module;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 }
}

5.2 グルスターFS

GlusterFS は、複数のストレージ サーバーを 1 つの統合ストレージ プールに集約できるオープン ソースの分散ファイル システムで、高可用性とスケーラビリティを提供します。

version: '3'
services:
  glusterfs-server-1:
    image: gluster/gluster-centos
    container_name: glusterfs-server-1
    privileged: true
    command: /usr/sbin/init
    network_mode: host
    volumes:
      - /data/brick1

  glusterfs-server-2:
    image: gluster/gluster-centos
    container_name: glusterfs-server-2
    privileged: true
    command: /usr/sbin/init
    network_mode: host
    volumes:
      - /data/brick2

  glusterfs-client:
    image: gluster/gluster-centos
    container_name: glusterfs-client
    privileged: true
    command: /usr/sbin/init
    network_mode: host
    depends_on:
      - glusterfs-server-1
      - glusterfs-server-2
    volumes:
      - /mnt/glusterfs

networks:
  default:
    external:
      name: host

は、glusterfs-server-1glusterfs-server-2glusterfs-client の 3 つのサービスを定義します。 2 つの glusterfs-server サービスは 2 つの GlusterFS ストレージ ノードを表し、 glusterfs-client サービスは GlusterFS クライアントです。 GlusterFS によって公式に提供されている Docker イメージを使用し、必要な権限を取得するためにprivileged: true設定しました。

5.3 ムースFS

MooseFS は、高性能、高可用性の分散ストレージ ソリューションを提供するように設計されたオープンソースの分散ファイル システムです。

version: '3'
services:
  # MooseFS Master节点
  mfsmaster:
    image: moosefs/moosefs:latest
    container_name: mfsmaster
    command: /bin/bash -c "mfsmaster start && mfschunkmaster start && tail -f /dev/null"
    ports:
      - "9419:9419"
    networks:
      - moosefs_net
    restart: always

  # MooseFS Metadata服务器节点
  mfsmeta:
    image: moosefs/moosefs:latest
    container_name: mfsmeta
    command: /bin/bash -c "mfsmetarestore start && tail -f /dev/null"
    networks:
      - moosefs_net
    restart: always

  # MooseFS Chunk服务器节点
  mfschunk:
    image: moosefs/moosefs:latest
    container_name: mfschunk
    command: /bin/bash -c "mfschunkserver start && tail -f /dev/null"
    networks:
      - moosefs_net
    restart: always

  # MooseFS CGI服务器节点
  mfscgiserv:
    image: moosefs/moosefs:latest
    container_name: mfscgiserv
    command: /bin/bash -c "mfscgiserv start && tail -f /dev/null"
    networks:
      - moosefs_net
    restart: always

networks:
  moosefs_net:

mfsmaster:

  • イメージ: MooseFS のマスター ノード (Master) を含む moosefs/moosefs イメージを使用します。
  • container_name: コンテナの名前を mfsmaster に設定します。
  • コマンド: MooseFS マスター ノードとチャンク マスター ノードを起動し、tail -f /dev/null コンテナを実行し続けます。
  • ポート: MooseFS モニタリング用に、ホストの 9419 ポートをコンテナの 9419 ポートにマッピングします。
  • ネットワーク: moosefs_net という名前のカスタム ネットワークを使用します。
  • 再起動: コンテナが終了すると必ず再起動します。

mfsmeta:

  • 上記と同様、MooseFS のメタデータサーバーノードの構成です。

mfschunk:

  • 上記と同様に、これは MooseFS Chunk サーバー ノードの構成です。

mfscgiserv:

  • 上と同様、MooseFS の CGI サーバーノードの構成です。

ネットワーク:

  • カスタム ネットワークを定義moosefs_netして、MooseFS のさまざまなノードを接続します。
5.4 セフ

Ceph は、高性能、高可用性、拡張性を備えたオープンソースの分散ストレージ システムです。

version: '3'
services:
  mon:
    image: ceph/daemon:latest-luminous
    container_name: ceph-mon
    net: host
    environment:
      - CEPH_DAEMON=mon
      - MON_IP=192.168.1.100
      - CEPH_PUBLIC_NETWORK=your_public_network
    volumes:
      - /var/lib/ceph/mon/ceph-mon:/var/lib/ceph/mon/ceph-mon
    restart: always

  mgr:
    image: ceph/daemon:latest-luminous
    container_name: ceph-mgr
    net: host
    environment:
      - CEPH_DAEMON=mgr
      - MON_IP=192.168.1.100
    restart: always

  osd:
    image: ceph/daemon:latest-luminous
    container_name: ceph-osd
    net: host
    privileged: true
    environment:
      - OSD_DEVICE=/dev/sdb
      - OSD_FORCE_ZAP=1
      - MON_IP=192.168.1.100
    volumes:
      - /var/lib/ceph/osd/ceph-osd:/var/lib/ceph/osd/ceph-osd
    restart: always

networks:
  host_net:
    external: true
    name: host

は、monmgrosd の 3 つのサービスを定義します。これらのサービスは、それぞれ Ceph の Monitor、Manager、および Object Storage Daemon を表します。

この構成では、Ceph が公式に提供する Docker イメージを使用し、対応する環境変数を設定します。 192.168.1.100your_public_network を、監視ノードの IP アドレスとパブリック ネットワーク情報に置き換えてください。

  • :
    • 監視ノードを表すためにミラーを使用します。 ceph/daemon
    • Set MON_IP は、監視ノードの IP アドレスです。
    • volumes監視ノードのデータをホストの/var/lib/ceph/mon/ceph-monディレクトリに保存します。
  • マネージャー:
    • Manager ノードを表すためにミラーを使用します。 ceph/daemon
    • Set MON_IP は、監視ノードの IP アドレスです。
  • OSD:
    • オブジェクト ストレージ デーモン ノードを表すためにミラーを使用します。 ceph/daemon
    • OSD_DEVICEストレージとして使用するデバイスを に設定
    • volumesOSD ノードのデータをホストの /var/lib/ceph/osd/ceph-osd ディレクトリに保存します。

6. 検索およびインデックス作成サービス

6.1 エラスティックサーチ
version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
    container_name: my-elasticsearch-container
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
      - "9300:9300"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 2g
    volumes:
      - ./elasticsearch-data:/usr/share/elasticsearch/data
  • elasticsearchこのサービスは、Elasticsearch の公式 Docker イメージを使用し、コンテナーの 9200 ポートと 9300 ポートをホストにマッピングします。
  • environment セクションにはいくつかの環境変数が含まれており、その discovery.type=single-node は Elasticsearch を単一ノードとして設定することを示します。
  • ulimits セクションと mem_limit セクションは、Elasticsearch の推奨設定であるメモリ ロック (mlockall) を設定するために使用されます。
  • volumes 部分は、コンテナ内の /usr/share/elasticsearch/data ディレクトリをホスト上の ./elasticsearch-data ディレクトリにマップして、データの永続性を実現します。
6.2 ソルル
version: '3'
services:
  solr:
    image: solr:8.11.0
    container_name: my-solr-container
    ports:
      - "8983:8983"
    environment:
      - SOLR_CORE=mycore
    volumes:
      - ./solr-data:/opt/solr/server/solr/mycore/data
  • solrこのサービスは、Solr の公式 Docker イメージを使用し、コンテナーの 8983 ポートをホストにマップします。
  • environment セクションには、Solr コア (インデックス) 名を指定する環境変数SOLR_CORE が含まれています。この例では、コア名は mycore です。
  • volumes 部分は、コンテナ内の /opt/solr/server/solr/mycore/data ディレクトリをホスト上の ./solr-data ディレクトリにマップして、データの永続性を実現します。

7. サービスの検出

7.1 ナコス
version: '3'
services:
  nacos-server:
    image: nacos/nacos-server:latest
    ports:
      - "8848:8848"
    environment:
      - PREFER_HOST_MODE=hostname
    command: -e embeddedStorage=true

  nacos-mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=nacos
      - MYSQL_USER=nacos
      - MYSQL_PASSWORD=nacos
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  nacos-redis:
    image: redis:latest
    ports:
      - "6379:6379"

  nacos-config:
    image: nacos/nacos-config:latest
    ports:
      - "8849:8849"
    environment:
      - PREFER_HOST_MODE=hostname
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=nacos-mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - REDIS_SERVICE_HOST=nacos-redis
      - REDIS_SERVICE_PORT=6379
      - NACOS_SERVER_ADDR=nacos-server:8848

  nacos-console:
    image: nacos/nacos-console:latest
    ports:
      - "8849:8849"
    environment:
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=nacos-mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - REDIS_SERVICE_HOST=nacos-redis
      - REDIS_SERVICE_PORT=6379
      - NACOS_SERVER_ADDR=nacos-server:8848

nacos-server仕える:

  • Nacos サーバー コンポーネントを含む 使用nacos/nacos-server:latest イメージ。
  • Nacos サーバーをホストのポート 8848 に公開します。
  • PREFER_HOST_MODE=hostname 環境変数は、サービス登録の方法としてホスト名を使用して設定されます。
  • 埋め込みストレージを有効にするには、-e embeddedStorage=true コマンドを使用します。

nacos-mysql仕える:

  • 公式のmysql:5.7ミラーを使用します。
  • ユーザー名、パスワードなどの MySQL 関連の環境変数を設定します。

nacos-redis仕える:

  • 公式のredis:latestミラーを使用します。
  • Redis サービスをホストのポート 6379 に公開します。

nacos-config仕える:

  • Nacos 構成センター コンポーネントを含む 使用nacos/nacos-config:latest イメージ。
  • Nacos 構成センターをホストのポート 8849 に公開します。
  • MySQL、Redis、Nacos サーバーとの接続情報を設定します。

nacos-console仕える:

  • Nacos コンソール コンポーネントを含む 使用nacos/nacos-console:latest イメージ。
  • Nacos コンソールをホストのポート 8849 に公開します。
  • MySQL、Redis、Nacos サーバーとの接続情報を設定します。
7.2 領事

HashiCorp が提供する、オープンソースのサービス検出および構成ツールです。

version: '3'
services:
  consul:
    image: consul:latest
    container_name: my-consul
    command: agent -server -bootstrap-expect=1 -ui -client=0.0.0.0
    ports:
      - "8500:8500"
      - "8600:8600/udp"
    volumes:
      - ./consul-data:/consul/data
    networks:
      - consul-net

networks:
  consul-net:
    driver: bridge
  • version: '3': Docker Compose ファイルのバージョンを指定します。
  • services: デプロイするサービスのリストを定義します。
  • consul: consul という名前のサービスを定義します。
    • image: consul:latest: Consul の公式 Docker イメージを使用すると、必要に応じて特定のバージョンを指定できます。
    • container_name: my-consul: Docker コンテナの名前を my-consul に設定します。
    • command: agent -server -bootstrap-expect=1 -ui -client=0.0.0.0: Consul Agent の起動コマンドを設定します。ここでは Consul サーバー (-server) モードで構成され、Web UI (-ui) が有効になっています。 -bootstrap-expect=1 は、これが単一ノードの Consul クラスタであることを示します。
    • ports: コンテナ内のポートをホストにマッピングします。ポート 8500 は Consul の Web UI に使用され、ポート 8600 は DNS クエリに使用されます。
    • volumes: Consul データの永続性を確保するために、コンテナ内のデータ ディレクトリをホストにマップします。
    • networks: consul-net という名前のカスタム ネットワークを定義します。
  • networks: カスタム ネットワーク consul-net を構成して、Consul コンテナがこのネットワーク上で通信できるようにします。
7.3 ズーキーパー

Zookeeper は、分散アプリケーションにシンプルかつ強力な調整システムを提供するオープンソースの分散調整サービスです。

version: '3'

services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    container_name: zookeeper
    ports:
      - "2181:2181"  # 映射 Zookeeper 默认端口到主机
    environment:
      ZOO_MY_ID: 1  # 设置 Zookeeper 节点的 ID
      ZOO_SERVERS: server.1=zookeeper:2888:3888  # 定义 Zookeeper 集群中的服务器列表
    volumes:
      - ./data:/data  # 映射数据目录到主机
      - ./datalog:/datalog  # 映射事务日志目录到主机
    restart: always  # 始终在容器退出时重新启动

networks:
  default:
    external:
      name: zookeeper-net  # 使用外部创建的网络
7.4 等

etcd は、主に構成共有とサービス検出に使用される可用性の高いキーと値のストレージ システムです。

version: '3'
services:
  etcd:
    image: quay.io/coreos/etcd:v3.4.13
    container_name: etcd
    command: ["etcd", "--data-dir=/etcd-data", "--name=etcd-node1", "--advertise-client-urls=http://0.0.0.0:2379", "--listen-client-urls=http://0.0.0.0:2379", "--initial-advertise-peer-urls=http://0.0.0.0:2380", "--listen-peer-urls=http://0.0.0.0:2380", "--initial-cluster=etcd-node1=http://etcd:2380", "--initial-cluster-token=etcd-cluster-token", "--initial-cluster-state=new"]
    ports:
      - "2379:2379"
      - "2380:2380"
    volumes:
      - ./etcd-data:/etcd-data
    restart: always

networks:
  default:
    external:
      name: etcd-net
  • image: 使用される etcd イメージのバージョン。この例では、quay.io/coreos/etcd:v3.4.13 が使用されます。必要に応じて他のバージョンを選択できます。

  • container_name: コンテナを参照しやすくするために、コンテナの名前を指定します。

  • command: データ ディレクトリ、ノード名、アドバタイズおよびリスニング アドレス、初期クラスター構成などを含む Etcd ランタイムのコマンド ライン パラメーターを指定します。

  • ports: Etcd のデフォルト ポートをホストにマップします。

  • volumes: etcd データ ディレクトリをホストにマップして、コンテナが停止または削除された後もデータがホスト上に残るようにします。

  • restart: コンテナの終了時に etcd サービスが確実に再起動されるように、コンテナの再起動ポリシーを構成します。

  • networks: 外部ネットワーク etcd-net は、コンテナが相互に通信できるように定義されます。

8. ログの収集と分析

8.1 流暢な言語

Fluentd は、データ収集とログ転送のためのオープンソース ツールです。

version: '3'
services:
  fluentd:
    image: fluent/fluentd:latest
    container_name: fluentd
    volumes:
      - ./fluentd/conf:/fluentd/etc
    environment:
      - FLUENTD_CONF=fluent.conf
      - TZ=UTC
    ports:
      - "24224:24224"
      - "24224:24224/udp"
  • fluentdこのサービスは、Fluentd の公式 Docker イメージを使用して Fluentd を実行します。
  • volumes は、ホストの ./fluentd/conf ディレクトリをコンテナ内の /fluentd/etc ディレクトリにマッピングします。これは、カスタム構成用に Fluentd 構成ファイル fluent.conf をホスト上に配置するためです。
  • environment は、Fluentd 構成ファイル名を指定する FLUENTD_CONF やタイムゾーンを設定する TZ など、いくつかの環境変数を設定します。
  • portsコンテナとホストの間のポート マッピング関係が定義されます。これには、ホストの 24224 ポートからコンテナの 24224 ポートへのマッピングや、UDP プロトコルのサポートが含まれます。

./fluentd/conf ディレクトリに fluent.conf 構成ファイルを作成します。これは実際のニーズに応じてカスタマイズできます。

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match **>
  @type stdout
</match>
8.2 ログスタッシュ

Logstash は Elastic Stack のコンポーネントの 1 つで、データの処理と転送に使用されます。

version: '3'
services:
  logstash:
    image: docker.elastic.co/logstash/logstash:7.10.0
    container_name: logstash
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
      - ./logstash/config:/usr/share/logstash/config
    ports:
      - "5000:5000"
    environment:
      - "LS_JAVA_OPTS=-Xmx256m -Xms256m"
  • logstashこのサービスは、Logstash を実行するために Elastic によって提供される Logstash の公式 Docker イメージを使用します。
  • volumes ホストの ./logstash/pipeline ディレクトリをコンテナ内の /usr/share/logstash/pipeline ディレクトリにマッピングして Logstash 構成ファイルを保存し、 ./logstash/configこのディレクトリは、コンテナ内の /usr/share/logstash/config ディレクトリにマップされ、Logstash 構成の保存に使用されます。
  • portsコンテナとホストの間のポート マッピング関係が定義され、ホストの 5000 ポートがコンテナの 5000 ポートにマッピングされます。
  • environmentLogstash の Java 実行パラメータを設定します。

./logstash/pipeline ディレクトリに Logstash 構成ファイルを作成します (例: logstash.conf)。

input {
  tcp {
    port => 5000
  }
}

filter {
  # 添加需要的过滤规则
}

output {
  stdout { codec => rubydebug }
}
8.3 グレイログ

Graylog は、ログ管理と分析のためのオープンソース ツールです。ユーザーが大量のログ データをより簡単に処理および理解できるように設計された、強力なログ集約、検索、視覚化、および分析機能を提供します。 Graylog のデプロイには通常、Graylog サーバー、MongoDB データベース、Elasticsearch などの複数のコンポーネントが必要です。

version: '3'
services:
  # MongoDB
  mongo:
    image: mongo:4.4
    container_name: mongo
    volumes:
      - ./mongo/data:/data/db
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin_password
      - MONGO_INITDB_DATABASE=graylog

  # Elasticsearch
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
    container_name: elasticsearch
    volumes:
      - ./elasticsearch/data:/usr/share/elasticsearch/data
    environment:
      - discovery.type=single-node
      - cluster.name=graylog
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

  # Graylog
  graylog:
    image: graylog/graylog:4.2
    container_name: graylog
    depends_on:
      - mongo
      - elasticsearch
    ports:
      - "9000:9000"
      - "12201:12201/udp"
    environment:
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_BIND_ADDRESS=0.0.0.0
    links:
      - mongo:mongo
      - elasticsearch:elasticsearch
  • mongoこのサービスは、MongoDB の公式 Docker イメージを使用して Graylog データを保存します。
  • elasticsearchこのサービスは、Elasticsearch の公式 Docker イメージを使用して Graylog インデックスを保存します。
  • graylogこのサービスは、Graylog サーバーと Web インターフェイスを含む、Graylog の公式 Docker イメージを使用します。

ご注意ください:

  • mongo サービスでは、MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORDMONGO_INITDB_DATABASE がそれぞれ設定されますMongoDB 管理者のユーザー名、パスワード、データベース名。
  • elasticsearch サービスでは、discovery.typesingle-node に設定されており、Elasticsearch がシングルノード モードで実行されることを示しています。
  • graylog サービスでは、depends_on で依存サービス (mongo および elasticsearch) を指定します。 )、Graylog が開始する前にそれらが開始されていることを確認してください。
  • Graylog のユーザー名とパスワードは GRAYLOG_ROOT_PASSWORD_SHA2 で設定され、パスワードの SHA-256 ハッシュは echo -n yourpassword | shasum -a 256 を使用して生成できます。
8.4 キバナ

Kibana は、データの視覚化と分析のための Elastic Stack のコンポーネントです。

docker-compose.yml書類

version: '3'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana:7.14.0
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - "5601:5601"
  • kibanaこのサービスは、Elastic が提供する Kibana の公式 Docker イメージを使用して Kibana を実行します。
  • environment は Kibana 環境変数を設定します。ELASTICSEARCH_HOSTS は Elasticsearch のアドレスとポートを指定します。
  • portsコンテナとホストの間のポート マッピング関係が定義され、ホストの 5601 ポートがコンテナの 5601 ポートにマップされます。

9. 監視システムおよび警報サービス

9.1 プロメテウス

Prometheus は、システム インジケーターの収集と保存に使用できる強力な監視ツールであり、柔軟なクエリ言語 PromQL を提供します。また、アラートとグラフィカル ダッシュボードもサポートしているため、システム パフォーマンスのリアルタイム監視が容易になります。

docker-compose.yml書類

version: '3'
services:
  prometheus:
    image: prom/prometheus:v2.30.0
    container_name: prometheus
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
      - "--storage.tsdb.path=/prometheus"
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/data:/prometheus
  • prometheus このサービスは、Prometheus の公式 Docker イメージを使用します prom/prometheus:v2.30.0
  • container_name はコンテナ名 prometheus を指定します。
  • commandこのフィールドには、構成ファイルのパスやストレージ パスなど、Prometheus の起動時のコマンド パラメーターを指定します。
  • portsコンテナとホストの間のポート マッピング関係が定義され、ホストの 9090 ポートがコンテナの 9090 ポートにマップされます。
  • volumes は、ホスト上の ./prometheus/prometheus.yml ファイルをコンテナの /etc/prometheus/prometheus.yml にマッピングし、ホスト上の ./prometheus/data ディレクトリをコンテナ<にマッピングします。 /span>/prometheus、Prometheus データの保存に使用されます。

./prometheus ディレクトリに prometheus.yml 構成ファイルを作成して、Prometheus の監視ターゲットとルールを構成します。

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  # Add additional scrape configurations as needed
  • scrape_intervalPrometheus がメトリクスをクロールする間隔は 15 秒に指定されています。
  • scrape_configs セクションではクロール構成を定義します。この例では、Prometheus 自体のメトリクスのみが監視されます。必要に応じて、 jobtargets をさらに追加できます。
9.2 グラファナ

Grafana は、複数のデータ ソースをサポートし、豊富なグラフ作成機能とダッシュボード機能を提供するオープン ソースのデータ視覚化および監視プラットフォームです。

version: '3'
services:
  grafana:
    image: grafana/grafana:8.1.5
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - ./grafana/data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
      - ./grafana/dashboards:/var/lib/grafana/dashboards
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
  • grafana このサービスは Grafana の公式 Docker イメージを使用します grafana/grafana:8.1.5
  • container_name はコンテナ名 grafana を指定します。
  • portsコンテナとホストの間のポート マッピング関係が定義され、ホストのポート 3000 がコンテナのポート 3000 にマッピングされます。
  • volumes Grafana データを保存するためにホスト上の ./grafana/data ディレクトリをコンテナの /var/lib/grafana にマッピングし、 ./grafana/provisioning ディレクトリをマッピングします。データ ソースとダッシュボードを構成するためにコンテナの /etc/grafana/provisioning にマッピングし、ストアのカスタマイズされたダッシュボードのために ./grafana/dashboards ディレクトリをコンテナの /var/lib/grafana/dashboards にマッピングします。
  • environment は Grafana 環境変数を設定します。GF_SECURITY_ADMIN_PASSWORD は管理者ユーザーのパスワードを指定します。

./grafana/provisioning/datasources ディレクトリにデータ ソース構成ファイル prometheus.yml を作成します。

apiVersion: 1

datasources:
- name: Prometheus
  type: prometheus
  access: proxy
  url: http://prometheus:9090
  basicAuth: false
  isDefault: true
  editable: true
9.3 ザビックス

Zabbix は、ネットワーク、サーバー、仮想マシン、さまざまなネットワーク デバイスの監視と管理に使用されるオープンソース ソフトウェアです。

version: '3'
services:
  zabbix-server:
    image: zabbix/zabbix-server-pgsql:alpine-5.4-latest
    container_name: zabbix-server
    ports:
      - "10051:10051"
    environment:
      - DB_SERVER_HOST=zabbix-db
      - POSTGRES_DB=zabbix
      - POSTGRES_USER=zabbix
      - POSTGRES_PASSWORD=zabbix
      - ZBX_SERVER_NAME=zabbix-server

  zabbix-web:
    image: zabbix/zabbix-web-nginx-pgsql:alpine-5.4-latest
    container_name: zabbix-web
    ports:
      - "8080:8080"
    environment:
      - DB_SERVER_HOST=zabbix-db
      - POSTGRES_DB=zabbix
      - POSTGRES_USER=zabbix
      - POSTGRES_PASSWORD=zabbix
      - ZBX_SERVER_NAME=zabbix-server
      - PHP_TZ=UTC

  zabbix-db:
    image: postgres:13-alpine
    container_name: zabbix-db
    environment:
      - POSTGRES_DB=zabbix
      - POSTGRES_USER=zabbix
      - POSTGRES_PASSWORD=zabbix
  • zabbix-server このサービスは、Zabbix Server の公式 Docker イメージを使用します zabbix/zabbix-server-pgsql:alpine-5.4-latest。 Zabbix サーバーを実行し、ポート 10051 をリッスンする役割を果たします。
  • zabbix-web このサービスは、Zabbix Web の公式 Docker イメージを使用します zabbix/zabbix-web-nginx-pgsql:alpine-5.4-latest。 Zabbix Web インターフェイスの実行とポート 8080 でのリッスンを担当します。このサービスの構成は zabbix-server サービスの構成と一致する必要があることに注意してください。
  • zabbix-db このサービスは PostgreSQL の公式 Docker イメージを使用します postgres:13-alpine。 Zabbix のデータベースとして機能し、Zabbix Server と Zabbix Web をそれに接続します。 Zabbix のバージョンによっては、ここでのバージョンを調整する必要がある場合があることに注意してください。

./zabbix ディレクトリに docker-compose.override.yml という名前のファイルを作成し、Zabbix データベースの初期化 SQL ファイルを指定します。

version: '3'
services:
  zabbix-db:
    volumes:
      - ./zabbix-db-init:/docker-entrypoint-initdb.d

./zabbix-db-init ディレクトリには、schema.sql という名前の SQL ファイルを配置できます。このファイルには、Zabbix データベースの初期化スクリプトが含まれています。

9.4 ナギオス

Nagios は、システム、ネットワーク、インフラストラクチャの監視に広く使用されているオープンソース ツールです。

version: '3'
services:
  nagios:
    image: jasonrivers/nagios:latest
    container_name: nagios
    ports:
      - "8080:80"
    environment:
      - NAGIOSADMIN_USER=admin
      - NAGIOSADMIN_PASS=adminpassword

  nagios-plugins:
    image: nagios-plugins:latest
    container_name: nagios-plugins
    depends_on:
      - nagios
  • nagios サービスは、Nagios Core といくつかの一般的に使用されるプラグインを含むjasonrivers/nagios イメージを使用します。ポート 8080 でリッスンし、 http://localhost:8080 にアクセスして Nagios Web インターフェイスにアクセスできます。
    • NAGIOSADMIN_USER および NAGIOSADMIN_PASS 環境変数は、Nagios 管理者ユーザーのユーザー名とパスワードを設定します。
  • nagios-plugins サービスは Nagios Plugins イメージを使用します。 Nagios プラグインには、さまざまなサービスやリソースを監視するための一連のプラグインが含まれています。このサービスは nagios サービスに依存しているため、Nagios Core が開始されていることを確認してください。

Nagios の基本設定を構成するには、./nagios ディレクトリに nagios.cfg という名前の構成ファイルを作成します。

# Define a host for the local machine
define host {
    use                     linux-server
    host_name               localhost
    alias                   localhost
    address                 127.0.0.1
    max_check_attempts      5
    check_period            24x7
    notification_interval  30
    notification_period    24x7
}

# Define a service to check the disk space of the root partition
define service {
    use                     local-service
    host_name               localhost
    service_description     Root Partition
    check_command           check_local_disk!20%!10%!/
    max_check_attempts      5
    check_interval          5
    retry_interval          3
    check_period            24x7
    notification_interval  30
    notification_period    24x7
}

構成ファイルは、localhost とルート パーティションのディスク領域を監視するサービスを定義します。

10. CI/CD ツール

10.1 ジェンキンス

Jenkins は、ソフトウェアを構築、テスト、展開するためのオープンソースの自動化サーバーです。

version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    ports:
      - "8080:8080"
    volumes:
      - ./jenkins_home:/var/jenkins_home
    environment:
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false
      - JENKINS_OPTS=--prefix=/jenkins
    restart: always
  • jenkins このサービスは、Docker イメージの公式 Jenkins Long Term Support (LTS) バージョンを使用します jenkins/jenkins:lts
  • container_name はコンテナ名 jenkins を指定します。
  • portsコンテナとホストの間のポート マッピング関係が定義され、ホストの 8080 ポートがコンテナの 8080 ポートにマッピングされます。
  • volumes Jenkins データを保存するために、ホスト上の ./jenkins_home ディレクトリをコンテナの /var/jenkins_home にマップします。
  • environment は Jenkins 環境変数を設定し、JAVA_OPTS は最初の実行時にセットアップ ウィザードを無効にし、JENKINS_OPTS は Jenkins パス プレフィックスを /jenkins
  • restart: alwaysコンテナが終了時に常に再起動されるように設定します。
10.2 ドローン

Drone は、Docker コンテナをサポートするオープンソースの継続的インテグレーションおよび継続的デリバリー (CI/CD) プラットフォームです。

version: '3'
services:
  drone-server:
    image: drone/drone:2
    container_name: drone-server
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./drone/server:/data
    environment:
      - DRONE_GITHUB_CLIENT_ID=YOUR_GITHUB_CLIENT_ID
      - DRONE_GITHUB_CLIENT_SECRET=YOUR_GITHUB_CLIENT_SECRET
      - DRONE_RPC_SECRET=YOUR_RPC_SECRET
      - DRONE_SERVER_HOST=your-drone-domain.com
      - DRONE_SERVER_PROTO=https
      - DRONE_USER_CREATE=username:your-github-username,admin:true
    restart: always

  drone-runner:
    image: drone/drone-runner-docker:2
    container_name: drone-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_SECRET=YOUR_RPC_SECRET
      - DRONE_RUNNER_CAPACITY=2
    restart: always
  • drone-serverこれは Drone のサーバー側であり、ビルドおよび展開リクエストの処理を担当します。
  • drone-runnerこれは Drone のランナーであり、コンテナー内でビルド タスクを実行する責任があります。
  • DRONE_GITHUB_CLIENT_IDDRONE_GITHUB_CLIENT_SECRET は、GitHub での認証に使用される OAuth アプリケーションのクライアント ID とシークレットです。 GitHub で OAuth アプリケーションを作成し、ここでこれら 2 つの値を構成する必要があります。
  • DRONE_RPC_SECRETデータ送信の暗号化に使用されるキーです。ドローンの展開ごとに一意のキーを必ず生成してください。
  • DRONE_SERVER_HOSTドローン サービスのドメイン名または IP アドレスです。
  • DRONE_SERVER_PROTO Drone サービスで使用されるプロトコルを指定します。ここでは https に設定します。
  • DRONE_USER_CREATE は、最初のログイン時に管理者ユーザーを作成するために使用されます。 your-github-username を GitHub ユーザー名に置き換える必要があります。

11. コードウェアハウスおよびバージョン管理サービス

GitLab

GitLab は、コード リポジトリの管理、共同開発、継続的統合のためのオープン ソース プラットフォームです。

version: '3'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./gitlab/config:/etc/gitlab
      - ./gitlab/logs:/var/log/gitlab
      - ./gitlab/data:/var/opt/gitlab
    restart: always
  • gitlab このサービスは、GitLab CE (Community Edition) の公式 Docker イメージを使用します gitlab/gitlab-ce:latest。これは、GitLab のすべてのコンポーネントを含む完全なイメージです。
  • container_name はコンテナ名 gitlab を指定します。
  • portsコンテナとホストの間のポート マッピング関係が定義され、ホストのポート 80 をコンテナのポート 80 (HTTP) にマッピングし、ホストのポート 443 をコンテナのポート 443 (HTTPS) にマッピングします。
  • volumesホスト上の 3 つのディレクトリをコンテナにマップします。これらのディレクトリは、それぞれ GitLab 構成ファイル、ログ、データの保存に使用されます。
  • restart: alwaysコンテナが終了時に常に再起動されるように設定します。

12. VPNおよびリモートアクセスサービス

12.1 OpenVPN

OpenVPN は、暗号化とトンネリング技術を通じてインターネットへの安全な接続を可能にするオープンソースの仮想プライベート ネットワーク (VPN) ソリューションです。

version: '3'
services:
  openvpn:
    image: kylemanna/openvpn:2.6.1
    container_name: openvpn
    cap_add:
      - NET_ADMIN
    ports:
      - "1194:1194/udp"
    restart: always
    volumes:
      - ./openvpn-data:/etc/openvpn

networks:
  default:
    external:
      name: openvpn-net
  • image: OpenVPN ミラー バージョンが使用されます。この例では、kylemanna/openvpn:2.6.1 が使用されます。必要に応じて他のバージョンを選択できます。
  • container_name: コンテナを参照しやすくするために、コンテナの名前を指定します。
  • cap_add: NET_ADMIN 権限を有効にして、コンテナがネットワークを構成できるようにします。
  • ports: OpenVPN のデフォルト ポートをホストにマップします。
  • restart: コンテナの終了時に OpenVPN サービスが確実に再起動されるように、コンテナの再起動ポリシーを構成します。
  • volumes: OpenVPN データ ディレクトリをホストにマップして、コンテナが停止または削除された後も構成ファイルと証明書がホスト上に残るようにします。

サービスを開始する前に、OpenVPN 構成ファイルと証明書を作成する必要があります。 OpenVPN が公式に提供する easyrsa ツールを使用して証明書を生成できます。具体的な手順は次のとおりです。

  1. openvpn-data ディレクトリを作成して入力します。

    cd openvpn-data
    
  2. 次のコマンドを実行して証明書を初期化します。

    docker run -v $PWD:/etc/openvpn --rm kylemanna/openvpn:2.6.1 ovpn_genconfig -u udp://your_server_ip
    

    your_server_ip をサーバーのパブリック IP アドレスに置き換えます。

  3. 次のコマンドを実行して、初期証明書とキーを生成します。

    docker run -v $PWD:/etc/openvpn --rm -it kylemanna/openvpn:2.6.1 ovpn_initpki
    
  4. OpenVPN サービスを開始します。

    docker-compose up -d
    
12.2 FRP

Frp (Fast Reverse Proxy) は、リバース プロキシ用のオープン ソース ツールで、外部サーバーを介してローカル サービスにアクセスし、イントラネットへの侵入とポート マッピングを実現します。

version: '3'
services:
  frps:
    image: snowdreamtech/frps:0.37.1
    container_name: frps
    ports:
      - "7000:7000"
      - "7500:7500"
    restart: always
    volumes:
      - ./frps.ini:/etc/frp/frps.ini

networks:
  default:
    external:
      name: frp-net
  • image: 使用される Frp イメージのバージョン。この例では、snowdreamtech/frps:0.37.1 が使用されます。必要に応じて他のバージョンを選択できます。
  • container_name: コンテナを参照しやすくするために、コンテナの名前を指定します。
  • ports: Frp のデフォルト ポートをホストにマップします。ここで、 7000 ポートは Frp コンソールに使用され、 7500 ポートは Frp ステータス ページに使用されます。
  • restart: コンテナの終了時に Frp サービスが確実に再起動されるように、コンテナの再起動ポリシーを構成します。
  • volumes: Frp 構成ファイル frps.ini をホストにマップして、コンテナが停止または削除された後も構成がホスト上に残るようにします。
  • networks: 外部ネットワーク frp-net は、コンテナが相互に通信できるように定義されます。

次に、Frp 構成ファイル frps.ini を作成し、docker-compose.yml ファイルと同じディレクトリに配置する必要があります。

[common]
bind_port = 7000
vhost_http_port = 80
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

# 添加需要进行端口映射的配置
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = your-domain.com

2 つの設定例が含まれています。1 つは SSH ポート マッピング用、もう 1 つは HTTP ポート マッピング用です。実際のニーズに応じて構成する必要があります。

12.3 ワイヤーガード

WireGuard は、高速、最新、安全な VPN プロトコルであり、そのシンプルさとパフォーマンスの利点により、人気のある選択肢となっています。

version: '3'
services:
  wireguard:
    image: linuxserver/wireguard:latest
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000  # 替换为你的用户ID
      - PGID=1000  # 替换为你的组ID
      - TZ=UTC
    volumes:
      - ./config:/config
    ports:
      - "51820:51820/udp"
    restart: always

networks:
  default:
    external:
      name: wireguard-net
  • image: 使用する WireGuard イメージ。この例では、linuxserver/wireguard:latest が使用されます。必要に応じて他のバージョンを選択できます。
  • container_name: コンテナを参照しやすくするために、コンテナの名前を指定します。
  • cap_add: NET_ADMIN および SYS_MODULE 権限を有効にして、コンテナがネットワークを構成し、カーネル モジュールをロードできるようにします。
  • environment: ユーザー ID (PUID)、グループ ID (PGID)、タイムゾーン (TZ)。システムによっては、これらの環境変数を調整する必要がある場合があります。
  • volumes: WireGuard 構成ディレクトリをホストにマップして、コンテナーが停止または削除された後も構成がホスト上に残るようにします。
  • ports: WireGuard のデフォルト ポートをホストにマップします。ここでは、51820 ポートが WireGuard VPN に使用されます。
  • restart: コンテナの終了時に WireGuard サービスが確実に再起動されるように、コンテナの再起動ポリシーを構成します。
  • networks: 外部ネットワーク wireguard-net は、コンテナが相互に通信できるように定義されます。

WireGuard は、高速、最新、安全な VPN プロトコルであり、そのシンプルさとパフォーマンスの利点により、人気のある選択肢となっています。以下は、Docker Compose を使用して WireGuard をデプロイするための完全かつ詳細な構成ファイルです。

まず、docker-compose.yml というファイルを作成し、そのファイルに次の内容を追加する必要があります。

yamlCopy codeversion: '3'

services:
  wireguard:
    image: linuxserver/wireguard:latest
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000  # 替换为的用户ID
      - PGID=1000  # 替换为的组ID
      - TZ=UTC
    volumes:
      - ./config:/config
    ports:
      - "51820:51820/udp"
    restart: always

networks:
  default:
    external:
      name: wireguard-net

この docker-compose.yml ファイルは、wireguard という名前のサービスを定義します。設定の説明は次のとおりです。

  • image: 使用する WireGuard イメージ。この例では、linuxserver/wireguard:latest が使用されます。必要に応じて他のバージョンを選択できます。
  • container_name: コンテナを参照しやすくするために、コンテナの名前を指定します。
  • cap_add: NET_ADMIN および SYS_MODULE 権限を有効にして、コンテナがネットワークを構成し、カーネル モジュールをロードできるようにします。
  • environment: ユーザー ID (PUID)、グループ ID (PGID)、タイムゾーン (TZ)。システムによっては、これらの環境変数を調整する必要がある場合があります。
  • volumes: WireGuard 構成ディレクトリをホストにマップして、コンテナーが停止または削除された後も構成がホスト上に残るようにします。
  • ports: WireGuard のデフォルト ポートをホストにマップします。ここでは、51820 ポートが WireGuard VPN に使用されます。
  • restart: コンテナの終了時に WireGuard サービスが確実に再起動されるように、コンテナの再起動ポリシーを構成します。
  • networks: 外部ネットワーク wireguard-net は、コンテナが相互に通信できるように定義されます。

次に、WireGuard 構成ファイルを作成し、config ディレクトリにキーを入力する必要があります。 config ディレクトリを作成し、次のように入力します。

mkdir config
cd config

次のコマンドを使用して、WireGuard 構成ファイルとキーを生成します。

docker run -it --rm \
  -v $(pwd):/etc/wireguard \
  linuxserver/wireguard:latest \
  /app/newpeer.sh

プロンプトに従って、公開キー、秘密キー、IPv4 アドレスなどの情報を入力します。これにより、構成ファイル wg0.conf とキー ファイルが生成されます。

最後に、次のコマンドを使用して WireGuard サービスを開始します。

docker-compose up -d

すべてがうまくいけば、WireGuard クライアントを通じて WireGuard サーバーに接続できるはずです。その他の構成オプションとベスト プラクティスについては、使用しているイメージのドキュメントを必ず確認してください。

13. オンラインドキュメント

オンリーオフィス

OnlyOffice は、ドキュメント編集、コラボレーション、統合機能を備えたオープンソースのオフィス スイートです。

version: '3'  
services:  
  onlyoffice:  
    image: onlyoffice/documentserver:latest  
    container_name: onlyoffice-server  
    restart: always  
    ports:  
      - "8080:80"  
      - "8443:443"  
    volumes:  
      - ./onlyoffice/data:/var/www/onlyoffice/Data  
      - ./onlyoffice/config:/var/lib/onlyoffice/config  
    environment:  
      - ALLOW_ANONYMOUS=1  
      - MAX_UPLOAD_SIZE=20M  
      - CERT_PEM=/var/lib/onlyoffice/config/cert.pem  
      - KEY_PEM=/var/lib/onlyoffice/config/key.pem
  • services:: デプロイするサービスのリストを指定します。
  • onlyoffice:: OnlyOffice ドキュメント サーバーのミラーを使用する、onlyoffice という名前のサービスを定義します。
  • image: onlyoffice/documentserver:latest: 使用する OnlyOffice イメージ名とバージョンを指定します (ここでは最新バージョンが使用されます)。
  • container_name: onlyoffice-server: コンテナーの名前を指定します。ここでは「onlyoffice-server」という名前です。
  • restart: always: コンテナが終了後に自動的に再起動するように設定します。
  • ports:: コンテナのポートマッピングを定義します。ここでは、コンテナのポート 80 はホストのポート 8080 にマッピングされ、コンテナのポート 443 はホストのポート 8443 にマッピングされています。
  • volumes:: ローカル ファイル システム上のディレクトリとコンテナ内のパスの間のマウント関係を定義します。ここでは、ローカルの「onlyoffice/data」ディレクトリがコンテナ内の「/var/www/onlyoffice/Data」パスにマウントされ、ローカルの「onlyoffice/config」ディレクトリが「/var/lib/onlyoffice」にマウントされます。コンテナ内のパス。/config」パス。
  • environment:: 環境変数とそれに対応する値を定義します。ここでは、匿名アクセス (ALLOW_ANONYMOUS=1)、最大アップロード サイズ (MAX_UPLOAD_SIZE=20M)、および SSL 証明書とキーへのパス (CERT_PEM および KEY_PEM) を許可するように設定されています。

14. ツールチェーン

14.1 ポーター

Porttainer は、Docker コンテナのデプロイと管理を簡素化するように設計されたオープンソースのコンテナ管理インターフェイスです。

version: '3'

services:
  portainer:
    image: portainer/portainer-ce:latest
    command: --swarm
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    deploy:
      placement:
        constraints:
          - node.role == manager

volumes:
  portainer_data:

portainer: これは、Porttainer の公式 Docker イメージ portainer/portainer-ce:latest を使用したサービス定義です。このサービスは、Docker Swarm 上で実行されるように設計されています。

  • command: --swarm: このオプションは、Porttainer に Swarm モードで実行するよう指示します。
  • ports: - "9000:9000": これにより、コンテナのポート 9000 がホストのポート 9000 にマッピングされます。 Porttainer Web インターフェイスには http://localhost:9000 からアクセスできます。
  • volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data: これらのボリュームは、Docker デーモンの Unix ソケットをコンテナにマップするために使用され、Portainer が Docker デーモンと通信し、ボリューム内の portainer_data という名前のファイルに Porttainer データを永続的に保存できるようにします。
  • deploy: これは Swarm デプロイメントの構成ブロックです。
    • placement: ここでは、Porttainer サービスが Swarm のマネージャー ノード上でのみ実行されることを要求する制約が使用されています。
14.2 織物工場

Weave は、Docker コンテナおよび Kubernetes などのコンテナ オーケストレーション ツール用のシンプルで使いやすいネットワーク ソリューションを提供するコンテナ ネットワーク用のオープン ソース プロジェクトです。

version: '3'
services:
  weave:
    image: weaveworks/weave:latest
    privileged: true
    network_mode: "host"
    environment:
      - WEAVER_DEBUG=1
    command: ["--local", "launch"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

は、Weave の公式 Docker イメージ を使用して、 weave という名前のサービスを定義します。 weaveworks/weave:latest

  • privileged: true: これにより、コンテナーは Weave で必要なシステム権限にアクセスできるようになります。
  • network_mode: "host": これにより、コンテナーがホスト ネットワークの名前空間に配置され、Weave がホスト ネットワークと対話できるようになります。
  • environment: - WEAVER_DEBUG=1: この環境変数は、Weave のデバッグ モードを有効にするために使用されます。
  • command: ["--local", "launch"]: これは、ローカル ノードで Weave を開始するように指示する Weave 開始コマンドのパラメーターです。
  • volumes: - /var/run/docker.sock:/var/run/docker.sock: これにより、コンテナ内の Docker クライアントがホストの Docker デーモンと通信します。
14.3 保管庫

Vault は、アクセス トークン、パスワード、データベース資格情報などの機密情報を安全に管理および保護するための HashiCorp のオープンソース ツールです。 Vault は通常、クラスタの状態と Vault の構成情報を保存する Consul と組み合わせて使用​​されます。

version: '3'
services:
  consul:
    image: consul:latest
    container_name: consul
    command: "agent -dev -client=0.0.0.0"
    ports:
      - "8500:8500"
    networks:
      - vault_network

  vault:
    image: vault:latest
    container_name: vault
    environment:
      - VAULT_DEV_ROOT_TOKEN_ID=myroot
      - VAULT_ADDR=http://127.0.0.1:8200
    ports:
      - "8200:8200"
    networks:
      - vault_network
    depends_on:
      - consul
    cap_add:
      - IPC_LOCK
    entrypoint: ["vault", "server", "-dev-listen-address", "0.0.0.0:8200"]

networks:
  vault_network:
    driver: bridge

この構成ファイルでは、consulvault という 2 つのサービスが定義されています。

領事サービス

  • image: consul:latest: Consul の公式 Docker イメージを使用します。
  • command: "agent -dev -client=0.0.0.0": Consul エージェントを起動し、開発モードを使用し、任意のアドレスからのアクセスを許可します。
  • ports: - "8500:8500": Consul Web UI ポートをホストのポート 8500 にマッピングします。
  • networks: - vault_network: Consul を vault_network という名前のネットワークに参加させます。

ボールトサービス

  • image: vault:latest: Vault の公式 Docker イメージを使用します。
  • environment: - VAULT_DEV_ROOT_TOKEN_ID=myroot - VAULT_ADDR=http://127.0.0.1:8200: 開発モードのルート トークンとアドレスを含む、Vault の環境変数を設定します。
  • ports: - "8200:8200": Vault API ポートをホストのポート 8200 にマッピングします。
  • networks: - vault_network: vault_network という名前のネットワークにボールトを参加させます。
  • depends_on: - consul: Vault を起動する前に、Consul が起動していることを確認してください。
  • cap_add: - IPC_LOCK: Vault に IPC_LOCK 権限の使用を許可します。
  • entrypoint: ["vault", "server", "-dev-listen-address", "0.0.0.0:8200"]: Vault の起動コマンドを設定します。

15. APIゲートウェイとサービスメッシュ

15.1 コング

Kong は、API ゲートウェイを構築および管理するためのオープンソース ツールです。

version: '3'
services:
  kong-database:
    image: postgres:9.6
    container_name: kong-database
    environment:
      POSTGRES_DB: kong
      POSTGRES_USER: kong
      POSTGRES_PASSWORD: kong

  kong:
    image: kong:2.7.0
    container_name: kong
    depends_on:
      - kong-database
    environment:
      KONG_DATABASE: postgres
      KONG_PG_HOST: kong-database
      KONG_PG_USER: kong
      KONG_PG_PASSWORD: kong
      KONG_ADMIN_LISTEN: 0.0.0.0:8001
      KONG_PROXY_LISTEN: 0.0.0.0:8000
  • kong-databaseこのサービスは、PostgreSQL イメージを使用して Kong 構成情報を保存します。
  • kong サービスは Kong の公式 Docker イメージを使用し、kong-database サービスに依存します。
  • kong サービスの環境変数では、Kong が使用するデータベースの種類、データベース接続情報、API ゲートウェイのリスニング アドレスが設定されます。
15.2 そのために

Istio は、マイクロサービス アプリケーションを接続、監視、保護するためのオープンソース サービス メッシュ プラットフォームです。

version: '3'
services:
  istio-control-plane:
    image: docker.io/istio/pilot:1.11.0
    container_name: istio-control-plane
    ports:
      - "15010:15010"
      - "15011:15011"
      - "15012:15012"
      - "8080:8080"
      - "8443:8443"
      - "15014:15014"
    command: ["istiod"]
    environment:
      - PILOT_CERT_PROVIDER=istiod
    volumes:
      - /var/run/secrets/tokens

  istio-ingressgateway:
    image: docker.io/istio/proxyv2:1.11.0
    container_name: istio-ingressgateway
    ports:
      - "15020:15020"
      - "15021:15021"
      - "80:80"
      - "443:443"
      - "15090:15090"
    environment:
      - PILOT_AGENT_ADDR=istio-control-plane:15012
      - PILOT_XDS_ADDR=istio-control-plane:15010
      - GATEWAY_CERT_FILE=/etc/certs/cert-chain.pem
      - GATEWAY_KEY_FILE=/etc/certs/key.pem
      - GATEWAY_SDS_ENABLED=false
      - SERVICE_NAME=istio-ingressgateway
      - DOWNSTREAM_TLS_CONTEXT=default

  istio-sidecar-injector:
    image: docker.io/istio/proxyv2:1.11.0
    container_name: istio-sidecar-injector
    entrypoint: /usr/local/bin/istio-iptables.sh
    ports:
      - "15001:15001"
      - "15006:15006"
    environment:
      - PILOT_AGENT_ADDR=istio-control-plane:15012
      - PILOT_XDS_ADDR=istio-control-plane:15010
      - CA_ADDR=istio-control-plane:15006
      - CA_PROVIDER=Citadel
      - CA_CERT_PATH=/etc/certs/cert-chain.pem
      - CA_KEY_PATH=/etc/certs/key.pem
    volumes:
      - /etc/certs

  bookinfo-app:
    image: docker.io/istio/examples-bookinfo-details-v1:1.11.0
    container_name: bookinfo-app
    ports:
      - "9080:9080"
  • istio-control-planeこのサービスは、Istio コントロール プレーンに Istio Pilot イメージを使用します。
  • istio-ingressgatewayこのサービスは、Istio ProxyV2 イメージを使用して受信トラフィックを処理します。
  • istio-sidecar-injectorこのサービスは、Envoy プロキシをアプリケーション コンテナに挿入するために使用される Istio ProxyV2 イメージも使用します。
  • bookinfo-appこのサービスは、Istio サンプルの Bookinfo アプリケーションを使用して、Istio の機能をデモします。
15.3 左

Linkerd は、サービス メッシュを構築および管理するためのオープンソース ツールです。

version: '3'
services:
  linkerd:
    image: buoyantio/linkerd:stable-2.11.0
    container_name: linkerd
    ports:
      - "4191:4191"
      - "9990:9990"
    command: ["linkerd", "run"]

  linkerd-viz:
    image: buoyantio/linkerd-viz:stable-2.11.0
    container_name: linkerd-viz
    ports:
      - "8084:8084"
      - "8086:8086"
    environment:
      - LINKERD_VIZ_K8S_API_URL=http://linkerd:4191
      - LINKERD_VIZ_PUBLIC_PORT=8084
      - LINKERD_VIZ_RPC_PORT=8086
  • services: これは、実行する必要があるさまざまなサービスを定義する Docker Compose ファイルの主要部分です。
    • linkerd: これは、Linkerd コントロール プレーンおよびデータ プレーン サービスです。 buoyantio/linkerd:stable-2.11.0 ミラーリングを使用し、コントロール プレーン通信にはポート 4191、Linkerd コンソールにはポート 9990 をリッスンします。 command フィールドは、コンテナの起動時に実行するコマンドを指定します。
    • linkerd-viz: Linkerd Viz のサービスで、Linkerd の実行状況を可視化するために使用されます。 buoyantio/linkerd-viz:stable-2.11.0 ミラーを使用して、ビジュアル インターフェイスの場合はポート 8084 で、Linkerd Viz の RPC の場合はポート 8086 でリッスンします。
  • image: サービスで使用する Docker イメージを指定します。
  • container_name: サービスコンテナの名前を指定します。
  • ports: コンテナとホスト間のポート マッピング関係を定義します。
  • command: コンテナーの起動時に実行するコマンドを指定します。ここでは、Linkerd の linkerd run コマンドを使用します。
  • environment: 環境変数の設定に使用されます。これは、Linkerd コントロール プレーンのアドレスやポートなど、Linkerd Viz 関連の環境変数を構成するために使用されます。
15.4 交通

Traefik は、リバース プロキシとロード バランシングのためのオープン ソース ツールで、コンテナ化されたアプリケーションへの外部アクセスを提供するためによく使用されます。

version: '3'
services:
  traefik:
    image: traefik:v2.5
    container_name: traefik
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  • traefikこのサービスは、Traefik リバース プロキシを実行するために Traefik の公式 Docker イメージを使用します。
  • command フィールドは Traefik の起動パラメータを指定します。 --api.insecure=true は Traefik の API を有効にし、 --providers.docker=true は Docker を Traefik のバックエンド サービス プロバイダとして有効にします。
  • portsコンテナとホストの間のポート マッピング関係が定義されます。これには、ホストのポート 80 からコンテナのポート 80 へのマッピング、およびホストのポート 8080 からコンテナのポート 8080 へのマッピングが含まれます。
  • volumesホストの Docker ソケットをコンテナーにマップして、Traefik が Docker イベントをリッスンして構成を動的に更新できるようにします。

16. テストツール

16.1 Jメーター

JMeter (Apache JMeter) は、パフォーマンス テストと負荷テスト用のオープン ソース ツールです。

version: '3'
services:
  jmeter:
    image: justb4/jmeter:latest
    container_name: jmeter
    volumes:
      - ./jmeter:/jmeter
    command: -n -t /jmeter/test.jmx -l /jmeter/results.jtl

は、JMeter の公式 Docker イメージ を使用して、 jmeter という名前のサービスを定義します。 justb4/jmeter:latest

  • volumes: - ./jmeter:/jmeter: これにより、現在のディレクトリの jmeter ディレクトリがコンテナにマウントされ、JMeter テスト計画ファイルとテスト結果ファイルが保存されます。
  • command: -n -t /jmeter/test.jmx -l /jmeter/results.jtl: これは JMeter 起動コマンドのパラメータです。 -n は非 GUI モードを示し、 -t はテスト計画ファイルを指定します。 -l 結果ファイルを指定します。

./jmeter ディレクトリに test.jmx という名前の JMeter テスト計画ファイルを作成します。このファイルは、JMeter GUI を使用して作成することも、テキスト エディタを使用して直接記述することもできます。

16.2 イナゴ

Locust は、Python スクリプトを使用してユーザーの動作とテスト ロジックを定義する負荷テストを実行するためのオープン ソース ツールです。

version: '3'
services:
  locust:
    image: locustio/locust:latest
    container_name: locust
    command: -f /locust/locustfile.py --host http://target-service
    ports:
      - "8089:8089"
    volumes:
      - ./locust:/locust

は、Locust の公式 Docker イメージ を使用して、 locust という名前のサービスを定義します。 locustio/locust:latest

  • command: -f /locust/locustfile.py --host http://target-service: これは Locust 起動コマンドのパラメータです。 -f は Locust ファイルを指定し、 --host はテストするターゲット サービスのアドレスを指定します。 。
  • ports: - "8089:8089": Locust Web インターフェイスをホストのポート 8089 に公開します。
  • volumes: - ./locust:/locust: 現在のディレクトリの locust ディレクトリをコンテナにマウントして、Locust スクリプト ファイルを保存します。

./locust ディレクトリに locustfile.py という名前の Locust スクリプト ファイルを作成します。このファイルは、ユーザーの動作とテスト ロジックを定義します。

from locust import HttpUser, task, between

class MyUser(HttpUser):
    wait_time = between(1, 3)

    @task
    def my_task(self):
        self.client.get("/")

17. リバースプロキシおよびロードバランシングサービス

17.1 Nginx

Nginx は、高性能のオープンソース Web サーバーおよびリバース プロキシ サーバーです。

version: '3'
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/html:/usr/share/nginx/html

は、Nginx の公式 Docker イメージ を使用して、 nginx という名前のサービスを定義します。 nginx:latest

  • ports: - "80:80": ホストのポート 80 をコンテナのポート 80 にマップして、ホストのポート 80 を介して Nginx にアクセスできるようにします。
  • volumes: - ./nginx/conf:/etc/nginx/conf.d - ./nginx/html:/usr/share/nginx/html: これら 2 つのボリュームは、ホストの nginx/conf ディレクトリと nginx/html ディレクトリをコンテナ内の対応するディレクトリにそれぞれマウントします。これにより、カスタム構成とカスタム静的コンテンツの提供が可能になります。

./nginx/conf ディレクトリに default.conf という名前の Nginx 構成ファイルを作成します。

server {
    listen 80;
    server_name localhost;

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

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

この構成ファイルは、単純な Nginx サーバーを定義し、ホストのポート 80 をリッスンし、リクエストを /usr/share/nginx/html ディレクトリにマッピングし、エラー ページの処理を定義します。

./nginx/html ディレクトリに index.html という名前の静的 HTML ファイルを作成します。必要に応じてHTMLコンテンツを記述できます。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Welcome to My Nginx Server</title>
    <style>
        body {
            font-family: 'Arial', sans-serif;
            text-align: center;
            margin: 100px;
        }

        h1 {
            color: #333;
        }

        p {
            color: #666;
        }
    </style>
</head>
<body>
    <h1>Welcome to My Nginx Server</h1>
    <p>This is a simple HTML page served by Nginx.</p>
</body>
</html>
17.2 HAプロキシ

HAProxy (高可用性プロキシ) は、人気のあるオープン ソースのロード バランサーおよびリバース プロキシ サーバーです。

version: '3'
services:
  haproxy:
    image: haproxy:latest
    container_name: haproxy
    ports:
      - "80:80"
    volumes:
      - ./haproxy:/usr/local/etc/haproxy
    networks:
      - webnet
    depends_on:
      - web1
      - web2

  web1:
    image: httpd:latest
    container_name: web1
    networks:
      - webnet

  web2:
    image: nginx:latest
    container_name: web2
    networks:
      - webnet

networks:
  webnet:
  • image: haproxy:latest: HAProxy 公式 Docker イメージを使用します。
  • container_name: haproxy: コンテナ名を haproxy に設定します。
  • ports: - "80:80": ホストのポート 80 をコンテナのポート 80 にマップし、ホストのポート 80 を介して HAProxy にアクセスできるようにします。
  • volumes: - ./haproxy:/usr/local/etc/haproxy: ホストの haproxy ディレクトリをコンテナ内の /usr/local/etc/haproxy ディレクトリにマウントして、HAProxy 構成ファイルを保存します。
  • networks: - webnet: コンテナを webnet という名前のカスタム ネットワークに接続します。
  • depends_on: - web1 - web2: haproxy サービスが web1 サービスと web2 サービスに依存していることを示します。 サービスを必ず開始してください。 a>haproxy これら 2 つのサービスを事前に開始します。

web1 サービスと web2 サービス:

  • image: httpd:latest および image: nginx:latest: それぞれ、Apache HTTP Server と Nginx 公式 Docker イメージを使用します。
  • container_name: web1container_name: web2: 设置容器的名称为 web1web2
  • networks: - webnet: これら 2 つのサービスを webnet という名前のカスタム ネットワークに接続します。
  • webnet という名前のカスタム ネットワークを定義して、haproxyweb1web2 サービス。

./haproxy ディレクトリに haproxy.cfg という名前の HAProxy 構成ファイルを作成します。

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend web
    bind *:80
    mode http
    default_backend app_servers

backend app_servers
    mode http
    balance roundrobin
    option httpchk HEAD / HTTP/1.1\r\nHost:localhost
    server web1 web1:80 check
    server web2 web2:80 check

構成ファイルは、ホストのポート 80 でリッスンし、2 つのバックエンド サーバー (web1web2) にトラフィックを分散する単純な HAProxy 構成を定義します。

おすすめ

転載: blog.csdn.net/LSW1737554365/article/details/134737384