はじめに
コンテナは、プロセスをそのファイルシステムビューや実行時設定とともにパッケージ化する技術です。Docker のようなコンテナエンジンを使用すると、イメージのビルド、イメージからのコンテナ実行、ストレージの接続、ログの表示、実行中のコンテナ内でのコマンド実行、不要になったコンテナの削除などを行うことができます。
この実験では、LabEx 環境に既にインストールされている Docker エンジンを使用します。パブリックレジストリからのイメージプルを避けるため、キャッシュされたローカルベースイメージから小さな練習用イメージをビルドします。エンジンの確認、イメージのビルド、バインドマウントを使用した名前付きコンテナの実行、ログと生成されたファイルの確認、コンテナ内でのコマンド実行、そして実行中のコンテナのクリーンアップまでの一連の流れを体験します。
コンテナエンジンの確認
このステップでは、Docker が利用可能であることを確認し、ローカルイメージを調査します。コンテナのワークフローは、使用しているエンジンと既に存在するイメージを把握することから始まります。この実験では、キャッシュされたベースイメージを使用することで、外部からのプルを回避します。
プロジェクトディレクトリに移動します。
cd /home/labex/project
Docker のバージョンを確認します。
docker --version
ローカルイメージの一覧を表示します。
docker image ls
gcr.io/k8s-minikube/kicbase:v0.0.37 が表示されるはずです。これは、この実験でローカルビルドのベースとして使用されるイメージです。
ローカルイメージの確認とビルド
このステップでは、用意された Dockerfile を確認し、ローカルイメージをビルドします。イメージは再利用可能なファイルシステムとメタデータのテンプレートであり、コンテナはイメージから作成された実行中のインスタンスです。
Dockerfile を表示します。キャッシュされたベースイメージには独自のデフォルトエントリーポイントがあるため、ENTRYPOINT行が重要になります。この実験では、コンテナが練習用スクリプトを直接開始するように新しいエントリーポイントを設定します。
cat Dockerfile
イメージをビルドし、lfcs-container-demo:1.0 というタグを付けます。-t オプションで名前とタグを指定し、最後の . は現在のディレクトリをビルドコンテキストとして使用することを Docker に伝えます。
docker build -t lfcs-container-demo:1.0 .
ビルド成功後、イメージを確認します。
docker image ls lfcs-container-demo:1.0
名前付きコンテナの実行
このステップでは、イメージをデタッチモード(バックグラウンド実行)でコンテナとして実行します。コンテナには lfcs-demo という名前を付け、バインドマウントを使用してホスト側の /home/labex/project/container-data をコンテナ内の /data に接続します。
コンテナを実行します。
docker run -d --name lfcs-demo -v /home/labex/project/container-data:/data lfcs-container-demo:1.0
コンテナ ID を表示します。
docker ps -q --filter name=lfcs-demo
実行中のコンテナを一覧表示し、lfcs-demo が存在することを確認します。
docker ps --filter name=lfcs-demo
ログの確認とコマンドの実行
このステップでは、実行中のコンテナを調査します。ログにはコンテナ化されたプロセスが出力した内容が表示されます。バインドマウントを使用することで、コンテナがホスト側にデータを書き込んでいることを確認できます。docker exec を使用して、実行中のコンテナ内でコマンドを実行します。
コンテナがログを書き込むまで少し待ちます。
sleep 3
コンテナの最近のログを読み取ります。
docker logs --tail 5 lfcs-demo
バインドマウントを通じて書き込まれたファイルを確認します。
tail -n 5 container-data/container-output.log
コンテナ内でコマンドを実行し、マウントされたデータがコンテナ内から見えることを確認します。
docker exec lfcs-demo sh -c 'test -f /data/container-output.log && echo container-data-visible'
コンテナの停止と削除
このステップでは、実行中のコンテナをクリーンアップします。コンテナを停止するとプロセスが終了します。停止したコンテナを削除するとコンテナオブジェクトは消去されますが、ビルドしたイメージは削除されません。
コンテナを停止します。
docker stop lfcs-demo
停止したコンテナを削除します。
docker rm lfcs-demo
クリーンアップを確認します。docker ps -a は停止中のものを含むすべてのコンテナを表示します。削除後、lfcs-demo が表示されないことを確認してください。
docker ps -a --filter name=lfcs-demo
まとめ
Docker の基本的なワークフローを一通り実践しました。エンジンの確認、キャッシュされたローカルベースイメージの使用、タグ付きイメージのビルド、バインドマウントを使用した名前付きデタッチコンテナの実行、ログの確認、コンテナ内でのコマンド実行、そしてコンテナの停止と削除を行いました。これらは、より高度なエンジン設定やオーケストレーションのトピックに進む前に理解しておくべき、コンテナ操作の核心部分です。



