Traffine I/O

日本語

2022-06-05

Dockerのイメージとコンテナ

Dockerのコンテナとイメージとは

Dockerのイメージは、Dockerコンテナの構築ブロックです。イメージは軽量でスタンドアロンな実行可能パッケージであり、コード、ランタイム、システムツール、ライブラリ、設定を含む、ソフトウェアの実行に必要な全てが含まれています。Dockerコンテナは、Dockerイメージのランタイムインスタンスであり、アプリケーションが実行される隔離された一貫した環境を提供します。

Dockerイメージとコンテナには、次のようないくつかの利点があります。

  • ポータビリティ
    アプリケーションは、さまざまなプラットフォーム上で一貫して実行され、スムーズな展開プロセスを確保します。

  • リソース効率
    コンテナは軽量で、ホストシステムのリソースを共有するため、インフラストラクチャコストが削減されます。

  • スケーラビリティ
    アプリケーションは、需要に応じて迅速にスケールアップまたはスケールダウンできます。

  • バージョン管理
    イメージはバージョン管理され、必要に応じて以前のバージョンにロールバックできます。

  • コラボレーション
    チームは、Docker Hubのようなレジストリを使用してDockerイメージを共有し、共同作業できます。

主要な用語

  • Dockerfile
    Dockerイメージを作成するための命令を含むスクリプト

  • Dockerイメージ
    コード、ランタイム、システムツール、ライブラリ、設定を含む、軽量でスタンドアロンな実行可能パッケージ

  • Dockerコンテナ
    Dockerイメージのランタイムインスタンスであり、アプリケーションが実行される隔離された環境を提供

  • Dockerレジストリ
    Dockerイメージを共有および配布するための中央サービス

  • Docker Hub
    Docker Incが維持するデフォルトのパブリックレジストリ

  • データボリューム
    Dockerコンテナによって生成され、使用されるデータを永続化するための仕組み

Dockerイメージ

DockerイメージはDockerコンテナの基盤となります。この章では、Dockerイメージの作成、管理、およびDockerイメージレジストリでの作業について掘り下げます。

Dockerイメージの作成

Dockerイメージを作成するには、Dockerfileを定義し、Dockerコマンドを使用してイメージをビルドする必要があります。

Dockerfile

Dockerfileは、Dockerイメージを構築するための命令を含むスクリプトです。ベースイメージで始まり、環境を構成するためのさまざまなコマンド、依存関係のインストール、およびアプリケーションファイルのコピーが続きます。以下は、単純なDockerfileの例です。

Dockerfile
# 公式のPythonベースイメージを使用
FROM python:3.8

# ワーキングディレクトリを設定
WORKDIR /app

# 要件ファイルをコピーし、依存関係をインストールする
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションコードをコピー
COPY . .

# アプリケーションポートを公開
EXPOSE 8080

# アプリケーションを実行
CMD ["python", "app.py"]

Dockerイメージのビルド

Dockerfileを作成したら、同じディレクトリ内で以下のコマンドを実行してDockerイメージをビルドできます。

bash
$ docker build -t my_app:1.0 .

このコマンドにより、my_appという名前のDockerイメージが1.0のタグで作成されます。

Dockerイメージの管理

Dockerイメージをビルドした後は、それらを管理する必要があります。一般的なタスクには、イメージのリスト表示、削除、およびタグ付けがあります。

イメージのリスト表示

システム上で利用可能な全てのDockerイメージをリスト表示するには、次のコマンドを実行します。

bash
$ docker images

イメージの削除

Dockerイメージを削除するには、次のコマンドを使用します。

bash
$ docker rmi <IMAGE_ID>

<IMAGE_ID>を削除するイメージの実際のIDに置き換えてください。

Dockerイメージレジストリ

Dockerイメージレジストリは、Dockerイメージを共有および配布するための中央サービスです。パブリックおよびプライベートレジストリがあります。

Docker Hub

Docker Hubは、Docker Incが維持するデフォルトのパブリックレジストリです。Docker Hubを使用して既存のイメージを検索し、自分自身のイメージを保存し、他の開発者と共同作業することができます。Docker Hubにイメージをプッシュするには、まずログインする必要があります。

bash
$ docker login

次に、イメージをDocker Hubのユーザー名と希望するリポジトリ名でタグ付けします。

bash
$ docker tag my_app:1.0 <USERNAME>/my_app:1.0

最後に、イメージをDocker Hubにプッシュします。

bash
$ docker push <USERNAME>/my_app:1.0

プライベートレジストリ

Docker Hub以外にも、プライベートレジストリを使用してDockerイメージを保存および配布できます。プライベートレジストリは、オンプレミスまたはクラウドでホストされる場合があり、追加のセキュリティおよびアクセス制御オプションを提供します。一般的なプライベートレジストリサービスには、Google Container Registry、Amazon Elastic Container Registry、およびAzure Container Registryがあります。

プライベートレジストリにイメージをプッシュするには、まずイメージをレジストリのURLでタグ付けします。

bash
$ docker tag my_app:1.0 <REGISTRY_URL>/my_app:1.0

次に、プライベートレジストリにログイン(必要に応じて)し、イメージをプッシュします。

bash
$ docker login <REGISTRY_URL>
$ docker push <REGISTRY_URL>/my_app:1.0

Dockerコンテナ

Dockerコンテナは、Dockerイメージのランタイムインスタンスです。この章では、Dockerコンテナの作成、管理、およびネットワーキングとデータストレージングの操作について説明します。

Dockerコンテナの作成

Dockerコンテナは、docker runコマンドを使用して作成できます。さまざまなオプションを使用してコンテナの動作をカスタマイズできます。

コンテナの実行

イメージから新しいDockerコンテナを作成して開始するには、次のコマンドを使用します。

bash
$ docker run -d --name my_container -p 8080:8080 my_app:1.0

このコマンドは、my_app:1.0イメージをベースにしてmy_containerという名前のコンテナを作成します。-dフラグは、コンテナをデタッチドモード(バックグラウンド)で実行し、-pフラグは、ホストのポート8080をコンテナのポート8080にマップします。

インタラクティブコンテナ

インタラクティブモードでコンテナを実行するには(デバッグや探索に便利)、-itフラグを使用します。

bash
$ docker run -it --name my_container my_app:1.0 /bin/bash

このコマンドは、新しいコンテナを開始し、その中にBashシェルを開きます。これにより、コンテナのファイルシステムとプロセスにアクセスできます。

Dockerコンテナの管理

Dockerコンテナを作成した後は、管理する必要があります。一般的なタスクには、コンテナのリスト表示、停止、および削除が含まれます。

コンテナのリスト表示

全ての実行中のDockerコンテナをリスト表示するには、次のコマンドを使用します。

bash
$ docker ps

停止したコンテナを含めるには、-aフラグを追加します。

bash
$ docker ps -a

コンテナの停止

実行中のDockerコンテナを停止するには、次のコマンドを使用します。

bash
$ docker stop <CONTAINER_ID>

<CONTAINER_ID>を停止するコンテナの実際のIDに置き換えてください。

コンテナの削除

停止したDockerコンテナを削除するには、次のコマンドを使用します。

bash
$ docker rm <CONTAINER_ID>

<CONTAINER_ID>を削除するコンテナの実際のIDに置き換えてください。

ネットワーキングとデータストレージ

Dockerコンテナは、さまざまなネットワーキングオプションを介してお互いやホストシステムと通信できます。さらに、コンテナで生成されたデータは、データボリュームを使用して永続化できます。

コンテナネットワーキング

Dockerは、ブリッジ、ホスト、オーバーレイ、Macvlanなど、いくつかのネットワーキングオプションを提供しています。

  • ブリッジ
    同じホスト上のコンテナ間のプライベートネットワークを提供するデフォルトのネットワークタイプです。

  • ホスト
    ネットワークの分離を解除し、コンテナがホストのネットワークを直接使用できるようにします。

  • オーバーレイ
    Swarm内の複数のDockerホスト間でコンテナが通信できるようにします。

  • Macvlan
    コンテナにMACアドレスを割り当て、ネットワーク上で別の物理デバイスのように表示させます。

カスタムネットワークを作成するには、次のコマンドを使用します。

bash
$ docker network create --driver bridge my_network

カスタムネットワークにコンテナを接続するには、コンテナを実行するときに--netフラグを使用します。

bash
$ docker run -d --name my_container --net my_network my_app:1.0

データボリューム

データボリュームは、Dockerコンテナで生成されたデータを永続化するために使用されます。ボリュームはDockerによって管理され、コンテナ間で共有できます。

新しいデータボリュームを作成するには、次のコマンドを使用します。

bash
$ docker volume create my_data

コンテナにデータボリュームをマウントするには、コンテナを実行するときに-vフラグを使用します。

bash
$ docker run -d --name my_container -v my_data:/data

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!