実行中のコンテナ内のファイルを変更する
このステップでは、実行中のコンテナ内のファイルを変更する方法を学びます。これは、設定ファイルの変更や、既に実行中のコンテナに一時的なスクリプトを追加するなど、デバッグ目的で役立ちます。
まず、alpine
よりも機能が豊富でシェルや一般的なユーティリティを含むubuntu
イメージを基にしたシンプルなコンテナを実行します。
docker run -d --name my-ubuntu ubuntu sleep 3600
このコマンドは Ubuntu コンテナをデタッチモード (-d
) で実行し、sleep 3600
コマンドを使用して 1 時間実行し続けます。参照しやすいようにコンテナにmy-ubuntu
という名前を付けました。
次に、docker exec
を使用して実行中のコンテナ内でシェルを取得します。
docker exec -it my-ubuntu /bin/bash
これでmy-ubuntu
コンテナの bash シェル内に入ります。プロンプトが変化し、コンテナ内にいることがわかります。
コンテナ内で、/tmp
ディレクトリに新しいファイルを作成しましょう。
echo "This is a test file." > /tmp/test_file.txt
ファイルが作成され、正しい内容が含まれていることを確認します。
cat /tmp/test_file.txt
This is a test file.
という出力が表示されるはずです。これで実行中のコンテナ内でファイルを作成し、書き込むことができたことが確認できました。
コンテナのシェルから出るには、単にexit
と入力します。
exit
これで LabEx VM のターミナルに戻ります。
docker cp
コマンドを使用して、実行中のコンテナとの間でファイルをコピーすることもできます。LabEx VM 上にファイルを作成し、コンテナ内にコピーしてみましょう。
まず、~/project
ディレクトリにlocal_file.txt
というファイルを作成します。
echo "This file is from the host." > ~/project/local_file.txt
このファイルをmy-ubuntu
コンテナの/tmp
ディレクトリにコピーします。
docker cp ~/project/local_file.txt my-ubuntu:/tmp/
docker cp
の形式はdocker cp <source_path> <container_name>:<destination_path>
またはdocker cp <container_name>:<source_path> <destination_path>
です。
ファイルがコンテナ内にコピーされたことを確認するため、再度コンテナのシェルに入ります。
docker exec -it my-ubuntu /bin/bash
コンテナ内で、/tmp
にlocal_file.txt
が存在するか確認します。
ls /tmp/
test_file.txt
とともにlocal_file.txt
が表示されるはずです。
コンテナ内でlocal_file.txt
の内容を表示してみましょう。
cat /tmp/local_file.txt
This file is from the host.
という出力が表示されます。
再度コンテナのシェルから出ます。
exit
最後に、コンテナをクリーンアップします。
docker stop my-ubuntu
docker rm my-ubuntu
このステップでは、docker exec
を使用してシェルを取得し標準的な Linux コマンドで実行中のコンテナ内のファイルを変更する方法と、docker cp
を使用してホストとコンテナ間でファイルをコピーする方法を実演しました。