Docker Compose: 基礎者のガイド

こんにちは、未来のDockerの達人さんたち!Docker Composeの世界への旅にあなたのガイドとして参加できることを嬉しく思います。コンピュータサイエンスを_years_教えてきた者として、コンテナ化の概念に苦戦する生徒を多く見てきました。しかし、心配しないでください!このチュートリアルの終わりまでに、あなたはプロのようにコンテナをオーケストレートできるようになります。

Docker - Compose

Docker Composeとは?

まず、基本から始めましょう。大きなパーティを計画していると想像してみてください(誰だっていいアナロジーが好きですよね?)。食事、飲み物、音楽、装飾を調整する必要があります。Docker Composeは、コンテナに対するそのパーティ計画ツールです!

技術的な言葉で言えば、Docker Composeは複数のコンテナDockerアプリケーションを定義して実行するためのツールです。YAMLファイルを使用してアプリケーションのサービス、ネットワーク、ボリュームを設定し、一度の命令ですべてのサービスを構成して開始することができます。

Docker Compose - インストール

まず、Docker Composeをシステムにインストールしましょう。このプロセスは簡単です。

WindowsとMacユーザー向け

Docker Desktopをすでにインストールしている場合、おめでとうございます!Docker Composeも一緒にインストールされています。次のセクションに進んで、幸せなダンスをしましょう。

Linuxユーザー向け

私たちのLinuxの友達は、Docker Composeを別途インストールする必要があります。以下の手順に従ってください:

  1. Docker Composeの現在の安定版をダウンロードします:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. バイナリに実行可能な権限を適用します:
sudo chmod +x /usr/local/bin/docker-compose
  1. インストールを確認します:
docker-compose --version

バージョン番号が表示されれば、OKです!

最初のDocker-Composeファイルを作成する

Docker Composeをインストールしたので、初めてのdocker-compose.ymlファイルを作成しましょう。このファイルは、アプリケーションのレシピのようなものです。Dockerに必要な材料(サービス)とその準備方法を伝えます。

Python FlaskとRedisを使用して簡単なウェブアプリケーションを作成しましょう。これらの技術に慣れていない場合でも、簡単に進めます!

プロジェクト用の新しいディレクトリを作成し、その中に移動します:

mkdir my_first_compose_project
cd my_first_compose_project

今、私たちのdocker-compose.ymlファイルを作成しましょう:

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"

これを分解すると:

  • version: '3': 使用するDocker Composeファイルフォーマットのバージョンを指定します。
  • services: 実行したいコンテナを定義するセクションです。
  • web: これは私たちのFlaskアプリケーションサービスです。
  • build: .: 現在のディレクトリ内のDockerfileを使用してイメージをビルドします。
  • ports: - "5000:5000": ホストのポート5000をコンテナ内のポート5000にマッピングします。
  • redis: これは私たちのRedisサービスです。
  • image: "redis:alpine": Docker Hubからの公式Redisイメージを使用します。

Flaskアプリケーションを作成する

今、簡単なFlaskアプリケーションを作成しましょう。app.pyという名前のファイルを作成します:

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
redis.incr('hits')
return f'Hello World! I have been seen {redis.get("hits").decode("utf-8")} times.'

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

このシンプルなアプリは、ページが訪問されるたびにRedisのカウンターをインクリメントします。

Dockerfileを作成する

次に、FlaskアプリケーションをビルドするためのDockerfileを作成します。Dockerfileという名前のファイルを作成します:

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

このDockerfileは以下のことを行います:

  1. Python 3.7 Alpineイメージから始めます。
  2. 作業ディレクトリを/codeに設定します。
  3. Flaskの環境変数を設定します。
  4. 必要な依存関係をインストールします。
  5. Pythonの依存関係をコピーしてインストールします。
  6. ポート5000をエクスポートします。
  7. 現在のディレクトリをコンテナにコピーします。
  8. Flaskを実行するコマンドを設定します。

必要ファイルを作成する

最後に、Pythonの依存関係を指定する必要があります。requirements.txtという名前のファイルを作成します:

flask
redis

Docker Composeアプリケーションを実行する

今、アプリケーションを実行する_exciting_部分です。ターミナルで以下を実行します:

docker-compose up

Docker Composeがイメージをビルドし、サービスを開始するのを見ます。終了したら、ブラウザを開き、http://localhost:5000にアクセスします。あなたの「Hello World」メッセージが表示され、ページをリフレッシュするたびにカウンターがインクリメントされるはずです。

Docker Composeコマンド

以下は、Docker Composeのコマンドの簡単な表です:

コマンド 説明
docker-compose up コンテナを作成して開始します
docker-compose down コンテナを停止し、ネットワーク、イメージ、ボリュームを削除します
docker-compose ps コンテナを一覧表示します
docker-compose logs コンテナからの出力を表示します
docker-compose build サービスをビルドまたは再ビルドします
docker-compose start サービスを開始します
docker-compose stop サービスを停止します

結論

おめでとうございます!あなたは刚刚Docker Composeを使用して初めてのマルチコンテナアプリケーションを作成し、実行しました。Docker Composeの能力の一部しか触れていませんが、私はこのチュートリアルがあなたにしっかりした基礎を提供することを願っています。

Dockerとコンテナ化の学習は料理を学ぶのと似ています。練習が必要ですが、一度慣れると、複雑なマルチコンテナのレシピをすぐに作れるようになります!

未来のDockerシェフたち、お楽しみに!

Credits: Image by storyset