MENU
オンライン講座開催中

Docker入門【基礎】コンテナの概念とNginxを動かすまでの手順

Docker入門【基礎】コンテナの概念とNginxを動かすまでの手順

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 DesktopMacや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から自動でダウンロードしてから起動します。実行すると以下のような流れで処理が進みます。

  1. hello-worldイメージがMacにないためDocker Hubから自動ダウンロードする
  2. ダウンロードしたイメージからコンテナを作成する
  3. コンテナが起動して「Hello from Docker!」というメッセージを表示する
  4. メッセージを表示したらコンテナが自動的に終了する
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
STATUSUp=起動中、Exited=停止中Up 2 minutes
PORTSどのポートがつながっているか。8080->80はMacの8080番とコンテナの80番がつながっている0.0.0.0:8080->80/tcp
NAMESDockerが自動でつけたコンテナの名前。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など)をまとめて管理する方法を学びます。

目次