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 自体が使える状態か確認します。
docker versionDocker Engine が動いていれば、Client と Server の情報が表示されます。
次に、いま手元にあるイメージとコンテナを確認します。
docker images
docker ps -aそれぞれが見ている対象は次の通りです。
docker images: イメージ一覧を見るdocker ps -a: コンテナ一覧を見る
最初は、何も表示されないかもしれません。それで問題ありません。
Step 2 イメージを用意する
ここでは、コンテナではなくイメージを用意します。
イメージを用意する方法は、大きく分けて2つあります。
- 方法1: 既存のイメージを取得する
- 方法2: Dockerfile から自分用のイメージを作る
方法1 既存のイメージを取得する
まずは、Docker Hub などで公開されている既存のイメージを使う方法です。
今回は ubuntu:24.04 イメージを使います。先に明示的に取得するなら、次のコマンドです。
docker pull ubuntu:24.04取得したイメージを確認します。
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 24.04 xxxxxxxxxxxx ... ...この段階では、まだコンテナは作られていません。手元に「コンテナの元になる Ubuntu イメージ」があるだけです。
なお、docker pull を先に実行しなくても、次の docker run で必要なイメージが自動ダウンロードされます。ただし、理解しやすくするために、ここでは「イメージを用意する操作」と「コンテナを作る操作」を分けています。
方法2 Dockerfile から自分用のイメージを作る
次は、Dockerfile から自分用のイメージを作る方法です。
Dockerfile は、自分用のイメージを作るための設計図です。毎回手でコマンドを打って環境を作る代わりに、「このイメージには何を入れるか」「起動時に何を実行するか」をファイルに書いておけます。
まず、作業用のディレクトリを作ります。
mkdir dockerfile-sample
cd dockerfile-sample次に、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 でイメージを作ります。
docker build -t my-ubuntu:1.0 .-t my-ubuntu:1.0 は、作成するイメージに名前とタグを付ける指定です。最後の . は、今いるディレクトリの Dockerfile を使うという意味です。
成功すると、最後の方に次のような表示が出ます。
Successfully built ...
Successfully tagged my-ubuntu:1.0作成されたイメージを確認します。
docker imagesREPOSITORY 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 コンテナを作って起動します。
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つをまとめてやることがあります。
- 必要ならイメージを取得する
- そのイメージからコンテナを作って起動する
成功すると、プロンプトが次のように変わります。
root@コンテナID:/#この状態になっていれば、すでにコンテナの中に入っています。
方法2 自作イメージからコンテナを作る
my-ubuntu:1.0 イメージから my-ubuntu-test コンテナを作って起動します。
docker run --name my-ubuntu-test -it my-ubuntu:1.0Dockerfile の CMD ["bash"] が効いているので、最後に bash と書かなくてもコンテナ内のシェルが起動します。
コンテナに入ったら、Dockerfile でイメージ内に入れておいた内容を確認します。
pwd
cat hello.txt
curl --version次のように確認できれば成功です。
/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 の内容が反映される
確認が終わったら、コンテナから出ます。
exitStep 4 コンテナを操作する
ここでは、作成済みのコンテナを確認したり、再起動したり、中に入ったりします。イメージを作る操作ではありません。
コンテナの中でファイルを作る
ubuntu-test コンテナの中に入っている状態で、試しにファイルを作ってみます。
echo "hello from container" > hello.txt
cat hello.txt次のように表示されれば成功です。
hello from containerいま自分がどの環境にいるか確認したい場合は、次のコマンドも使えます。
cat /etc/os-releaseUbuntu の情報が表示されれば、Ubuntu コンテナの中で作業できています。
コンテナから出るには exit を実行します。
exitこの例では、bash を終了したのでコンテナも停止します。
コンテナの状態を確認する
ホスト側に戻ったら、コンテナ一覧を確認します。
docker ps -aこれはコンテナを見るコマンドです。ubuntu-test というコンテナが表示され、状態は Exited になっているはずです。
CONTAINER ID IMAGE COMMAND STATUS NAMES
xxxxxxxxxxxx ubuntu:24.04 "bash" Exited (...) ubuntu-testここで重要なのは、Exited は「イメージが消えた」という意味ではないことです。
ubuntu:24.04イメージ: 残っているubuntu-testコンテナ: 停止している
停止したコンテナをもう一度起動する
停止したコンテナをもう一度起動するには、次のようにします。
docker start ubuntu-test起動中のコンテナに入るには、docker exec を使います。
docker exec -it ubuntu-test bashさきほどコンテナ内で作ったファイルも確認できます。
cat hello.txthello from containerこのように、コンテナを削除しない限り、コンテナ内で作ったファイルはそのコンテナに残ります。
確認が終わったら、もう一度コンテナから出ます。
exitコンテナを停止します。
docker stop ubuntu-testStep 5 不要なものを削除する
ここでは、不要になったコンテナやイメージを削除します。
コンテナ削除とイメージ削除は、コマンドが違います。
docker rm: コンテナを削除するdocker rmi: イメージを削除する
コンテナを削除する
不要になったコンテナは docker rm で削除します。
docker rm ubuntu-test自作イメージから作ったコンテナも同じように削除できます。
docker rm my-ubuntu-testdocker rm はコンテナ削除です。元になった ubuntu:24.04 や my-ubuntu:1.0 のイメージは削除されません。
- 削除されるもの:
ubuntu-testコンテナ - 削除されないもの:
ubuntu:24.04イメージ
イメージを削除する
不要になったイメージは docker rmi で削除します。
docker rmi my-ubuntu:1.0docker rmi はイメージ削除です。docker rm と名前が似ていますが、対象が違います。
イメージから作ったコンテナが残っている場合、先にコンテナを削除しないとイメージを削除できないことがあります。
コマンドごとに対象を整理する
どのコマンドが何を扱っているかを整理すると、次のようになります。
| コマンド | 主な対象 | 何をしているか |
|---|---|---|
docker version | Docker 本体 | 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 の操作が整理しやすくなります。