Docker Compose: Makefile を使用して作業を簡素化する

ソフトウェア開発業界は数年ごとにパラダイムシフトを経験します。 これらの現象の XNUMX つは、マイクロサービスの概念に対する関心の高まりとして認識できます。 マイクロサービスは最新のテクノロジーではありませんが、文字通りその人気が急上昇したのはつい最近のことです。

大規模なモノリシック サービスは現在、独立した自律的なマイクロサービスに置き換えられています。 マイクロサービスは、単一の非常に特殊な目的を果たすアプリケーションと考えることができます。 たとえば、リレーショナル DBMS、Express アプリケーション、Solr サービスなどです。

Docker Compose: Makefile を使用して作業を簡素化する

最近では、マイクロサービスを使用せずに新しいソフトウェア システムを開発することは考えにくいです。 そしてこの状況は、今度は Docker プラットフォームにつながります。

デッカー

プラットフォーム デッカーは、マイクロサービスの開発と展開において、ほぼ業界標準になっています。 プロジェクトの Web サイトでは、組織があらゆるアプリケーションを簡単に作成し、ハイブリッド クラウドからエッジ システムに至るまで、あらゆる環境で配布して実行できるようにする唯一の独立したコンテナ化プラットフォームが Docker であることがわかります。

ドッカーの作成

Технология ドッカーの作成 マルチコンテナアプリケーションを構成するために設計されています。 Docker Compose プロジェクトには、プロジェクトの作成者が必要とする数の Docker コンテナを含めることができます。

Docker Compose を使用する場合、YAML ファイルを使用してアプリケーション サービスを構成し、相互のやり取りを整理します。 したがって、Docker Compose は、複数コンテナーの Docker アプリケーションを記述および実行するためのツールです。

Docker Compose: Makefile を使用して作業を簡素化する
ホスト システム上で実行される XNUMX つのコンテナ

GNUメイク

プログラム make, 本質的には、ソース コードからのプログラムとライブラリの構築を自動化するためのツールです。 一般的に言えることは、 make 任意のコマンドを実行して、入力マテリアルを何らかの出力形式、または何らかの目標に変換するプロセスに適用されます。 私たちの場合、コマンドは docker-compose 抽象的な目標に変換されます (電話ターゲット).

番組に伝えるには make 何が欲しいかについては、ファイルが必要です Makefile.

Внашем Makefile 通常のコマンドが含まれます docker и docker-compose、多くの問題を解決するように設計されています。 つまり、コンテナーの組み立て、コンテナーの開始、停止、再起動、コンテナーへのユーザー ログインの整理、コンテナー ログの操作、および他の同様の問題の解決について話しています。

Docker Compose の一般的な使用例

次のコンポーネントを持つ通常の Web アプリケーションを想像してみましょう。

  • TimescaleDB データベース (Postgres)。
  • Express.js アプリケーション。
  • Ping (単なるコンテナであり、特別なことは何も行いません)。

このアプリケーションには 3 つの Docker コンテナと XNUMX つのファイルが必要です docker-composeには、これらのコンテナを管理するための手順が含まれています。 各コンテナには異なるタッチポイントがあります。 たとえば、コンテナの場合 timescale データベースを扱うのとほぼ同じ方法で作業できるようになります。 つまり、次のアクションを実行できるようになります。

  • Postgres シェルにログインします。
  • テーブルのインポートとエクスポート。
  • 創造 pg_dump テーブルまたはデータベース。

Express.jsアプリケーションコンテナ、 expressjs、次の機能がある場合があります。

  • システム ログから新しいデータを提供します。
  • 特定のコマンドを実行するには、シェルにログインします。

コンテナとの対話

Docker Compose を使用してコンテナ間の通信を設定したら、それらのコンテナと通信します。 Docker Compose システム内には次のコマンドがあります。 docker-compose、サポートオプション -f、ファイルをシステムに転送できるようになります。 docker-compose.yml.

このオプションの機能を使用すると、システムとの対話をファイル内で言及されているコンテナーのみに制限できます。 docker-compose.yml.

コマンドを使用した場合のコンテナーとの対話がどのようなものかを見てみましょう。 docker-compose。 シェルにログインする必要があると仮定すると、 psqlの場合、対応するコマンドは次のようになります。

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

実行に使用されない同じコマンド docker-composedocker、次のようになります。

docker exec -it  edp_timescale_1 psql -Upostgres

このような場合には、常に次のコマンドを使用することが望ましいことに注意してください。 docker、およびコマンド docker-composeこれにより、コンテナー名を覚えておく必要がなくなります。

上記のコマンドはどちらもそれほど難しくありません。 しかし、フォームで「ラッパー」を使用すると、 Makefileこれにより、単純なコマンドの形式でインターフェイスが提供され、それ自体が同様の長いコマンドを呼び出すことになります。その場合、次のように同じ結果が得られます。

make db-shell

使用することは明らかです Makefile コンテナの操作がはるかに簡単になります。

実例

上記のプロジェクト図を元に、以下のファイルを作成します。 docker-compose.yml:

version: '3.3'
services:
    api:
        build: .
        image: mywebimage:0.0.1
        ports:
            - 8080:8080
        volumes:
            - /app/node_modules/
        depends_on:
            - timescale
        command: npm run dev
        networks:
            - webappnetwork
    timescale:
        image: timescale/timescaledb-postgis:latest-pg11
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
        volumes:
          - ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
        networks:
           - webappnetwork
    ping:
       image: willfarrell/ping
       environment:
           HOSTNAME: "localhost"
           TIMEOUT: 300
networks:
   webappnetwork:
       driver: bridge

Docker Compose 構成を管理し、それに記述されているコンテナーと対話するために、次のファイルを作成します。 Makefile:

THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
        make -pRrq  -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
        docker-compose -f docker-compose.yml build $(c)
up:
        docker-compose -f docker-compose.yml up -d $(c)
start:
        docker-compose -f docker-compose.yml start $(c)
down:
        docker-compose -f docker-compose.yml down $(c)
destroy:
        docker-compose -f docker-compose.yml down -v $(c)
stop:
        docker-compose -f docker-compose.yml stop $(c)
restart:
        docker-compose -f docker-compose.yml stop $(c)
        docker-compose -f docker-compose.yml up -d $(c)
logs:
        docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
        docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
        docker-compose -f docker-compose.yml ps
login-timescale:
        docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
        docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
        docker-compose -f docker-compose.yml exec timescale psql -Upostgres

ここで説明するコマンドのほとんどはすべてのコンテナに適用されますが、オプションを使用します。 c= コマンドのスコープを XNUMX つのコンテナーに制限できます。

後に Makefile 準備ができたら、次のように使用できます。

  • make help — 利用可能なすべてのコマンドのリストを発行します。 make.

Docker Compose: Makefile を使用して作業を簡素化する
使用可能なコマンドに関するヘルプ

  • make build - 画像を組み立てる Dockerfile。 この例では既存の画像を使用しました timescale и ping。 でもイメージは api 現地で集めたいと思っています。 これはまさにこのコマンドの実行後に行われることです。

Docker Compose: Makefile を使用して作業を簡素化する
Dockerコンテナの構築

  • make start — すべてのコンテナを起動します。 コンテナを XNUMX つだけ起動するには、次のようなコマンドを使用できます。 make start c=timescale.

Docker Compose: Makefile を使用して作業を簡素化する
タイムスケールコンテナの実行

Docker Compose: Makefile を使用して作業を簡素化する
pingコンテナの実行

  • make login-timescale — コンテナの bash セッションにログインします。 timescale.

Docker Compose: Makefile を使用して作業を簡素化する
タイムスケールコンテナでbashを実行する

  • make db-shell - への入り口 psql コンテナ内 timescale データベースに対して SQL クエリを実行します。

Docker Compose: Makefile を使用して作業を簡素化する
timescaledb コンテナーで psql を実行する

  • make stop — コンテナを停止します。

Docker Compose: Makefile を使用して作業を簡素化する
タイムスケールコンテナの停止

  • make down — コンテナの停止と削除。 特定のコンテナを削除するには、このコマンドを使用して目的のコンテナを指定します。 例えば ​​- make down c=timescale または make down c=api.

Docker Compose: Makefile を使用して作業を簡素化する
すべてのコンテナの停止と削除

結果

Docker Compose にはコンテナーを管理するための豊富なコマンド セットが用意されていますが、場合によってはこれらのコマンドが長くなり、覚えるのが難しくなることがあります。

使用方法 Makefile ファイルからコンテナとの迅速かつ簡単な対話を確立するのに役立ちました docker-compose.yml。 つまり、次のようなことについて話しています。

  • 開発者は、で説明されているプロジェクト コンテナのみを操作します。 docker-compose.yml、作業は他の実行中のコンテナーによって干渉されません。
  • 特定のコマンドを忘れた場合、コマンドを実行できます make help 利用可能なコマンドに関するヘルプを表示します。
  • 最新のログ エントリの取得やシステムへのログインなどのアクションを実行するために、引数の長いリストを覚えておく必要はありません。 たとえば、次のようなコマンド docker-compose -f docker-compose.yml exec timescale psql -Upostgres 変身 make db-shell.
  • ファイル Makefile プロジェクトの成長に合わせて柔軟に対応できます。 たとえば、データベースのバックアップを作成したり、その他のアクションを実行したりするコマンドを簡単に追加できます。
  • 大規模な開発者チームが同じものを使用している場合 Makefile、これによりコラボレーションが効率化され、エラーが減少します。

PS Внашем 市場 画像があります デッカー、ワンクリックでインストールできます。 コンテナの動作は次の場所で確認できます。 VPS。 すべての新規顧客には 3 日間の無料テストが与えられます。

親愛なる読者! Docker Compose をどのように自動化しますか?

Docker Compose: Makefile を使用して作業を簡素化する

出所: habr.com

コメントを追加します