はじめに
近年、アプリケーションの開発や運用において「コンテナ」という技術が欠かせない存在となっています。クラウド環境やマイクロサービスの普及により、コンテナを理解することはエンジニアにとって必須スキルと言えるでしょう。
特に、AWSのECS(Elastic Container Service)は「コンテナ実行環境のマネージドサービス」です。つまり、ECSを正しく理解するためには、まずコンテナそのものの仕組みや特性を押さえておく必要があります。
本記事では、ECSを学ぶ第一歩として「コンテナとは何か」をわかりやすく解説し、Dockerを使った基本的な動作を体験できる内容を紹介します。
コンテナとは何か?
コンテナの定義
コンテナとは、アプリケーションを動かすために必要なプログラムやライブラリ、設定などをひとまとめにして、どこでも同じように実行できるようにした仕組みです。
「動く環境ごとアプリをパッケージ化したもの」とイメージするとわかりやすいでしょう。
仮想マシン(VM)との違い
従来は、アプリを分離して動かすために仮想マシン(VM)が使われてきました。しかしVMは、1台ごとにOSを含めて立ち上げる必要があり、起動が重くリソースも多く消費します。
一方でコンテナは、ホストOSのカーネルを共有しながらアプリを分離して動かすため、軽量で高速に起動できるのが特徴です。
項目 | 仮想マシン(VM) | コンテナ |
---|---|---|
OS | ゲストOSが必要 | ホストOSを共有 |
起動速度 | 数分かかることも | 数秒で起動 |
消費リソース | 大きい | 小さい |
移植性 | 環境依存が大きい | どこでも同じ動作 |
コンテナが普及した背景
コンテナは次のようなメリットから急速に普及しました。
- 軽量性:無駄なOSを持たず、効率よくリソースを使える
- 移植性:アプリを環境ごとまとめるため、どのサーバーでも同じ動作が保証される
- スピード:数秒で起動できるため、開発や運用の効率が大幅に向上
これらの特性により、クラウド環境やマイクロサービスアーキテクチャと相性が良く、現在では多くの企業や開発現場で当たり前に使われる技術になっています。
Dockerの基本を知る
Dockerとは何か?
Dockerは、コンテナを簡単に作成・実行・管理できるためのプラットフォームです。
従来はサーバーごとに複雑な環境構築が必要でしたが、Dockerを使えば「環境ごとまとめてパッケージ化」でき、誰でも同じ動作環境を再現できます。
イメージとコンテナの違い
Dockerには「イメージ」と「コンテナ」という2つの重要な概念があります。
- イメージ:アプリを動かすために必要なファイルや設定をまとめた「完成品の設計図」
- コンテナ:そのイメージをもとに実際に動作している「アプリの実行環境」
例えるなら、イメージは料理のレシピ、コンテナは出来上がった料理というイメージです。
Dockerfileの役割
Dockerfileとは、イメージを作成するための手順を書いたファイルです。
- どのOSをベースにするか
- どんなパッケージをインストールするか
- どのファイルをコピーするか
- どのコマンドで起動するか
といった手順を定義します。つまり、Dockerfile = レシピです。
レシピから実行までの流れ
Dockerの流れを整理すると以下のようになります。
- Dockerfileを作成(レシピを書く)
- イメージをビルド(完成品をつくる)
docker build -t myapp .
- コンテナを実行(アプリを起動する)
docker run -d -p 8080:80 myapp
コマンド一覧はこちらでも解説しています。

実際に動かしてみよう
ここからは、実際にDockerをインストールして動かしてみましょう。環境構築の流れを体験することで、コンテナの仕組みを直感的に理解できます。
Dockerのインストール
Dockerは公式サイトから「Docker Desktop」をダウンロードすれば簡単に導入できます。
詳細は Docker公式のインストールガイド を参照してください。
簡単なコマンド例
- 動作確認(Hello Worldコンテナを実行)
docker run hello-world
初めて実行する際にイメージがダウンロードされ、「Hello from Docker!」と表示されれば成功です。

- 稼働中のコンテナを確認
docker ps
現在動いているコンテナの一覧が表示されます。(今は動いていないので何も表示されないです。)

- すべてのコンテナ(停止中も含む)を確認
docker ps -a

サンプルアプリをコンテナで動かす流れ
次に、簡単なWebサーバーをコンテナで動かしてみましょう。
- イメージを指定してコンテナを起動
例えばNginxのWebサーバーを起動する場合docker run -d -p 8080:80 nginx
-d
はバックグラウンド実行-p 8080:80
はローカルの8080番ポートをコンテナの80番ポートに接続
- ブラウザで確認
http://localhost:8080 を開くと、Nginxのデフォルトページが表示されます。

これで「サーバーをインストールして起動する」という従来の手間を、Dockerではたった1行で実現できることが体感できます。
Dockerfile作成
コンテナの理解を深めるために、自分で Dockerfile を書いてみましょう。ここではシンプルなWebアプリを例にします。
サンプルアプリの例(Node.js)
まずは簡単なNode.jsアプリを用意します。
app.js
const http = require("http");
const port = 3000;
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello, Docker!");
});
server.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
package.json
{
"name": "docker-sample",
"version": "1.0.0",
"main": "app.js",
"dependencies": {
"express": "^4.18.2"
}
}
Dockerfileの基本構成
次に、アプリをコンテナ化するための Dockerfile を作成します。
Dockerfile
# ベースイメージを指定(Node.js公式イメージを利用)
FROM node:18
# 作業ディレクトリを作成
WORKDIR /usr/src/app
# 依存ファイルをコピーしてインストール
COPY package*.json ./
RUN npm install
# アプリ本体をコピー
COPY . .
# コンテナがリッスンするポート番号を指定
EXPOSE 3000
# コンテナ起動時に実行するコマンド
CMD ["node", "app.js"]
ここで使った命令の意味は以下の通りです
- FROM:ベースとなる環境を指定
- WORKDIR:作業ディレクトリを指定
- COPY / RUN:必要なファイルをコピーし依存パッケージをインストール
- EXPOSE:コンテナが利用するポートを明示
- CMD:コンテナ起動時に実行されるコマンド
詳しくはこちらでも解説しています。

ビルドと実行手順
- イメージをビルド
docker build -t myapp .
-t
myapp
はイメージ名を「myapp」に設定するオプションです。 - コンテナを実行
docker run -d -p 3000:3000 myapp
-d
はバックグラウンド実行-p 3000:3000
はローカルの3000番ポートをコンテナの3000番ポートに接続
- ブラウザで確認
http://localhost:3000 を開くと「Hello, Docker!」と表示されれば成功です。

まとめ
本記事では、ECSを理解するための前提知識として「コンテナ」と「Docker」の基礎を学びました。
- コンテナとは何か?
- Dockerの基本
- 実際の動作確認
これらを押さえておくことで、ECSでコンテナを実行・管理する際に「なぜそう動くのか」「裏で何が起きているのか」を直感的に理解できるようになります。
次のステップでは、今回作成したDockerイメージを実際に ECSへデプロイ してみましょう。
コメント