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が正しくセットアップされています。
トラブルシューティング
- インストールがうまくいかない場合は、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
は次のように動作します:
- Python 3.8の軽量版をベースイメージとして使用します。
- 現在のディレクトリ(プロジェクトルート)から、すべてのファイルをコンテナ内の
/app
ディレクトリにコピーします。 requirements.txt
に記載された依存関係をインストールします。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を活用することで開発プロセスがいかに効率化されるかを体験できました。次は自身のオリジナルアプリをデプロイしてみてください。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.04.14
DockerにGoでREST APIのTODOアプリを作るとDockerと仲良くなれる
今回は、「Dockerを使ってみたいけどよくわからない」という人を対象に、Docker上にGoを使ってREST APIで操作するTODOアプリケーションを作成することで、Dockerの操作に慣れていきましょう。
- ハンズオン
- Docker
- go
2024.03.19
初心者からステップアップ!Docker Compose応用ハンズオン
前回は「初心者でもサクッとできるDocker Composeハンズオン」でDocker Composeの基本を学びました。今回はさらに一歩踏み込み、Docker Composeを使った応用技術に目を向けます。ログの確認からデバッグ方法まで、効率的なトラブルシューティング技術を身に付けましょう。
- ハンズオン
- Docker
2024.04.06
[ハンズオン]AWS Backupで作成したAMIをLambdaを使用して起動テンプレートに適用
この記事では、AWS上でのリソース管理を自動化する方法を実践的に解説します。特に、開発環境やプロダクション環境におけるデプロイメントプロセスの簡素化や、ディザスタリカバリ準備の一環として、最新のAMIを定期的に起動テンプレートに適用する自動化手法を紹介します。
- AWS
- インフラエンジニア
- ハンズオン