Docker - コンテナとホスト

こんにちは、技術熱心な皆さん!Dockerの旅に一緒に参加することを楽しみにしています。多年間の経験を持つバーチャルな先生として、コンテナとホストの興味深い世界を案内します。プログラミングが初めてであっても心配しないでください。基本から始めて、少しずつ進んでいきましょう。さあ、始めましょう!

Docker - Container & Hosts

Docker イメージ

旅の準備をするとき、必要なもののリストを作成すると思いますよね?Docker イメージもまさにその通りです。コンテナが動作するために必要なすべてのものの青写真です。アプリケーションのコード、ランタイム、ライブラリ、システムツールを含むレシピのようなものです。

最初の Docker イメージを作成する

「Hello, World!」アプリ用の簡単な Docker イメージを作成してみましょう:

# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . /app
CMD ["python", "hello.py"]

これを分解してみましょう:

  1. FROM python:3.9-slim:これは「最小限の Python 3.9 環境で始めたい」と言うことです。
  2. WORKDIR /app:プロジェクト用の新しいフォルダを作成するようなものです。
  3. COPY . /app:ローカルのファイルをコンテナにコピーします。
  4. 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