TOP
前: ホストOS上の隔離空間であるということ
次: どこでも同じものが動くということ
VMの場合、ファイルシステムに保存したデータは再起動してもそのまま残り続けます。また、IPアドレスなども固定にすることが多いと思います。一方、コンテナの場合、それらはすべて一時的なものです。
-
以下コマンドでコンテナを作成してください。
sudo docker run -d centos:8 /bin/sh -c "sleep 11111" -
以下コマンドでコンテナが動いていることを確認してください。
sudo docker ps
-
以下コマンドでコンテナにログインしてください。
sudo docker exec -it {1つ目コンテナID} sh -
コンテナのホスト名、IPアドレスを確認してください。
hostname ip a
-
以下のコマンドで/etc/hostnameを更新し、通常のOSなら次回起動時にホスト名が変わる様に設定してください。
echo my-name-is-container > /etc/hostname cat /etc/hostname
-
コンテナからログアウトしてください。
exit -
コンテナを停止してください。
sudo docker stop {1つ目コンテナID}
ここで1つ目のコンテナのリソースは開放されています。ただ、このままコンテナを再起動するとまた同じIPアドレスが振られてしまいます。IPアドレスの変化が見えやすい様に、コンテナを1つ起動します。
-
新しいコンテナを作成してください。
sudo docker run -d centos:8 /bin/sh -c "sleep 22222" -
停止したコンテナを再起動してください。
sudo docker restart {1つ目コンテナID} -
コンテナが2つ動いていることを確認してください。
sudo docker ps
-
1つ目のコンテナにログインして情報を確認してください。ホスト名はもとのコンテナIDのままで、IPアドレスも変わっており、修正したファイルの内容も失われているはずです。
sudo docker exec -it {1つ目コンテナID} sh hostname ip a cat /etc/hostname exit
-
コンテナをすべて削除してください。
sudo docker rm -f {1つ目コンテナID} {2つ目コンテナID}
このように、コンテナのファイルシステムは一過性の領域であるため注意が必要です。また、IPアドレスは使い回されるため、特定のコンテナに接続したい場合、IPアドレスだと意図したコンテナに接続できない場合があります。コンテナを扱う上ではこれらコンテナリソースは一時的なものであるということを十分に意識してシステムを構築します。たとえば消えて困るデータはコンテナ外のボリュームに保存したり、アクセスはIPアドレスではなく名前解決可能なホスト名にします。