質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

941閲覧

Docker は VirutualBoxと比べて何が嬉しいのか

golira13

総合スコア1

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2020/06/18 02:25

前提・実現したいこと

Dockerで作りかけのウェブサービスを、前任チームが辞めた後に引き継いでいます。
(未リリースで、8割程度の完成度らしく、ほぼ引き継ぎなく辞めたので資料を読んでいる状態です。社内にDockerを知っている人もおらず、困っています。)
VirutalBox等でChef/Ansibleを使ったことはあります。

Docker、とても流行ってるという認識ですが、利点は下記のようなものでしょうか。
(「コンテナ仮想化はハイパーバイザー不要で動かすために隔離環境で…」みたいな説明しか見つけられず、何が嬉しいのかイマイチわかりませんでした)

以下のように認識してるのですが、大きな誤解とかあればご指摘いただけると幸いです。。

Dockerの利点(と私が認識できるもの)

  • ファイルサイズがちいさく、CPUやメモリ負担も軽い。
  • DockerfileとDocker-Imageにより、書く部分が小さい : VirtualBoxでも、元VMイメージ頑張れば…?
  • 再投入の冪等性 : 同じDockerfileからは同じイメージが生成される。
  • Dockerfileに書くことで「基本環境」と「特定アプリ用環境」が楽
  • 十分軽量なので、本番環境でも使うことができる

欠点

  • mac/win環境では動かないために、linuxのVMが必要
    • そのためにVirtualBoxより(1個だけDockerイメージ走らせるような特殊状況では)重くなる
  • 実は冪等とはいえない。apt-get とか書いてる場合は、そのリポジトリが更新されたら同じイメージじゃないよね

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

良し悪しはやりたいことによって大きく変わると思うので、ここでは良し悪しに言及せずに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/18 10:07

編集2020/06/18 10:19
comefigo

総合スコア1045

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

golira13

2020/06/19 03:35

ご丁寧な回答ありがとうございます!以下、一点だけ教えて下さい。。。 > > mac/win環境では動かないために、linuxのVMが必要 > どちらも動きます mac環境では、hyperkitと呼ばれる軽量なlinuxのVM上で動いてる(それを Docker for Mac と呼称している) と認識していたのですが… https://qiita.com/yuki_ycino/items/cb21cf91a39ddd61f484 すみません、私の書き方も良くなくて、「VMが必要」の部分を「自分で Linux VM(VirtualBox等)を用意する必要がある」みたいな書き方ですね。
golira13

2020/06/19 05:00

質問になってなかったです。 なので、『win/mac 環境では(Dockerが用意する)VMは必要』かと思ったのですが、後段に書いていただいた > WSL2モードではなくかつLinuxコンテナを扱う場合は とのことなので、WindowsではVMなしでも動作するのでしょうか。 また、Macでは実際にはDocker上の軽量VMで動いているが、意識する必要はない…ということなのでしょうか
comefigo

2020/06/19 06:17

VMの定義によりますね・・・ 広義でWSL2もVMになりますね。 > とのことなので、WindowsではVMなしでも動作するのでしょうか。 Linuxコンテナを動かすのであればVM(WSL含めて)が必要になりますね。ただし、Windowsコンテナを使用する場合でプロセス分離モードの場合はVMは不要になるはず(試していない) https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage-containers/hyperv-container > Macでは実際にはDocker上の軽量VMで動いているが、意識する必要はない…ということなのでしょうか 本番でその構成で行くとは思わないですが、開発用途であれば気にすることはないかと思います。 スペック上(メモリ不足など)の問題で使用できないことはありえるかもしれませんが・・・
comefigo

2020/06/19 06:44

書き忘れていましたが、もし、サービスのリリースが近いのであれば無理にDocker化する必要はないかと思います。その前段階十分に時間があるのであれば、書籍や勉強会、動画などで理解されてから実践投入されたほうが良いかと思います。すでにAnsibleやChefなどをつかっているようなので、きっと好きになると思いますw 有料ですが、ちょうどこういうのも開催予定なので、検討してみるのもよいかと思います。 https://academy.impress.co.jp/event/cloudnative202006/
golira13

2020/06/24 07:19

色々理解しました。ありがとうございます!
comefigo

2020/06/24 12:01

健闘祈ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問