Docker - コンテナとホスト
こんにちは、技術熱心な皆さん!Dockerの旅に一緒に参加することを楽しみにしています。多年間の経験を持つバーチャルな先生として、コンテナとホストの興味深い世界を案内します。プログラミングが初めてであっても心配しないでください。基本から始めて、少しずつ進んでいきましょう。さあ、始めましょう!
Docker イメージ
旅の準備をするとき、必要なもののリストを作成すると思いますよね?Docker イメージもまさにその通りです。コンテナが動作するために必要なすべてのものの青写真です。アプリケーションのコード、ランタイム、ライブラリ、システムツールを含むレシピのようなものです。
最初の Docker イメージを作成する
「Hello, World!」アプリ用の簡単な Docker イメージを作成してみましょう:
# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . /app
CMD ["python", "hello.py"]
これを分解してみましょう:
-
FROM python:3.9-slim
:これは「最小限の Python 3.9 環境で始めたい」と言うことです。 -
WORKDIR /app
:プロジェクト用の新しいフォルダを作成するようなものです。 -
COPY . /app
:ローカルのファイルをコンテナにコピーします。 -
CMD ["python", "hello.py"]
:コンテナを起動するときに実行されるコマンドです。
このイメージをビルドするには以下のコマンドを実行します:
docker build -t my-hello-world .
コンテナを実行する
イメージができたら、それを動かしてみましょう!コンテナを実行するのは、アプリケーションが事前にインストールされた仮想コンピュータを起動することのようなものです。
基本的なコンテナの実行
docker run my-hello-world
このコマンドは、my-hello-world
イメージに基づいてコンテナを起動し、hello.py
スクリプトを実行します。
インタラクティブモード
時々、コンテナと対話的にやり取りしたいときがあります。コンテナ内でターミナルを直接開くようなものです:
docker run -it my-hello-world /bin/bash
-it
フラグはコンテナをインタラクティブにし、/bin/bash
は bash シェルを起動します。
すべてのコンテナを一覧表示する
Docker を使うと、複数のコンテナを作成します。それらを管理することが重要です。これをコンピュータ上で現在動作しているアプリケーションを確認するようなものと考えます。
docker ps
このコマンドはすべての動作中のコンテナを表示します。停止したコンテナも含めてすべて表示するには:
docker ps -a
以下は docker ps
のオプションの表です:
オプション | 説明 |
---|---|
-a, --all | すべてのコンテナを表示(デフォルトでは動作中のもののみ表示) |
-q, --quiet | コンテナ ID のみを表示 |
-s, --size | 合計ファイルサイズを表示 |
--format | Go テンプレートを使用してコンテナを美しく表示 |
コンテナを停止する
コンピュータ上のアプリケーションを閉じるように、Docker コンテナも終了させることができます。
グレースフルストップ
docker stop <container_id>
これは SIGTERM サインを送信し、コンテナがグレースフルにシャットダウンできるようにします。
強制停止
docker kill <container_id>
これはアプリケーションを強制終了するようなものです。docker stop
が動作しないときに使用します。
コンテナを削除する
コンテナを停止した後、完全に削除したい場合があります:
docker rm <container_id>
プロ tip:停止と削除を一つのコマンドで行うこともできます:
docker rm -f <container_id>
結論
おめでとうございます!Docker コンテナとホストの世界への第一歩を踏み出しました。Docker を使うのは、小さな専門的なコンピュータの群を管理することのようなものです。各コンテナは自己完結した環境で、どのシステムでも一貫してアプリケーションを実行できます。
最後に、面白いアナロジーを:Docker コンテナはフードトラックのようです。各トラック(コンテナ)には、その特産品(アプリケーション)を作成し提供するために必要なすべてのものがあります。これらのトラックを簡単に移動させ、起動したり、片付けたりできます。
次のレッスンでは、Docker ネットワーキングとデータの持続性について深く掘り下げます。それまでに、快適にコンテナ化を楽しんでください!
Credits: Image by storyset