Docker入門|docker runでコンテナを起動する基本手順を初心者向けに解説


はじめに

Dockerを初めて使う方向けに、コンテナとイメージの違いを押さえながら、実際にコンテナを起動する手順を解説します。

この記事では、まずhello-worldでDockerの動作を確認します。次にNginxのコンテナを起動し、ブラウザからアクセスします。最後に、実行中と終了済みのコンテナの確認方法、ポート公開の役割、コンテナの停止・削除まで試します。

手を動かしながら、次の流れを理解しましょう。

  1. イメージを取得する
  2. イメージからコンテナを作成・起動する
  3. コンテナの状態を確認する
  4. 必要に応じてポートを公開する
  5. コンテナを停止・削除する

Dockerとは

Dockerは、アプリケーションとその実行に必要なものをイメージとしてまとめ、コンテナとして実行するための仕組みです。

例えば、チームのメンバーごとに使っているソフトウェアのバージョンが異なると、「自分のPCでは動くのに、ほかの環境では動かない」という問題が起こります。Dockerを使えば、アプリケーションを動かすための設定をイメージや設定ファイルとして共有し、環境をそろえやすくなります。

仮想マシンとコンテナの違い

Dockerのコンテナは、仮想マシンと比較されることがあります。どちらもアプリケーションをほかの環境から分けて動かせますが、分け方が異なります。

仮想マシンでは、仮想マシンごとにゲストOSを起動し、その上でアプリケーションを動かします。一方、LinuxコンテナはコンテナごとにゲストOSを起動しません。同じLinuxカーネルを利用しながら、プロセスやファイルシステムなどを分けて動作します。

比較項目仮想マシンLinuxコンテナ
OSの扱い仮想マシンごとにゲストOSを起動するコンテナごとにはゲストOSを起動せず、同じLinuxカーネルを利用する
アプリの動かし方ゲストOSの上で動かす隔離されたプロセスとして動かす
起動や資源の使い方ゲストOSの起動や管理も必要一般に起動が速く、必要な資源を抑えやすい

例えば、Webサーバーを三つ動かす場合、仮想マシンではそれぞれにゲストOSを用意する構成が考えられます。コンテナなら、同じカーネルを利用しながら、Webサーバーごとに環境を分けられます。ただし、用途によって必要な隔離の程度は異なるため、コンテナが常に仮想マシンの代わりになるわけではありません。

なお、MacやWindowsのDocker Desktopでこの記事のようなLinuxコンテナを動かすときは、内部でLinux環境を利用します。LinuxコンテナがmacOSやWindowsのカーネルを直接共有するわけではありません。「コンテナは仮想マシンを一切使わない」ではなく、「各コンテナがそれぞれゲストOSを起動しない」と理解してください。

Dockerを使うメリット

  • 環境を再現しやすい: 同じイメージを使って、別の環境にもアプリケーションを展開しやすくなります。
  • 起動・停止が簡単: コマンドでコンテナを作成し、不要になったら停止・削除できます。
  • アプリごとに環境を分けられる: 必要なソフトウェアや設定をコンテナごとに分けて管理できます。

ただし、Dockerを使えばどのPCでも必ず同じように動くわけではありません。CPUの種類、OS、ファイルの扱い、外部サービスの設定などによって、動作が変わる場合もあります。また、Dockerの用語やコマンドを覚える必要があります。

最初に覚えたい用語

イメージ

コンテナを作る元になるものです。アプリケーションの実行に必要なファイルや設定を含みます。公開されているイメージはDocker Hubなどから取得できます。

コンテナ

イメージを元に作成して実行する環境です。同じイメージから複数のコンテナを作れます。イメージとコンテナの関係は、「元になるもの」と「そこから作って動かすもの」と考えると分かりやすいでしょう。

ボリューム

コンテナで使うデータを、コンテナの削除後も残したいときに利用する保存領域です。データベースのデータを保存する場合などに使います。この記事では名前だけ覚えておけば大丈夫です。

Dockerを使う準備

この記事のコマンドを実行するには、Dockerが使える環境が必要です。WindowsやMacでDocker Desktopを利用している場合は、先にDocker Desktopを起動してください。以下のコマンドはターミナルで実行します。

まず、Dockerのコマンドが使えるか確認します。

docker -v

バージョン番号が表示されれば、Dockerのコマンドは利用できます。ただし、これだけではコンテナを動かすDocker本体が起動しているか分かりません。続けて確認しましょう。

docker info

Dockerの情報が表示されれば、Docker本体に接続できています。「Dockerデーモンに接続できない」といったエラーが出た場合は、Docker Desktopが起動しているか確認し、起動完了後にもう一度実行してください。

hello-worldコンテナを起動する

最初は、Dockerの動作確認用イメージであるhello-worldを使います。

docker pull hello-world

docker pullは、イメージを取得するコマンドです。取得したイメージを使い、次のコマンドでコンテナを起動します。

docker run hello-world

実行結果に次の文字が含まれていれば成功です。

Hello from Docker!

docker runは、指定したイメージからコンテナを作成して起動します。今回のhello-worldはメッセージを表示したら処理を終えるため、起動後すぐにコンテナも終了します。

なお、事前にdocker pullを実行しなくても、指定したイメージが手元にない場合はdocker runが取得を試みます。今回は「取得」と「起動」の操作を分けて確認するため、先にdocker pullを実行しました。

実行中と終了済みのコンテナを確認する

現在実行中のコンテナを確認します。

docker ps

hello-worldはすでに処理を終えているため、通常はこの一覧に表示されません。終了したコンテナも含めて確認するには、-aを付けます。

docker ps -a

一覧のIMAGE欄にhello-worldがあり、STATUS欄がExitedになっていれば、コンテナは正常に終了しています。hello-worldを何度か実行している場合は、複数の行が表示されることもあります。

ここで覚えておきたいのは、コンテナの停止と削除は別ということです。処理を終えたコンテナも、通常は削除されずdocker ps -aで確認できます。

Nginxコンテナを起動する

次は、起動したままWebページを配信するNginxを使います。NginxはWebサーバーのソフトウェアです。次のコマンドを実行してください。

docker run --name nginx -p 8080:80 -d nginx

最後のnginxは使うイメージの名前です。イメージが手元にない場合は、Dockerが取得してからコンテナを起動します。

このコマンドで指定したオプションを確認しましょう。

オプション役割
--name nginxコンテナにnginxという名前を付ける
-p 8080:80PCの8080番ポートをコンテナの80番ポートに接続する
-dコンテナをバックグラウンドで実行する

ブラウザで次のURLを開いてください。

http://localhost:8080/

Nginxの初期ページが表示されれば、コンテナ内のWebサーバーへアクセスできています。もし表示されない場合は、コンテナが起動しているかdocker psで確認してください。また、PCの8080番ポートを別のアプリが使っていると、コンテナを起動できない場合があります。

-pを付けた場合と付けない場合を比べる

先ほどの-p 8080:80では、左側の8080が自分のPC側、右側の80がコンテナ側のポート番号です。

まずは実行中のコンテナを確認します。

docker ps

nginxの行のPORTS欄に、PCの8080番ポートからコンテナの80番ポートへの対応が表示されます。表示の形式は環境によって異なります。

次に、Nginxコンテナを停止して削除します。

docker stop nginx
docker rm nginx

docker stopはコンテナを停止するコマンドです。停止したコンテナはdocker ps -aで確認できます。docker rmを実行するとコンテナが削除されますが、取得済みのNginxイメージは残ります。

今度は-pを指定せずに、別の名前でNginxを起動します。

docker run --name nginx-no-port -d nginx
docker ps

Nginxは起動しますが、PORTS欄にPCの8080番ポートへの対応は表示されません。この状態でhttp://localhost:8080/へアクセスしても、このコンテナのNginxには接続できません。ほかのアプリが8080番ポートを使っていなければ、接続エラーになります。

Webサーバーがコンテナ内で起動していることと、自分のPCからアクセスできることは別です。PCからアクセスするには、-p 8080:80のようにポートを公開します。

確認が終わったら、実験用のコンテナも停止して削除しましょう。

docker stop nginx-no-port
docker rm nginx-no-port

まとめ

この記事では、hello-worldでDockerの動作を確認し、Nginxのコンテナを起動してブラウザからアクセスしました。

  • docker pullでイメージを取得できる
  • docker runでイメージからコンテナを作成・起動できる
  • docker psで実行中、docker ps -aで終了済みを含むコンテナを確認できる
  • -pでPCからコンテナへアクセスするためのポートを公開できる
  • docker stopで停止し、docker rmでコンテナを削除できる

次はDockerfileの書き方とビルド方法を学ぶと、自分でイメージを作れるようになります。複数のコンテナをまとめて起動したい場合は、Docker Compose入門へ進んでください。


コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です