「自分のPCでは動くのに、他の環境だと動かない…」。これは開発者共通の悩みです。特にクラウドサービスでバッチ処理を実行する際には、プログラムを「コンテナ」化することが必須となりつつあります。
この「コンテナ」を作成する標準技術がDockerです。Dockerは、アプリと必要なライブラリ等をひとまとめにし、どんな環境でも同じように動く一貫性を実現します。
この記事は、理論よりまず手を動かしたいIT技術者向けの、コマンド中心の速習チュートリアルです。インストールからコンテナ実行まで、一連の流れを手っ取り早く体験してみましょう。
環境構築 - Dockerのインストール
Dockerのインストールはyumリポジトリから実行します。
以下の手順はすべてrootユーザーで実行します。
Step1. リポジトリの設定、Dockerのインストール
yumリポジトリを利用してインストールします。
yum update
yum install docker
Step2. 利用ユーザーのdockerグループへの追加
セキュリティ上、Dockerコマンドはroot権限を持つユーザーか、dockerグループに所属するユーザーしか実行できません。毎回sudoを付ける手間を省くため、現在のユーザーをdockerグループに追加します 。
usermod -a -G docker <利用ユーザー>
Step3. Dockerイメージの格納先変更
Dockerイメージはデフォルト設定だと/var/lib/dockerに格納されています。しかし運用を続けると数十GB以上に増加して空きディスクを圧迫することがあるため、他の大容量ディスク(NFSなど)に格納先を変更することを推奨します。
Dockerイメージの格納先は/etc/docker/daemon.jsonファイルのdata-root設定で指定できます。(ファイルが存在しない場合は新規作成します)
/etc/docker/daemon.json
{
"data-root": "<格納ディレクトリ>"
}
Step4. Dockerサービスの自動起動設定
Dockerサービスを起動時に自動で立ち上がるように設定します 。
systemctl enable docker
運用
Dockerサービスの起動、停止
サービス起動
service docker start
サービス停止
service docker stop
サービス状態の確認
service docker status
基本要素 - Dockerイメージの取得と管理
Dockerイメージは、アプリケーションを実行するために必要なものすべて(コード、ランタイム、ライブラリなど)を含む、読み取り専用のテンプレートです 。コンテナは、このイメージから作成される実行中のインスタンスです
ローカルイメージの管理
一覧表示
docker imagesコマンドで、ローカルに保存されているイメージの一覧を確認できます 。
docker images
イメージのクリーンアップ
不要になったイメージを削除することで、ディスク容量を節約できます。
イメージの削除
docker rmiコマンドで、指定したイメージを削除します 。
docker rmi <イメージ名>
注意点として、あるイメージに複数のタグが付いている場合、rmiコマンドでタグを指定して削除しても、そのタグが削除されるだけでイメージ本体は残ります。イメージ本体が削除されるのは、そのイメージを指す最後のタグが削除されたときです 。コンテナが使用中のイメージは、-f(--force)オプションを付けない限り削除できません 。
不要なイメージの一括削除
開発過程で、どのコンテナからも参照されなくなった中間イメージ(dangling image)が溜まることがあります。これらはdocker image pruneコマンドで安全に一括削除できます 。
docker image prune
さらに、停止中のコンテナからも使用されていないすべてのイメージを削除するには-aオプションを使います。
docker image prune -a
独自環境の構築 - Dockerfileによるイメージビルド
Dockerfileは、カスタムDockerイメージを自動でビルドするための手順を記述したテキストファイルです 。これにより、誰が実行しても同じ環境を再現できます。
Dockerfileの構造
ここでは、シンプルなNode.jsアプリケーションをコンテナ化するDockerfileを例に、その構造を解説します。
Dockerfile
# 1. ベースイメージの指定
FROM <イメージ名>
# 2. コマンド実行:パッケージのインストールなど
# (例)RUN yum install -y python3
RUN <コマンド>
# 3. ローカルからファイルのコピー
# ワイルドカードの使用も可
COPY <コピー元ディレクトリ、ファイル> <コピー先ディレクトリ>
# 4. コンテナ起動時に実行するスクリプトの定義
# (例)ENTRYPOINT ["/root/init.sh"]
ENTRYPOINT ["<実行スクリプト>"]
| 命令文 | 書式 | 処理 |
|---|---|---|
| FROM | FROM <イメージ名> | ベースとなるイメージをリポジトリからダウンロードする |
| RUN | RUN <コマンド> | コマンドを実行する。yumコマンドでパッケージインストールも可 |
| COPY | COPY <コピー元ディレクトリ、ファイル> <コピー先ディレクトリ> | ローカルからファイルをコピーする |
| ENTRYPOINT | ENTRYPOINT ["<実行スクリプト>"] | コンテナ実行時に呼び出されるスクリプトを指定する |
ビルドの実行:docker build
Dockerfileがあるディレクトリで以下のコマンドを実行すると、イメージがビルドされます。
docker build ./ -t <イメージ名>
コンテナの実行と管理
イメージをビルドしたら、次はそのイメージからコンテナを起動し、管理します。ここでは開発ワークフローに沿って、コンテナのライフサイクルを管理するコマンドを解説します。
コンテナの起動:docker run
docker runは、イメージからコンテナを生成し起動するための中心的なコマンドです 。開発で頻繁に使用する主要なオプションは以下の通りです。
docker run -it <イメージ名> /bin/bash
実行コンテナに環境変数を渡す
-eオプションで変数名と値を指定します。
docker run -e <変数名>=<値> -it <イメージ名> /bin/bash
ホストOSの環境変数を直接渡すことも可能です。
docker run -e <環境変数名> -it <イメージ名> /bin/bash
コンテナの監視と確認:docker ps
現在実行中のコンテナの一覧を表示します 。
docker ps
停止中のコンテナも含め、すべてのコンテナを表示します。これは、意図せず残ってしまったコンテナを見つけるのに役立ちます 。
docker ps -a
コンテナのログ確認:docker logs
コンテナのログ(標準出力・標準エラー出力)を表示します 。
docker logs <CONTAINER ID>
tail -fのように、ログをリアルタイムでストリーミング表示します 。
docker logs -f <CONTAINER ID>
コンテナの状態管理
docker stop
実行中のコンテナを正常に停止させます(SIGTERMシグナルを送信) 。
docker stop <CONTAINER ID>
docker start
停止しているコンテナを起動します 。
docker start <CONTAINER ID>
docker kill
stopで停止しないコンテナを強制的に終了させます
docker kill <CONTAINER ID>
コンテナの削除:docker rm
停止しているコンテナを削除します。
docker rm <CONTAINER ID>
実行中のコンテナを強制的に削除します
docker rm -f <CONTAINER ID>
本稿では、Dockerのインストールからイメージの管理、Dockerfileによるカスタムイメージのビルド、そしてコンテナの実行と管理まで、開発者が最初に知るべき一連のワークフローを駆け足で解説しました。
ここで紹介したコマンドとベストプラクティスは、Dockerを使いこなすための強固な土台となります。特に、ビルドキャッシュを意識したDockerfileの記述や.dockerignoreの活用は、日々の開発効率を大きく向上させるでしょう。
次のステップとして、ぜひご自身のプロジェクトをコンテナ化することに挑戦してみてください。このガイドが、あなたのDockerの旅の第一歩となれば幸いです。
さらに詳しい情報やチュートリアルについては、Xアカウントをフォローしてください。