良し悪しはやりたいことによって大きく変わると思うので、ここでは良し悪しに言及せずにDockerの特徴や事例について述べさせて頂きます。
特徴
そもそもDocker(コンテナ)と従来のVMとの仮想化技術が異なります。
ざっくり言えばVMはマシンそのもの(ハードウエア)をエミュレーションするのに対して、コンテナはアプリケーションが動作するために必要なファイル群(ファイルシステム、ミドルウェア、アプリ)をコンテナイメージに詰め込んで、ホスト上であだかも独立した環境(CentOS、Ubuntuなど)で実行されるプロセスのことです。
コンテナランタイムによってはセキュリティ向上を図るために軽量なVM内にコンテナを動かすものもありますが、ココでは割愛します。詳細はこちらを参照ください
事例
コンテナは前述のようにアプリケーションに必要なミドルウェア、アプリケーションそのものなどをコンテナイメージに閉じ込めることができるので、アプリケーション開発時に常に本番同等の環境で開発やテストできるので、環境に起因するを早期発見できる。
コンテナイメージそのものをイメージレジストリで管理することができるので、開発環境の共有が容易で、環境の差異による問題も減る。
例えばミドルウェアがjavaで、java8のコンテナイメージ、java9のコンテナイメージと各バージョンのコンテナイメージがあったとして、java8やjava9の環境をそれぞれ容易に同一ホスト上に共存させて、動作確認ができます。
その他にもいろいろありますが、事例はひとまずこのぐらいにします。
何かあればご質問頂ければ追加で回答させて頂きます。
認識についての訂正
ファイルサイズがちいさく、CPUやメモリ負担も軽い。
おおよそそのような認識で問題ないです。
ちょうど先日にいい記事がありましたので、共有します。
https://qiita.com/zembutsu/items/24558f9d0d254e33088f
再投入の冪等性 : 同じDockerfileからは同じイメージが生成される
実は冪等とはいえない。apt-get とか書いてる場合は、そのリポジトリが更新されたら同じイメージじゃないよね
Dockerfileの作り方次第で、同じものにならないこともありえます。
たとえば、yum update
を実行するようにしていれば、コンテナイメージを作るタイミングで結果が変わってきます。
これはVMでも同じことだと思いますので、欠点ではないと思います。
Dockerfileに書くことで「基本環境」と「特定アプリ用環境」が楽
上記のふたつの環境とは何を指しているのかがわからないので、割愛します。
mac/win環境では動かないために、linuxのVMが必要
どちらも動きます。
そのためにVirtualBoxより(1個だけDockerイメージ走らせるような特殊状況では)重くなる
Docker Desktop(Windows版)でWSL2モードではなくかつLinuxコンテナを扱う場合は、Hyper-VにDocker専用の軽量なVMが稼働しますが、それでもVirtualBoxよりかはパフォーマンスがいいと思います。(VirtualBox上に何を載せるかによるかと思います)
質問のようにWebサービスでコンテナとVMのどちらを使うかとなると私見としてはコンテナ一択です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/19 03:35
2020/06/19 05:00
2020/06/19 06:17
2020/06/19 06:44
2020/06/24 07:19
2020/06/24 12:01