コンテナについて学んだこと

2024年3月15日

自分用の備忘メモです。

コンテナ上のデータ

コンテナ上で作成したファイルは、コンテナ再起動で消えてしまうと思っていたが、消えないらしい(コンテナ自体の削除によって消えるらしい)

ストレージ

ホスト(Dockerが動いているホスト)のディレクトリを、コンテナ上にマウントし、永続ストレージとして利用できる

ネットワーク

Podman やDocker はデフォルトでLinux bridge を使用したコンテナネットワークを作成する。
コンテナはホストと異なるIP アドレス、ルーティングテーブル等を持つ
同じネットワークに繋がったコンテナ同士は通信可能

コンテナ⇒ ホスト外部への通信

コンテナ⇒ホスト外部 への通信時、コンテナのIP アドレスはホストのアドレスに変換されて外部に流れる

ホスト外部⇒ コンテナへの通信

コンテナ起動時にホストのポート、コンテナポートをひもづける-p オプションをつけると直接通信可能となる

(追記)コンテナに変更を加えたいとき

たとえば、コンテナ上のアプリケーションに変更を加えたいときは以下のステップとなります。

①現在、稼働しているコンテナ上でアプリケーションの設定を変更する

②そのコンテナからコンテナイメージを作成する 

 → 別の環境でもアプリケーション設定に変更が加えられたコンテナを起動できるようになる

(追記)コンテナ上のデータとコンテナイメージの関係

(質問)

たとえば、Webアプリケーション用のコンテナがあったとします。そのコンテナ内にWebアプリケーション用の画像データが保管されていたとします。そのコンテナにからコンテナイメージを作成した場合、コンテナイメージに画像データは含まれるか?

(回答)

含まれます。ただし、コンテナイメージのサイズが大きくなってしまうため注意が必要です。コンテナイメージの配布やデプロイメントの速度にも影響を与える可能性が高くなります。

コンテナ内に配置するデータとしては以下くらいに留めるのがよいかと思います。

  • 一時的なデータ:キャッシュやセッション情報など、一時的なデータでコンテナの再起動時に失っても問題ないものは、コンテナ内に置くことがあります。
  • アプリケーション固有のデータ:アプリケーションの動作に必要な設定ファイルやスクリプトなど、コンテナのイメージ内に含めておくことが一般的です。