箇条書きでめちゃくちゃ見づらいと思います。すみません。
余裕のある時に整理したいと思っています。
仮想マシンとコンテナ
- 仮想マシンは、ソフトウェアでコンピュータをまるまる再現する仕組み
起動に時間がかかり、重い。コンテナにはゲストOSがいらないため仮想マシンより軽量 - Dockerはコンテナの一つ。
起動が早いがある程度ホストと環境を共有する(OSはホストと同じ)。
ホストのとあるディレクトリをルートとして扱うようなイメージ。
Dockerでデプロイするまでの流れ
- ビルド成果物を本番サーバに配置することをデプロイと言う
- コンテナの実行はイメージをもとに行う。
イメージはDockerfileからdocker buildで作り、イメージからdocker runでコンテナを起動する。
この時、docker build時に指定されたプログラムを実行するようになっている。
また、docker buildにはオプションでタグ名を指定できる。 - docker run rmオプションでコンテナ終了時に自動的に削除するようにすると、コンテナがいっぱい貯まるのを防げる。
- アプリのコンテナ化と実行
イメージの作成→イメージのアップロード→イメージのダウンロード→コンテナの実行 - イメージをpullするサーバをEC2などにすることでクラウドにデプロイできる
- 本番環境でコンテナを動かす際は、DockerやDocker Composeを使わず、コンテナのプラットフォームを使うことが多い
- 本番環境でコンテナを使うメリット
環境構築済みのイメージをもとに実行するので動作が保証しやすい
一つのサーバ内で様々なアプリを動かしても競合しにくい - 複数代のサーバでたくさんのコンテナを使うのが良い
冗長化できる
オートスケールにはコンテナオーケストレーションのサービスを使う(EC2やKubernetesなど) - HerokuなどのPaaS, AWS App Runner, Google Cloud Runなどを使うと、イメージのビルドからデプロイまで自動化できる
単純なアプリ(自力でDockerfileを書く必要がない)の場合はこれらを使うのもいい - docker composeは、コンテナの設定がまとめて書かれたyamlファイルをもとにコンテナを起動する仕組み(いちいちdockerコマンドで設定する必要がなくなるので楽)
- RUNで指定したコマンドはイメージ作成時に実行され、CMDもしくはENTRYPOINTで指定したコマンドはコンテナ開始時に実行される
コメント