こんにちは!いつもブログを読んでいただき、ありがとうございます。
前回の記事では「2.06 コンテナのまとめ①」として、コンテナの仕組み・仮想マシンとの違い・namespace・cgroupsを解説しました。まだご覧になっていない方は先にそちらをどうぞ!
後半の今回は Dockerコンテナの操作コマンドとDockerfileの書き方 を中心に解説します。
「Dockerのコマンドが多すぎて覚えられない…」という方、大丈夫です!この記事では試験に出やすいコマンドに絞って整理しているので、まずは 太字のコマンドと主要オプション だけ押さえることを目標にしましょう。
LinuC 201全体の学習ロードマップはこちらにまとめています♪
まずは、この主題で絶対に外せない「キーワード」を確認しましょう。
| 項目 | 内容 |
|---|---|
| 主題番号 | 2.06.2 Dockerコンテナとコンテナイメージの管理 |
| 重要度 | 3(5段階中) |
| 頻出キーワード | docker run、docker ps、docker images、docker build、docker pull、docker exec、Dockerfile |
重要度3は「試験全体のなかで出題比率が高め」という意味です。docker run のオプションとDockerfileのインストラクションが特によく出るので、ここを重点的に押さえましょう!
Dockerのコマンドはイメージ操作とコンテナ操作の2つに大別されます。まずこの分類を頭に入れてから、個別のコマンドを見ていきましょう。
| 種別 | 主なコマンド |
|---|---|
| イメージ操作 | docker pull・docker images・docker rmi・docker build |
| コンテナ操作 | docker run・docker ps・docker stop・docker rm・docker exec・docker logs |
★ここがポイント!
rmiは「remove image(イメージ削除)」、rmは「remove(コンテナ削除)」です。iがあるかどうかで区別しましょう!
📝 補足:現在のDockerエンジンは内部で
containerdなどのコンテナランタイムを利用しています。ただし LinuC試験では従来のdockerコマンドの理解を優先すれば問題ありません!
イメージの取得・確認・削除
# Docker Hubからイメージを取得する
docker pull nginx
docker pull ubuntu:22.04 # タグ(バージョン)を指定する場合
# ローカルのイメージ一覧を表示する
docker images
docker image ls # 新しい書き方(同じ意味)
# イメージを削除する
docker rmi nginx
docker rmi ubuntu:22.04
📝 試験ポイント:
docker pullでタグを省略すると、自動的にlatest(最新版) が取得されます。ただしlatestは必ずしも最新版を保証するものではないため、実務ではバージョンを明示して指定するのが推奨されます。実行中のコンテナが使っているイメージは削除できません。
📝 補足:現在は
docker image lsのようにオブジェクトを明示する書き方が推奨されていますが、試験では従来のdocker imagesも頻出です。どちらの書き方も読めるようにしておきましょう!
docker run — コンテナを起動する
docker run は試験で最も問われるコマンドです。毎回新しいコンテナを作成して起動するという点を押さえておきましょう(停止中の既存コンテナを再起動するのは docker start です)。オプションの意味をしっかり覚えましょう!
docker run nginx # フォアグラウンドで起動
docker run -d nginx # バックグラウンドで起動
docker run -it ubuntu:22.04 /bin/bash # 対話的にbashを起動
docker run --name mycontainer nginx # コンテナに名前をつける
docker run -p 8080:80 nginx # ポートマッピング(ホスト:コンテナ)
docker run -v /data:/var/www/html nginx # ボリュームマウント(ホスト:コンテナ)
docker run --rm nginx # 停止後にコンテナを自動削除
docker run 主要オプション早見表(ここ、試験に出ます!)
| オプション | 意味 |
|---|---|
-d | バックグラウンド(デタッチ)で実行 |
-it | 対話的なターミナルを割り当てる(-i + -t の組み合わせ) |
--name | コンテナに名前をつける |
-p ホスト:コンテナ | ポートマッピング(ホスト:コンテナの順番。逆にしないよう注意!) |
-v ホスト:コンテナ | ボリュームマウント |
--rm | コンテナ停止後に自動削除 |
-e | 環境変数を設定する |
★ここがポイント!
-itはセットで使うことが多いオプションです。-i(標準入力を保持)と-t(疑似ターミナルを割り当て)の組み合わせで、コンテナの中でコマンド操作ができるようになります。
📝 試験ポイント:指定したイメージがローカルに存在しない場合、
docker runは自動的にdocker pullを実行してからコンテナを起動します。
docker ps — コンテナ一覧の確認
# 実行中のコンテナだけ表示する
docker ps
# 停止中を含む全コンテナを表示する(試験頻出!)
docker ps -a
📝 試験ポイント:
docker psだけでは実行中のコンテナしか表示されないため、停止中のコンテナを確認したいときは必ず-aをつけましょう。
コンテナの停止・削除
# コンテナを正常停止する(SIGTERMを送る)
docker stop コンテナ名
# コンテナを強制停止する(SIGKILLを送る)
docker kill コンテナ名
# コンテナを削除する(停止済みのもののみ)
docker rm コンテナ名
# 実行中のコンテナに入る
docker exec -it コンテナ名 /bin/bash
# コンテナのログを表示する
docker logs コンテナ名
# リアルタイムでログを流す(tailのような動作)
docker logs -f コンテナ名
⚠️
stopとkillの違い:docker stopは SIGTERM で正常終了を待ちます。docker killは SIGKILL を送って即座に強制終了します。試験でこの違いが問われることがあります。
📝 試験ポイント:
docker execはすでに起動中のコンテナに対して使います。新しくコンテナを起動するdocker runとの違いをしっかり区別しましょう。
Dockerfile は、独自のコンテナイメージを作るための設計書です。
# ベースイメージを指定する(必須・最初に書く)
FROM ubuntu:22.04
# コンテナビルド時にコマンドを実行する(パッケージのインストールなど)
RUN apt-get update && apt-get install -y nginx
# ファイルをコンテナ内にコピーする
COPY index.html /var/www/html/
# コンテナが使用するポートを明示する
EXPOSE 80
# コンテナ起動時に実行するコマンドを指定する
CMD ["nginx", "-g", "daemon off;"]
Dockerfileの主要インストラクション(ここ、試験に出ます!)
| インストラクション | 役割 |
|---|---|
FROM | ベースイメージの指定(必須・最初に書く) |
RUN | ビルド時にコマンドを実行(レイヤーが追加される) |
COPY | ホストのファイルをイメージにコピー |
CMD | コンテナ起動時のデフォルトコマンド(docker run の引数で上書き可能) |
ENTRYPOINT | コンテナ起動時に必ず実行されるコマンド(docker run --entrypoint で上書き可能だが、通常は固定コマンドとして使われる) |
EXPOSE | 使用するポートを明示する |
★ここがポイント! CMD と ENTRYPOINT の違い
CMD:docker runのコマンド引数で上書きできるENTRYPOINT:docker run --entrypointオプションで上書きできるが、通常は固定コマンドとして使われる試験では「CMDは上書き可能、ENTRYPOINTは原則固定」という対比でよく問われます!
docker build — イメージをビルドする
# カレントディレクトリの Dockerfile からイメージをビルドする
docker build -t myapp:1.0 .
# ↑タグ名 ↑Dockerfileのある場所(カレントディレクトリ)
📝 実務ポイント補足(試験範囲外だけど知っておくと理解が深まります)
- ファイルコピーには
ADDよりCOPYが推奨されています(意図が明確で予測しやすいため)RUNを複数行に分けるとレイヤーが増えてイメージが大きくなるため、&&でまとめて書くのが一般的です試験では深く問われないので、「そういう考え方がある」程度の理解でOKです!
Dockerのコマンドは名前が似ているものが多く、ひっかけ問題の宝庫です。問題集で一度アウトプットしておくと定着度がぐっと上がりますよ!
【PR】▶ スピードマスター LinuCレベル2問題集(白本)
リンク(※ここに白本のアフィリエイトリンクを挿入)
過去問を解いていて「ここ、引っかかりそう!」と感じたパターンをまとめました。試験直前に見直してくださいね。
| # | 間違いパターン | 正しい理解 |
|---|---|---|
| 1 | 「docker ps で停止中のコンテナも表示される」 | ❌ 表示されるのは実行中のみ。停止中も見るには -a が必要 |
| 2 | 「docker rm でイメージを削除できる」 | ❌ docker rm はコンテナの削除。イメージの削除は docker rmi |
| 3 | 「docker exec で新しいコンテナを起動できる」 | ❌ docker exec は実行中のコンテナに命令する。新規起動は docker run |
| 4 | 「docker stop は即座に強制終了する」 | ❌ stop はSIGTERMで正常終了を待つ。即座に強制終了は docker kill |
| 5 | 「CMDに指定したコマンドは上書きできない」 | ❌ CMD は docker run の引数で上書き可能。原則固定なのは ENTRYPOINT |
| 6 | 「docker pull でタグを省略するとダウンロードされない」 | ❌ タグを省略すると latest(最新版) が自動的に取得される |
| 7 | 「docker run はローカルにイメージがないと失敗する」 | ❌ ローカルになければ自動的に docker pull してから起動する |
| 8 | 「docker run で停止中の既存コンテナを再起動できる」 | ❌ docker run は新しいコンテナを作成して起動する。既存コンテナの再起動は docker start |
私がメインで使っている参考書と問題集です。よければ一緒に勉強していきましょう(笑)
【PR】▶ あずき本(Linux教科書 LinuCレベル2 Version 10.0対応) 概念や仕組みをしっかり理解したいときの辞書代わりに。まずここで基礎を固めます。
リンク
【PR】▶ スピードマスター LinuCレベル2問題集(白本) 本番に近い難易度で問題演習したいときに。あずき本で理解したあとに使うと定着度が上がります。
リンク
お疲れ様でした!今回のポイントをおさらいしましょう。
Dockerの主要コマンド
| コマンド | 何をするか |
|---|---|
docker pull | イメージを取得する |
docker images | イメージの一覧を表示する |
docker rmi | イメージを削除する |
docker build -t 名前 . | Dockerfileからイメージをビルドする |
docker run [オプション] イメージ名 | コンテナを起動する |
docker ps / docker ps -a | コンテナ一覧(実行中のみ/全件) |
docker stop / docker kill | 正常停止(SIGTERM)/ 強制停止(SIGKILL) |
docker rm | コンテナを削除する |
docker exec -it コンテナ名 bash | 実行中コンテナに入る |
Dockerfileの主要インストラクション
| インストラクション | 役割 |
|---|---|
FROM | ベースイメージを指定(必須) |
RUN | ビルド時にコマンドを実行 |
COPY | ファイルをイメージにコピー |
CMD | 起動時のデフォルトコマンド(上書き可能) |
ENTRYPOINT | 起動時に必ず実行されるコマンド(--entrypoint オプションで上書き可能だが原則固定) |
コンテナのまとめ①もあわせて復習しておくと、知識がしっかりつながります!
これで主題2.06「コンテナ」は2記事完走です!LinuC 201の全主題を学び終えましたね。あとはPing-tでしっかり問題演習を積んで、合格を目指しましょう!
皆さんにとって、今日も素敵な1日になりますように!
参考:LPI-Japan 公式試験範囲 https://linuc.org/linuc2/range/201.html
※本記事はLinuC レベル2 Version 10.0 の出題範囲をもとに作成しています。