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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Docker

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

Q&A

解決済

4回答

704閲覧

DockerやVagrantを使うと何が楽になるのか?(サーバーサイドエンジニアにとって)

kadot

総合スコア27

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Docker

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

0グッド

0クリップ

投稿2020/05/13 05:51

編集2020/05/13 06:54

サーバーサイド言語を学び始めた者です。

よく「Dockerを使って開発した」と聞くことがありますが、
DockerやVagrantを使うと、開発者にとって何が楽になるのか?っていうことが落とし込めずにいます。

で、いろいろググったのですが、
「仮想環境ってなぜ必要なのか(DockerやVagrantでローカル開発環境を作ると何が楽なのか)」について、
今僕が持っている考えが正しいのか不安なので、正しいかどうか教えていただきたいです。

今の僕の仮想環境に対する認識(DockerやVagrantをサーバーサイドエンジニアが使うと何か楽になるのかについての認識)は、
ーーーーーーーーーーーーーーーーー
開発者同士の環境が違うと、ある開発者の環境では動くけど、ある開発者の環境では動かないということが起こって開発しづらい。

しかも、開発者たちの環境はWinだったり、Macだったりするのに、本番環境はLinuxだ。
開発環境がLinuxではないのは本番で動かない原因のひとつになる。

だから、開発者みんなの環境を本番環境と同じLinuxで揃えよう。
そうすれば開発中もみんな同じように動くし、本番に上げても同じく動く。

そういう開発環境を作るために、仮想化技術で仮想環境を作ろう。
ーーーーーーーーーーーーーーーーー
です。

ざっくりだとこういう理解で大丈夫そうでしょうか?
よろしくお願いします。

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

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

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

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

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

guest

回答4

0

「仮想環境 メリット デメリット」といったキーワードで検索すると
大量にヒットします。
概ね以下のようなメリットがあります。
1.コストを削減できる
・設置スペースの削減
・消費電力
・導入・運用コストの削減
2.BCP対策
3.最新のハードウェアを活用できる
4.古いOS環境も継続利用できる
デメリットもあるので、ご自分で調べてみて下さい。

投稿2020/05/13 06:16

kaina

総合スコア418

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

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

kadot

2020/05/13 06:56

ありがとうございます。 他の回答者さんにも返信させていただいたのですが、僕の質問がよくなかったかもしれません。 開発者にとって、開発し始めてから本番環境に上げるまでに、何が利点かということが自分のなかに落とし込めていません。(コストとか、スペースとかではなく) DockerやVagrantを使って開発すると、開発がどんなふうに楽になるのかということを理解したいという感じです。いろんな記事は読んだのですが、開発者にとって仮想化技術を使うと良いことって要するにどういうことなのかなと思っていまして。。 (これも良い聞き方ではないかもしれません。難しい。。) ※少し質問内容を編集しました。
guest

0

仮想環境の走りは、業務用マシンでの他プラットフォームの検証を行う目的で開発されたと理解しています。
その後、ハードウェアの高スペック化に伴い、物理リソースをOS単位で効率良く利用する目的でハイパーバイザ型のプラットフォームが標準化されてきました。
さらに、その後にアプリケーション単位で効率良くOSリソースを使用するDockerが使用されるシーンが増えてきました。
Dockerについては以下の利点もあると思っています。
・Dockerが動作するプラットフォームについて制限が少ない
・公開されているDockerイメージを利用することができる

Vagrantは仮想環境に対してアプローチするツールなので、今回のご質問内では性質が異なるのかな?って思います。

投稿2020/05/13 06:37

over

総合スコア4315

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

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

over

2020/05/13 07:00

すいません。ちょっと質問の意味を取り違えてました。 何が楽になるか?ですが、Dockerの場合、 ・開発プラットフォームの制限が少なくなる ・本番環境への導入が容易になる 等と理解しています。 Vargrantについては、GUI操作ではなく構成ファイルによる展開となるため、開発環境を複数展開する場合に同様の環境を容易に提供できる!というところでしょうか。
kadot

2020/05/13 07:08

ありがとうございます。 僕の質問がよくなかったかもしれないのですが、 もう少しサーバーサイドエンジニア目線で、業務がどう楽になるのかをカジュアルに落とし込みたいです。もっと小さい視点で、こんなことが楽!っていうのをわかりたいというか。 いや、でも、そもそも僕の仮想環境に対しての理解が少なく、ずれてる部分がありすぎるかもしれません。。すみません。 DockerとVagrantは性質が異なるのは知りませんでした。 勉強になります。ありがとうございます。 ※少し質問内容を変更しています。
kadot

2020/05/13 07:08

あ、追加の回答見る前に送ってしまいました!今から読みます!
kadot

2020/05/13 07:38

プラットフォームについてググったりしていて返信遅れました。すみません。 だいぶイメージが掴めてきた気がします。 ありがとうございます。 >開発プラットフォームの制限がなくなる →開発者の持ってるPCのOSが何であっても同じように開発できる。つまり、WinでもMacでもLinuxでも同じ環境が作れるから差異なく開発していくことができる。誰かは正常に動くけど、誰かは正常に動かないみたいなことが起きない。 >本番環境への導入が容易になる →開発環境(仮想環境)を本番環境と同じようにカスタマイズできるから、開発と本番に差異がない状態で開発できる。だから、開発したものをそのまま本番環境に入れるだけでよい可能性が高い。 というような認識であってますか?
over

2020/05/13 07:42

> 開発者の持ってるPCのOSが何であっても同じように開発できる。つまり、WinでもMacでもLinuxでも同じ環境が作れるから差異なく開発していくことができる。誰かは正常に動くけど、誰かは正常に動かないみたいなことが起きない。 「制限が少なくなる」と記載したのは、Windows等一部外れるものがあるだろう!という意味合いで記載しました。 私も他プラットフォームとの互換性について詳しく調査したことはないので詳細は調べていただければと存じます。 > 開発環境(仮想環境)を本番環境と同じようにカスタマイズできるから、開発と本番に差異がない状態で開発できる。だから、開発したものをそのまま本番環境に入れるだけでよい可能性が高い。 開発環境で作成したDocker Imageを本番環境にインポートするだけで実現できるとの理解でいます。
kadot

2020/05/13 08:07

制限が少なくなると記載していただいた意味を理解しました。 詳細は調べていきます。 なるほど…!それなら同じ環境が作れますね。 今回いただいた回答を元にさらに勉強を進めていきたいと思います。 ありがとうございました。
guest

0

ベストアンサー

開発者同士の環境が違うと、ある開発者の環境では動くけど、ある開発者の環境では動かないということが起こって開発しづらい。

しかも、開発者たちの環境はWinだったり、Macだったりするのに、本番環境はLinuxだ。
開発環境がLinuxではないのは本番で動かない原因のひとつになる。
だから、開発者みんなの環境を本番環境と同じLinuxで揃えよう。

ここまではまぁまぁあってると思います。

Linuxコンテナの場合、一度コンテナを作れば、Linuxカーネル互換性が保たれている限りは、その上で動くOS環境からライブラリまで全て同じものが再現できる(冪等性がある)というのが大きなメリットです。

コンテナはDockerfileで作成してリポジトリで管理されるため、ベースイメージとしてDocker Hubのようなパブリックリポジトリを利用するのであれば、数十キロバイトのDockerfileというテキストファイルをソース管理するだけで世界中の開発者が同じ環境を構築できます。

これは軽量で管理しやすく、各PC毎にミドルウェアのインストールをしたり開発に必須なツール(ビルド環境等も含められる)のバージョンを揃えたりという手間が無くなるという点で大きなメリットになります。

また、環境に変更があった場合も基本的にはDockerfileをVCSで管理しておけば変更履歴を追跡できます。

そうすれば開発中もみんな同じように動くし、本番に上げても同じく動く。

開発用のコンテナと本番用のコンテナは別、というのは普通にあります。

開発用のコンテナにビルドやデバッグ等に必要な開発ツール類が入っている場合、コンテナサイズが大きくなってしまうため、本番用のコンテナは少しでもサイズが小さい方が良いので別にするケースは考えられます。

アプリケーションのビルド目的だけならマルチステージビルドという機能がサポートされていますが、これも要は別コンテナをひとつのDockerfileから作ってるだけです。(ご参考

本番環境でもコンテナを使うのは単に「開発環境と合わせられる」というだけでなく、もしそういう使い方をしなかったとしても、軽量な実行環境が短時間で複製できるところにメリットがあるからです。

数台のWEBサーバーを負荷に応じて機敏に追加したり切り離したり、障害発生時のダウンタイムを短縮したりと、軽量であることはそれだけでもメリットになります。

投稿2020/05/13 08:40

gentaro

総合スコア8947

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

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

kadot

2020/05/13 09:53

そういうことなのですね! もやもやしてたところがとてもスッキリしました。 とても詳しく書いていただけてわかりやすかったです。 また、前回に続き回答いただけたことも嬉しいです。 ありがとうございました。
guest

0

私が思う仮想環境の利点は物理筐体を増やさずにマシンを増やせることです。

投稿2020/05/13 06:04

yutampp

総合スコア182

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

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

kadot

2020/05/13 06:56 編集

ありがとうございます。 すみません、僕の質問がよくなかったかもしれません。 開発者にとって、開発し始めてから本番環境に上げるまでに、何が利点かということが自分のなかに落とし込めていません。(コストとか、スペースとかではなく) DockerやVagrantを使って開発すると、開発がどんなふうに楽になるのかということを理解したいという感じです。いろんな記事は読んだのですが、開発者にとって仮想化技術を使うと良いことって要するにどういうことなのかなと思っていまして。。 (これも良い聞き方ではないかもしれません。難しい。。) ※少し質問内容を編集しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問