Dockerはアプリケーションを「コンテナ」という独立した環境に入れて動かす技術です。
この記事ではDockerの基本概念から、実際にNginxのWebサーバーをコンテナとして動かすまでの手順を解説します。
Dockerとは何か
Dockerを一言で表すと「アプリケーションの実行環境をまるごとパッケージ化して、どこでも同じように動かせるようにする技術」です。
従来のサーバー構築では「自分のMacでは動くのにサーバーでは動かない」という問題が頻繁に起きていました。OSのバージョン・インストールされているライブラリ・設定ファイルの違いなど、環境差異が原因です。Dockerはアプリケーションと実行に必要な環境をセットにした「コンテナ」という箱に入れることで、この問題を解決します。
仮想マシン(EC2)とDockerの違い
EC2のような仮想マシンはOSごと仮想化するのに対して、DockerはOSを共有してアプリケーション部分だけを分離します。これによりDockerコンテナは起動が速く、容量も小さくなります。
| 仮想マシン(EC2) | Dockerコンテナ | |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| 容量 | 数GB〜 | 数十MB〜数百MB |
| OSの扱い | OSごと仮想化する | OSは共有、アプリだけ分離する |
| 向いている用途 | サーバー全体の管理 | アプリの実行環境の管理 |
重要な用語
| 用語 | 意味 | 例え |
|---|---|---|
| イメージ | コンテナの設計図。Docker Hubからダウンロードして使う | クッキーの型 |
| コンテナ | イメージから作られた実際の実行環境。起動・停止ができる | 型で作ったクッキー |
| Docker Hub | イメージを公開・配布するサービス。GitHubのDocker版 | アプリストア |
| Docker Desktop | MacやWindowsでDockerを使うためのGUIアプリ | Dockerの管理画面 |
Docker Desktopのインストール確認
ターミナルで以下のコマンドを実行してDockerがインストールされているか確認します。
docker --version
バージョン番号が表示されればインストール済みです。次にDockerが起動しているか確認します。
docker ps
以下のようなエラーが出た場合はDocker Desktopが起動していません。
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
アプリケーションフォルダからDocker Desktopを起動してください。左下に「Engine running」と表示されれば起動完了です。再度docker psを実行して空のテーブルが表示されれば正常です。
STEP1:hello-worldコンテナを動かす
まずDockerが正常に動作するか確認するためにhello-worldというテスト用コンテナを起動します。
docker run hello-world
docker runは「このイメージからコンテナを作って起動してください」という命令です。hello-worldの部分が使いたいイメージの名前です。Macの中にhello-worldイメージがない場合はDocker Hubから自動でダウンロードしてから起動します。実行すると以下のような流れで処理が進みます。
- hello-worldイメージがMacにないためDocker Hubから自動ダウンロードする
- ダウンロードしたイメージからコンテナを作成する
- コンテナが起動して「Hello from Docker!」というメッセージを表示する
- メッセージを表示したらコンテナが自動的に終了する
Hello from Docker!
This message shows that your installation appears to be working correctly.
このメッセージが表示されればDockerは正常に動作しています。Docker Desktop画面のContainersタブでもログを確認できます。STATUSが「Exited (0)」と表示されているのは「正常に終了した」という意味です。エラーではありません。
STEP2:NginxのWebサーバーをコンテナで起動する
次は実用的なWebサーバーであるNginxをコンテナとして起動します。EC2にNginxをインストールしたときと同じことが、コマンド1行でできます。
docker run -d -p 8080:80 nginx
このコマンドは3つのパーツに分かれています。
① docker run
「コンテナを作って起動して」という基本命令です。hello-worldのときと同じです。
② -d(バックグラウンドで起動)
-dをつけないとターミナルがNginxのログ表示で占領されてしまい、他のコマンドが打てなくなります。-dをつけることで「ターミナルとは別のところで動いていてね」という意味になります。WebサーバーのようにずっとバックグラウンドでI動かし続けたいものには必ず-dをつけます。
③ -p 8080:80(ポートのマッピング)
ポートとは「どの窓口でアクセスを受け付けるか」を決める番号です。コンテナは独立した環境なので、そのままではMacからアクセスできません。-pオプションで「Macのどのポートとコンテナのどのポートをつなぐか」を指定します。
-p 8080:80は「Macの8080番ポートへのアクセスをコンテナの80番ポートに転送する」という意味です。Nginxはデフォルトで80番ポートで動くので、ブラウザでhttp://localhost:8080にアクセスするとコンテナの中のNginxに届く仕組みです。
実行するとNginxイメージがDocker Hubから自動でダウンロードされてコンテナが起動します。ブラウザで以下のURLにアクセスするとNginxの画面が表示されます。
http://localhost:8080
「Welcome to nginx!」と表示されれば成功です。
STEP3:基本コマンドを覚える
docker ps:起動中のコンテナを確認する
docker ps
psはprocess statusの略で「今動いているコンテナの状態を見せて」という命令です。実行すると以下のような表が表示されます。
| 列名 | 意味 | 例 |
|---|---|---|
| CONTAINER ID | コンテナに自動で付けられたID。stopなどのコマンドで使う | 826ee924a9e8 |
| IMAGE | このコンテナが使っているイメージ名 | nginx |
| CREATED | コンテナを作ってからどれくらい経ったか | 2 minutes ago |
| STATUS | Up=起動中、Exited=停止中 | Up 2 minutes |
| PORTS | どのポートがつながっているか。8080->80はMacの8080番とコンテナの80番がつながっている | 0.0.0.0:8080->80/tcp |
| NAMES | Dockerが自動でつけたコンテナの名前。IDの代わりに使える | determined_cartwright |
docker stop:コンテナを停止する
docker stop コンテナID
CONTAINER IDの先頭の数文字を入力すれば認識されます。全部打つ必要はありません。stopするとブラウザでhttp://localhost:8080にアクセスしても繋がらなくなります。コンテナが停止しただけで削除はされていないので、docker start コンテナIDで再起動できます。
docker ps -a:停止中のコンテナも含めて確認する
docker ps -a
-aはallの略で「停止中のものも含めて全部見せて」という意味です。docker psだけだと起動中のコンテナしか表示されません。
よく使うDockerコマンド一覧
| コマンド | 意味 |
|---|---|
| docker run [イメージ名] | コンテナを作成して起動する |
| docker ps | 起動中のコンテナを一覧表示する |
| docker ps -a | 停止中を含む全コンテナを表示する |
| docker stop [コンテナID] | コンテナを停止する(削除はしない) |
| docker start [コンテナID] | 停止中のコンテナを再起動する |
| docker rm [コンテナID] | コンテナを削除する(停止してから削除する) |
| docker images | ダウンロード済みのイメージを一覧表示する |
| docker rmi [イメージID] | イメージを削除する |
| docker logs [コンテナID] | コンテナのログを確認する |
まとめ
Dockerの基本的な流れは「イメージをDocker Hubからダウンロード → コンテナを起動 → 使い終わったら停止」です。EC2にソフトをインストールする場合と比べて、コマンド1行で環境を用意できるのが最大のメリットです。
次のステップとしてdocker-composeを使って複数のコンテナ(WordPressとMySQLなど)をまとめて管理する方法を学びます。

