1. ホーム
  2. 記事一覧
  3. 初心者でもサクッとDockerでアプリをデプロイする方法

2024.03.18

初心者でもサクッとDockerでアプリをデプロイする方法

Dockerで開発をもっと楽に

Dockerは、アプリケーションの開発からデプロイまでをシンプルかつ迅速にするツールです。仮想マシンとは異なり、軽量で高速なコンテナ技術を用いるため、環境差異に悩まされることなく、どこでも同じ条件でアプリケーションを実行できます。

この記事では、初心者でもDockerを使って簡単なWebアプリケーションをデプロイし、実際に動かせるように、基本的な流れを丁寧に解説します。さらに、アプリケーションの更新や削除方法も説明するので、Dockerを使いこなせるようになるはずです。

Dockerの主要な概念

Dockerは、ソフトウェアを容易に開発、配布、実行できるようにするためのプラットフォームです。その核心にある「コンテナ技術」によって、アプリケーションを軽量な、独立したパッケージに包み込みます。これにより、異なる環境間での動作が一貫して保証され、開発から本番環境までスムーズな移行が可能になります。

Dockerの主要な概念を理解することで、Dockerを使ってアプリケーションを効率的に開発し、どこでも一貫して実行する力を手に入れることができます。以下は、Dockerのコンポーネントと呼ばれる主要な構成要素です。

1. イメージ

Dockerイメージは、アプリケーションを実行するために必要なすべてを含む静的なスナップショットです。これには、コード、ランタイム、ライブラリ、環境変数、設定ファイルなどが含まれます。イメージはコンテナの「設計図」として機能し、イメージからコンテナを作成・実行します。

Dockerイメージの例

  • 特定のバージョンのPythonと必要なライブラリを含むイメージ
  • 特定のWebアプリケーションを含むイメージ
  • 特定のデータベースを含むイメージ

2. コンテナ

コンテナは、Dockerイメージを実行したときに生成される実行可能なインスタンスです。それぞれのコンテナは、システムの他の部分から分離されており、独自のファイルシステムを持ち、独自のネットワークインターフェースを持つなど、独立した環境で実行されます。コンテナは軽量で、迅速に起動・停止が可能です。

コンテナの例

  • Webアプリケーションを実行するコンテナ
  • データベースを実行するコンテナ
  • ジョブを実行するコンテナ

3. Dockerfile

Dockerfileは、Dockerイメージを自動で作成するためのテキストファイルです。このファイルには、ベースとなるイメージの指定、依存するソフトウェアのインストール、コピーするファイルの指定、実行コマンドなど、イメージを作成するための一連の指示が含まれています。Dockerfileを使用することで、イメージの作成プロセスを自動化し、再現性を高めることができます。

Dockerfileの例

  • Pythonアプリケーション用のイメージを構築するDockerfile
  • Webアプリケーション用のイメージを構築するDockerfile
  • データベース用のイメージを構築するDockerfile

これらの概念を理解することで、Dockerを使って以下のようなことができるようになります。

  • アプリケーションを異なる環境間で一貫して実行する
  • 開発環境と本番環境を同じように保つ
  • アプリケーションを迅速にデプロイする
  • アプリケーションを簡単にスケールする
  • マイクロサービスアーキテクチャを実装する

Dockerの環境構築

Dockerを使い始めるための最初のステップは、開発環境である自分のPCにDockerをインストールすることです。DockerはWindows、Mac、そしてLinuxに対応しており、各OSごとにインストール方法が異なります。

Dockerのインストール方法

  • Windows

    Docker Desktopを使用します。WSL 2の設定が必要な場合があります。

  • Mac

    Docker Desktop for Macをダウンロードして使用します。

  • Linux

    各ディストリビューションに応じてDocker Engineをインストールします。

インストール手順の詳細とコマンド例については、Dockerの公式ドキュメントを参照してください。

Dockerのインストール確認

インストール後、以下のコマンドを実行してDockerが正しくインストールされていることを確認します。

docker --version
docker run hello-world

docker run hello-worldの実行に成功すれば、Dockerが正しくセットアップされています。

トラブルシューティング

サンプルアプリケーションの紹介

次に紹介するサンプルアプリケーションは、Pythonで書かれた簡易的なWebアプリです。このアプリは、Flaskという軽量なWebアプリケーションフレームワークを使用しています。FlaskはPython初学者でも扱いやすく、小規模なアプリから大規模なアプリケーションまで幅広く対応できる柔軟性を持っています。

アプリケーションの機能

このサンプルアプリケーションでは、以下のような簡単な操作を行います。

  • ユーザーがWebページに名前を入力します。
  • 送信ボタンをクリックすると、アプリケーションがその名前を使って挨拶を返します。
  • 例えば、名前として「Alice」と入力したら、「Hello, Alice!」とWebページに表示されます。

この簡単な手順を通じて、Webページから情報を送る方法と、その情報を使ってWebページに何かを表示させる方法の基本を学ぶことができます。

使用する技術

  • Python

    プログラミング言語として、このアプリケーションのロジックを記述します。Pythonは読みやすく、書きやすい言語であるため、プログラミング初心者にもおすすめです。

  • Flask

    Python製の軽量Webアプリケーションフレームワークです。Flaskを使うことで、ルーティング、リクエスト処理、テンプレートレンダリングなど、Webアプリケーションに必要な基本的な機能を簡単に実装できます。

プロジェクトの準備

サンプルアプリケーションを開発する前に、適切なプロジェクト構造を作成することが重要です。これには、アプリケーションのソースコード、依存関係を記述したrequirements.txt、そしてアプリケーションをビルドするためのDockerfileが含まれます。

プロジェクトディレクトリの作成

1. ルートディレクトリの作成

まず、プロジェクト用の新しいディレクトリを作成します。これをプロジェクトのルートディレクトリとします。

mkdir flask-sample-app
cd flask-sample-app

2. アプリケーションのファイルを作成

アプリケーションのソースコードを格納するためのファイルapp.pyをコマンドなどで作成します。

touch app.py

中身は次のようにしてください。この例では、ユーザーがフォームに名前を入力し、送信すると、入力された名前で挨拶を返す簡単なアプリケーションを作成します。

from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def hello():
    name = request.form.get('name', 'World')
    html_form = """
        <html>
            <body>
                <form method="post">
                    <label for="name">Enter your name:</label>
                    <input type="text" id="name" name="name">
                    <input type="submit" value="Submit">
                </form>
                <h1>Hello, {}!</h1>
            </body>
        </html>
    """.format(name)
    return render_template_string(html_form)

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

3. パッケージファイルの作成

Flaskアプリケーションの依存関係を管理するためにrequirements.txtファイルを作成し、必要なパッケージを記述します。

touch requirements.txt

Flaskが必要ですので、次のように記述してください。

Flask==2.2.2

4. Dockerfileの作成

最後に、アプリケーションをDockerイメージとしてビルドするための指示を含むDockerfileを作成します。この時点では一旦空で大丈夫です。

touch Dockerfile

これらのステップにより、次のようなプロジェクト構造ができます。

flask-sample-app/
├── app.py
├── Dockerfile
└── requirements.txt

これでアプリケーションの開発、ビルド、そしてデプロイを行う準備が整いました。

Dockerfileの内容を作成

Dockerイメージは、アプリケーションを実行するために必要なすべてを含むパッケージです。このセクションでは、先に紹介したPython + Flaskを使用したサンプルアプリケーションのためのDockerイメージを作成する方法を説明します。

Dockerfileの解説

Dockerイメージを作成するには、まずDockerfileという設定ファイルを作成します。このファイルは、イメージを構築するための指示を含んでいます。以下は、サンプルアプリケーション用のDockerfileの例です。

# ベースイメージとしてPythonのバージョン3.10の軽量版を使用
FROM python:3.10-slim

# アプリケーションのファイルをアプリケーションディレクトリにコピー
WORKDIR /app
COPY . /app

# Pythonの依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt

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

このDockerfileは次のように動作します:

  1. Python 3.8の軽量版をベースイメージとして使用します。
  2. 現在のディレクトリ(プロジェクトルート)から、すべてのファイルをコンテナ内の/appディレクトリにコピーします。
  3. requirements.txtに記載された依存関係をインストールします。
  4. CMDコマンドで、app.pyを実行してアプリケーションを起動します。

Dockerイメージのビルド方法

Dockerfileが完成したら、次のコマンドを使用してDockerイメージをビルドします。このコマンドは、プロジェクトのルートディレクトリ(Dockerfileがある場所)で実行する必要があります。

docker build -t flask-sample-app .

このコマンドは、現在のディレクトリ(.)のDockerfileを使用して新しいイメージをビルドし、そのイメージにflask-sample-appという名前をタグ付けします。-tオプションは、イメージに名前(タグ)をつけるために使用します。

ビルドが完了すると、docker imagesコマンドを使用して作成されたイメージをリスト表示できます。これにより、イメージが正しくビルドされ、使用可能な状態になっていることを確認できます。

docker images
REPOSITORY                      TAG                        IMAGE ID       CREATED          SIZE
flask-sample-app                latest                     ab7fcbd8e25c   3 minutes ago    165MB 

アプリケーションの実行

次のコマンドでアプリケーションを実行し、localhost:8080に接続してみてください。

docker run -p 8080:5000 flask-sample-app

次のように表示されたら、名前を入力してみましょう。

入力した名前が表示されれば、完成です。

Dockerの片付け

Dockerを使用して開発を行う際には、作業が完了した後にコンテナを適切に停止し、不要になったコンテナやイメージを削除しましょう。システムのリソースを解放し、環境を整理することができます。以下に、コンテナの停止と片付けについての基本的な手順を説明します。

実行中のコンテナを停止する

1. 実行中のコンテナをリスト表示

停止したいコンテナを特定するために、まずは現在実行中のコンテナをリスト表示します。

docker ps

2. コンテナを停止

コンテナのIDまたは名前を使用して、コンテナを停止します。以下のコマンドでは<container_id>を停止したいコンテナのIDまたは名前に置き換えてください。

docker stop <container_id>

コンテナとイメージを削除する

1. 停止したコンテナを削除

コンテナを停止した後、それを削除してシステムから完全に除去することができます。

docker rm <container_id>

複数のコンテナを一度に削除したい場合は、コンテナIDをスペースで区切って列挙します。

2. Dockerイメージを削除

不要になったDockerイメージを削除するには、まずイメージのリストを表示してIDを確認します。

docker images

次に、イメージを削除します。以下のコマンドでは<image_id>を削除したいイメージのIDに置き換えてください。

docker rmi <image_id>

使用中のイメージや、依存するコンテナが存在する場合、イメージの削除に失敗することがあります。その場合は、依存するコンテナを先に削除する必要があります。

注意事項

  • コンテナやイメージを削除すると、その中のデータや設定は完全に失われます。重要なデータは事前にバックアップしておくことをお勧めします。
  • コンテナやイメージの削除は、ディスクスペースの解放や環境の整理に役立ちますが、必要なものを誤って削除しないように注意してください。

これらの手順を実行することで、Docker環境の管理と整理が容易になります。

Dockerでアプリを簡単にデプロイ

この記事では、Dockerを使ったFlask Webアプリケーションの開発からデプロイ、そして環境の片付けまでの一連の流れを学びました。Dockerの基本的な概念の理解から、実際にアプリケーションをコンテナ化し動作させる手順、使用後の環境整理に至るまで、Dockerを活用することで開発プロセスがいかに効率化されるかを体験できました。次は自身のオリジナルアプリをデプロイしてみてください。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事