Docker を使い始めたときに分かりにくいのは、コマンドそのものよりも「いまイメージを作っているのか」「いまコンテナを作っているのか」だと思います。

この記事では、Docker の操作を次の流れで分けて整理します。

  • Step 1. Docker が使えるか確認する
  • Step 2. イメージを用意する
  • Step 3. コンテナを作成する
  • Step 4. コンテナを操作する
  • Step 5. 不要なものを削除する

最初に全体像を書くと、Docker はだいたい次の関係です。

  • Dockerfile から始める場合: Dockerfile -> docker build -> イメージ -> docker run -> コンテナ
  • 既存イメージから始める場合: 既存イメージ -> docker run -> コンテナ

ubuntu:24.04 のような既存イメージを使う場合は、Dockerfile を作らずにすぐコンテナを作れます。

自分用の環境を作りたい場合は、Dockerfile を書き、docker build で自分用のイメージを作ってから、そのイメージを使ってコンテナを作ります。

イメージとコンテナの違い

Docker では、まず「イメージ」から「コンテナ」を作ります。

イメージは、コンテナの元になるテンプレートです。Ubuntu、nginx、Node.js、Python など、必要な環境が入ったひな形だと考えると分かりやすいです。

コンテナは、イメージから実際に作って動かす実行環境です。同じイメージから、名前の違うコンテナをいくつも作れます。

  • イメージ: コンテナの元になるもの
  • コンテナ: イメージから作って実際に動かすもの

たとえば ubuntu:24.04 というイメージがあるとします。このイメージから ubuntu-test というコンテナを作って、その中に入って作業できます。

Step 1 Docker が使えるか確認する

ここでは、まだイメージもコンテナも作りません。Docker 自体が使える状態か確認します。

bash
docker version

Docker Engine が動いていれば、Client と Server の情報が表示されます。

次に、いま手元にあるイメージとコンテナを確認します。

bash
docker images
docker ps -a

それぞれが見ている対象は次の通りです。

  • docker images: イメージ一覧を見る
  • docker ps -a: コンテナ一覧を見る

最初は、何も表示されないかもしれません。それで問題ありません。

Step 2 イメージを用意する

ここでは、コンテナではなくイメージを用意します。

イメージを用意する方法は、大きく分けて2つあります。

  • 方法1: 既存のイメージを取得する
  • 方法2: Dockerfile から自分用のイメージを作る

方法1 既存のイメージを取得する

まずは、Docker Hub などで公開されている既存のイメージを使う方法です。

今回は ubuntu:24.04 イメージを使います。先に明示的に取得するなら、次のコマンドです。

bash
docker pull ubuntu:24.04

取得したイメージを確認します。

bash
docker images
text
REPOSITORY   TAG     IMAGE ID       CREATED        SIZE
ubuntu       24.04   xxxxxxxxxxxx   ...            ...

この段階では、まだコンテナは作られていません。手元に「コンテナの元になる Ubuntu イメージ」があるだけです。

なお、docker pull を先に実行しなくても、次の docker run で必要なイメージが自動ダウンロードされます。ただし、理解しやすくするために、ここでは「イメージを用意する操作」と「コンテナを作る操作」を分けています。

方法2 Dockerfile から自分用のイメージを作る

次は、Dockerfile から自分用のイメージを作る方法です。

Dockerfile は、自分用のイメージを作るための設計図です。毎回手でコマンドを打って環境を作る代わりに、「このイメージには何を入れるか」「起動時に何を実行するか」をファイルに書いておけます。

まず、作業用のディレクトリを作ります。

bash
mkdir dockerfile-sample
cd dockerfile-sample

次に、Dockerfile を作ります。

Dockerfile
FROM ubuntu:24.04

RUN apt-get update && apt-get install -y curl

WORKDIR /app

RUN echo "hello from dockerfile image" > hello.txt

CMD ["bash"]

この Dockerfile は、次の内容のイメージを作るための設計図です。 RUN の中には、Linux のコマンドと同じように書くことができます。

  • FROM ubuntu:24.04: 元にするイメージを指定する
  • RUN apt-get update && apt-get install -y curl: イメージに curl を入れる
  • WORKDIR /app: 以降の Dockerfile 命令と、コンテナ起動時の作業ディレクトリを /app にする
  • RUN echo "hello from dockerfile image" > hello.txt: イメージ内に hello.txt を作る
  • CMD ["bash"]: コンテナ起動時に bash を開く

RUN は、イメージを作る段階で実行されます。コンテナを起動してから手で実行するコマンドではありません。

WORKDIR /app は cd /app と似ていますが、やや異なります。cd /app の場合は、実行した RUN の中でのみディレクトリが変わり、それ以降の RUN などには引き継がれません。

Dockerfile を書いたら、docker build でイメージを作ります。

bash
docker build -t my-ubuntu:1.0 .

-t my-ubuntu:1.0 は、作成するイメージに名前とタグを付ける指定です。最後の . は、今いるディレクトリの Dockerfile を使うという意味です。

成功すると、最後の方に次のような表示が出ます。

text
Successfully built ...
Successfully tagged my-ubuntu:1.0

作成されたイメージを確認します。

bash
docker images
text
REPOSITORY   TAG   IMAGE ID       CREATED   SIZE
my-ubuntu    1.0   xxxxxxxxxxxx   ...       ...

これで、自分で作った my-ubuntu:1.0 イメージを使えるようになりました。

この段階で存在するのはイメージです。my-ubuntu:1.0 というコンテナができたわけではありません。

Step 3 コンテナを作成する

ここでは、Step 2 で用意したイメージからコンテナを作ります。

コンテナを作る方法も、使うイメージによって2つに分けて考えます。

  • 方法1: 既存イメージ ubuntu:24.04 からコンテナを作る
  • 方法2: 自作イメージ my-ubuntu:1.0 からコンテナを作る

方法1 既存イメージからコンテナを作る

ubuntu:24.04 イメージから ubuntu-test コンテナを作って起動します。

bash
docker run --name ubuntu-test -it ubuntu:24.04 bash

このコマンドでは、ubuntu:24.04 イメージから ubuntu-test という名前のコンテナを作り、コンテナ内で bash を起動しています。

それぞれの意味は次の通りです。

  • docker run: イメージからコンテナを作って起動する
  • --name ubuntu-test: コンテナに ubuntu-test という名前を付ける
  • -it: ターミナルで対話操作できるようにする
  • ubuntu:24.04: 使うイメージ
  • bash: コンテナ内で起動するコマンド

docker run はコンテナを作るコマンドです。ただし、指定したイメージが手元にない場合は、イメージのダウンロードも同時に行います。

つまり docker run は、実際には次の2つをまとめてやることがあります。

  1. 必要ならイメージを取得する
  2. そのイメージからコンテナを作って起動する

成功すると、プロンプトが次のように変わります。

bash
root@コンテナID:/#

この状態になっていれば、すでにコンテナの中に入っています。

方法2 自作イメージからコンテナを作る

my-ubuntu:1.0 イメージから my-ubuntu-test コンテナを作って起動します。

bash
docker run --name my-ubuntu-test -it my-ubuntu:1.0

Dockerfile の CMD ["bash"] が効いているので、最後に bash と書かなくてもコンテナ内のシェルが起動します。

コンテナに入ったら、Dockerfile でイメージ内に入れておいた内容を確認します。

bash
pwd
cat hello.txt
curl --version

次のように確認できれば成功です。

text
/app
hello from dockerfile image
curl 8....

pwd が /app になっているのは、Dockerfile で WORKDIR /app と指定したためです。

hello.txt が最初から存在するのは、イメージを作る段階で RUN echo ... を実行しているためです。

curl が使えるのは、イメージを作る段階で RUN apt-get install -y curl を実行しているためです。

つまり、この確認では次の関係を見ています。

  • Dockerfile に書いた内容が、docker build でイメージに入る
  • そのイメージから docker run で作ったコンテナにも、Dockerfile の内容が反映される

確認が終わったら、コンテナから出ます。

bash
exit

Step 4 コンテナを操作する

ここでは、作成済みのコンテナを確認したり、再起動したり、中に入ったりします。イメージを作る操作ではありません。

コンテナの中でファイルを作る

ubuntu-test コンテナの中に入っている状態で、試しにファイルを作ってみます。

bash
echo "hello from container" > hello.txt
cat hello.txt

次のように表示されれば成功です。

text
hello from container

いま自分がどの環境にいるか確認したい場合は、次のコマンドも使えます。

bash
cat /etc/os-release

Ubuntu の情報が表示されれば、Ubuntu コンテナの中で作業できています。

コンテナから出るには exit を実行します。

bash
exit

この例では、bash を終了したのでコンテナも停止します。

コンテナの状態を確認する

ホスト側に戻ったら、コンテナ一覧を確認します。

bash
docker ps -a

これはコンテナを見るコマンドです。ubuntu-test というコンテナが表示され、状態は Exited になっているはずです。

text
CONTAINER ID   IMAGE          COMMAND   STATUS         NAMES
xxxxxxxxxxxx   ubuntu:24.04   "bash"    Exited (...)   ubuntu-test

ここで重要なのは、Exited は「イメージが消えた」という意味ではないことです。

  • ubuntu:24.04 イメージ: 残っている
  • ubuntu-test コンテナ: 停止している

停止したコンテナをもう一度起動する

停止したコンテナをもう一度起動するには、次のようにします。

bash
docker start ubuntu-test

起動中のコンテナに入るには、docker exec を使います。

bash
docker exec -it ubuntu-test bash

さきほどコンテナ内で作ったファイルも確認できます。

bash
cat hello.txt
text
hello from container

このように、コンテナを削除しない限り、コンテナ内で作ったファイルはそのコンテナに残ります。

確認が終わったら、もう一度コンテナから出ます。

bash
exit

コンテナを停止します。

bash
docker stop ubuntu-test

Step 5 不要なものを削除する

ここでは、不要になったコンテナやイメージを削除します。

コンテナ削除とイメージ削除は、コマンドが違います。

  • docker rm: コンテナを削除する
  • docker rmi: イメージを削除する

コンテナを削除する

不要になったコンテナは docker rm で削除します。

bash
docker rm ubuntu-test

自作イメージから作ったコンテナも同じように削除できます。

bash
docker rm my-ubuntu-test

docker rm はコンテナ削除です。元になった ubuntu:24.04 や my-ubuntu:1.0 のイメージは削除されません。

  • 削除されるもの: ubuntu-test コンテナ
  • 削除されないもの: ubuntu:24.04 イメージ

イメージを削除する

不要になったイメージは docker rmi で削除します。

bash
docker rmi my-ubuntu:1.0

docker rmi はイメージ削除です。docker rm と名前が似ていますが、対象が違います。

イメージから作ったコンテナが残っている場合、先にコンテナを削除しないとイメージを削除できないことがあります。

コマンドごとに対象を整理する

どのコマンドが何を扱っているかを整理すると、次のようになります。

コマンド主な対象何をしているか
docker versionDocker 本体Docker 自体を確認する
docker imagesイメージ手元のイメージ一覧を見る
docker pull ubuntu:24.04イメージ既存イメージを取得する
docker build -t my-ubuntu:1.0 .イメージDockerfile からイメージを作る
docker run --name ubuntu-test -it ubuntu:24.04 bashコンテナイメージからコンテナを作って起動する
docker ps -aコンテナコンテナ一覧を見る
docker start ubuntu-testコンテナ停止中のコンテナを起動する
docker exec -it ubuntu-test bashコンテナ起動中のコンテナに入る
docker stop ubuntu-testコンテナ起動中のコンテナを停止する
docker rm ubuntu-testコンテナコンテナを削除する
docker rmi my-ubuntu:1.0イメージイメージを削除する

特に混乱しやすいのは docker run です。

docker run は、名前からは「実行する」だけに見えますが、実際には「イメージから新しいコンテナを作って起動する」コマンドです。

つまり、docker run は「コンテナを作る」と「コンテナを起動する」をまとめて行います。

手元にイメージがない場合だけ、追加でイメージの取得も行われます。

まとめ

既存の Ubuntu をすぐ試すだけなら、次の関係です。

  • ubuntu:24.04 イメージを使う
  • docker run でコンテナを作って起動する
  • ubuntu-test コンテナができる

自分用の環境を作るなら、次の関係です。

  • Dockerfile を書く
  • docker build で my-ubuntu:1.0 イメージを作る
  • docker run でコンテナを作って起動する
  • my-ubuntu-test コンテナができる

最初は「イメージを用意する」「コンテナを作成する」「コンテナを操作する」を Step で分けて読むと、Docker の操作が整理しやすくなります。

ページの先頭へ ↑