記事ディレクトリ
-
- 1. Web サーバーとアプリケーション サーバー
- 2. データベース
- 3. メッセージキューとイベント駆動型システム
- 4. キャッシュとメモリ内データ ストレージ
- 5. 分散ファイルシステム
- 6. 検索およびインデックス作成サービス
- 7. サービスの検出
- 8. ログの収集と分析
- 9. 監視システムおよび警報サービス
- 10. CI/CD ツール
- 11. コードウェアハウスおよびバージョン管理サービス
- 12. VPNおよびリモートアクセスサービス
- 13. オンラインドキュメント
- 14. ツールチェーン
- 15. APIゲートウェイとサービスメッシュ
- 16. テストツール
- 17. リバースプロキシおよびロードバランシングサービス
docker-compose を使用してほとんどのアプリケーションでデプロイされたファイルを収集しました。ぜひチェックしてください。
docker-compose を簡単にしましょう!
必要なものはすべて揃っています (すべてが主流であり、必ずしもニッチなものではありません)。何も持っていない場合は、コメント欄にメッセージを残してください。
不足がある場合は修正してください、ありがとう!
docker-compose を使用してサービスを実行する手順は次のとおりです。
docker-compose.yml
という名前のファイルを作成し、その中にサービスを定義します。例:
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
docker-compose.yml
ファイルを含むディレクトリで次のコマンドを実行して、サービスを開始します。
docker-compose up -d
これにより、サービスがバックグラウンド モードで開始されます。すべてが正常であれば、次のような出力が表示されます。
[+] Running 1/1
✔ Container nginx Started 0.3s
- サービスを停止するには、
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 つのサービス、zookeeper
と kafka
を定義します。 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-container
Redisコンテナの名前を指定します。ports: - "6379:6379"
コンテナの 6379 ポートをホストの 6379 ポートにマッピングします。volumes: - ./redis-data:/data
データの永続性を実現するには、Redis データ ディレクトリをホストにマップします。command: redis-server --appendonly yes
Redisコンテナ起動時にコマンドを設定し、永続化を有効にします。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-1
、glusterfs-server-2
、glusterfs-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
は、mon
、mgr
、osd
の 3 つのサービスを定義します。これらのサービスは、それぞれ Ceph の Monitor、Manager、および Object Storage Daemon を表します。
この構成では、Ceph が公式に提供する Docker イメージを使用し、対応する環境変数を設定します。 192.168.1.100
と your_public_network
を、監視ノードの IP アドレスとパブリック ネットワーク情報に置き換えてください。
- 月:
- 監視ノードを表すためにミラーを使用します。
ceph/daemon
- Set
MON_IP
は、監視ノードの IP アドレスです。 volumes
監視ノードのデータをホストの/var/lib/ceph/mon/ceph-mon
ディレクトリに保存します。
- 監視ノードを表すためにミラーを使用します。
- マネージャー:
- Manager ノードを表すためにミラーを使用します。
ceph/daemon
- Set
MON_IP
は、監視ノードの IP アドレスです。
- Manager ノードを表すためにミラーを使用します。
- OSD:
- オブジェクト ストレージ デーモン ノードを表すためにミラーを使用します。
ceph/daemon
OSD_DEVICE
ストレージとして使用するデバイスを に設定volumes
OSD ノードのデータをホストの/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 ポートにマッピングされます。environment
Logstash の 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_USERNAME
、MONGO_INITDB_ROOT_PASSWORD
、MONGO_INITDB_DATABASE
がそれぞれ設定されますMongoDB 管理者のユーザー名、パスワード、データベース名。elasticsearch
サービスでは、discovery.type
がsingle-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_interval
Prometheus がメトリクスをクロールする間隔は 15 秒に指定されています。scrape_configs
セクションではクロール構成を定義します。この例では、Prometheus 自体のメトリクスのみが監視されます。必要に応じて、job
とtargets
をさらに追加できます。
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_ID
とDRONE_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
ツールを使用して証明書を生成できます。具体的な手順は次のとおりです。
-
openvpn-data
ディレクトリを作成して入力します。cd openvpn-data
-
次のコマンドを実行して証明書を初期化します。
docker run -v $PWD:/etc/openvpn --rm kylemanna/openvpn:2.6.1 ovpn_genconfig -u udp://your_server_ip
your_server_ip
をサーバーのパブリック IP アドレスに置き換えます。 -
次のコマンドを実行して、初期証明書とキーを生成します。
docker run -v $PWD:/etc/openvpn --rm -it kylemanna/openvpn:2.6.1 ovpn_initpki
-
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
この構成ファイルでは、consul
と vault
という 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: web1
和container_name: web2
: 设置容器的名称为web1
和web2
。networks: - webnet
: これら 2 つのサービスをwebnet
という名前のカスタム ネットワークに接続します。webnet
という名前のカスタム ネットワークを定義して、haproxy
、web1
、web2
サービス。
./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 つのバックエンド サーバー (web1
と web2
) にトラフィックを分散する単純な HAProxy 構成を定義します。