実現したいこと
仮想環境という概念や、dockerについて理解する。
前提
環境構築について調べていたのですが、dockerや仮想環境、コンテナといった言葉が多く出てきて理解ができていません。
発生している問題
dockerとは何なのか、このツール(?)を使うことでどうすることができるようになるのか?
仮想環境とは何なのか、普通の(?)環境とは何が違うのか、そしてなぜこの環境にした方が良いのか?
コンテナとは何なのか
補足
初心者につきなにも分かっていない質問になってしまい申し訳ありませんが、説明いただけると大変嬉しいです!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
仮想環境という概念や、dockerについて理解する。
環境構築について調べていたのですが、dockerや仮想環境、コンテナといった言葉が多く出てきて理解ができていません。
「仮想環境」という言葉は「仮想的な環境」という一般用語なので、特定の意味を持っているわけではなくて、文脈により様々な意味を持っています。例えば「VRゴーグルを装着して、自宅にいながら富士山頂にいるように見える」というのも「仮想環境」の一種です。
IT分野で出てくる「仮想環境」もいろいろな文脈でいろいろな意味を持ちますので、検索して出てきたiT系の「仮想環境」という単語がすべて同じ意味だと誤解していると、理解が混乱することがあるかと思います。
今回はdockerやコンテナという単語が出ているので、仮想マシン的な意味のことでしょうね。
仮想マシン的なものがない時代には、1つのコンピューターでは1つのOSが動くだけです。もちろん、ストレージに複数のOSをインストールして、起動時にどのOSを使うかを選択することは昔から可能だし、ストレージにインストールされていないOSをDVDやUSBメモリーから起動することも可能ですが、あくまで1つを選択することになります。
で、1つのコンピューターの中で同時に複数のOSが動かせるようにする仕組みが仮想マシンです。こういうことができると何がうれしいかについては、検索すればいくらでも情報があるので省略しようかと思ったのですが、「仮想環境とは何なのか、普通の(?)環境とは何が違うのか、そしてなぜこの環境にした方が良いのか?」と質問文に書いてありますね。後で書きます。
仮想マシンというのは、ソフトウェアで実現されたコンピューターです。実在のPCの仕様を見ると、「CPUが~~、メモリーが~~、GPUが~~、ストレージが~~、LANカードが~~」のように型番・種類・容量などが書いてあると思いますが、仮想マシンも同じくそれらが~~であるような「コンピュータに見えるもの」がソフトウェアで実現されます。どんな仕様の「コンピュータに見えるもの」が使えるかはそれを実現するソフト(VMwareとか、HyperVとか)によって違い得るし、ストレージの種類などは複数の選択肢から選べたりもしますし、メモリー容量やストレージ容量も、それが動く物理PCの仕様の制約の範囲で、自由に設定できます。
使う際には、物理的なPCに仮想マシンを実現するソフトをインストール(あるいは、物理的なPCにインストールされている普通のOSの中のプログラムとしてインストール)して、起動して、「新規仮想マシン作成」をメニューから選んで好きなだけ仮想マシンを作ります。
物理的なPCと、仮想マシンは、電子部品で実現されているかと、(ホストPCの上で動いている)ソフトウェアで実現されているかの違いだけで、10個の仮想マシンを作れば、10個の物理PCを管理するのと同じ手間がかかります。また、個々の仮想マシンで別のOSが起動するので起動にも時間がかかります。
リソース面でも、1つの物理PCの上で10個のWindows11が動いているとすると、その物理PCのストレージには数十GBのWindows11が10個別々に入っているし、メモリーもOSカーネルがGB単位で10個重複して動いています。
ということで、「仮想マシンをもっと軽く重複をなくして使えないか?」でできたのが「コンテナ」です。コンテナは貨物輸送で使うコンテナと同じ単語です。これも一般用語ですね。
で、その先を書き始めたのですが、面倒になってきたので、飛ばし書きします。
コンテナは、コンテナという箱を作って(貨物用のコンテナを想像してください)、そのなかにプログラム群を閉じ込めて、コンテナの外が見えないようにして、コンテナの内壁には富士山頂の風景を投影することで富士山頂にいるかの如くプログラム群に錯覚させるような感じで、コンテナ内のプログラム群を、ホストOS内で動いているのではなくて、(同じバージョンのカーネルを持つ)別のOSの中で動いているかのように錯覚させます。
何が軽いか言うと、1つの物理PCの中で10個のコンテナを動かしても、実際に動いているOSは1つだけなので、仮想マシンのようにOS用に10倍のストレージやメモリーは必要ないです。また、各コンテナの起動・終了も、OSの起動や終了のように時間はかからず、プログラム群の起動・終了+アルファ程度です。
普通に1つのOSの中でたくさんのプログラムが動いているのとの違いは、各コンテナが独立して隔離されているので、仮想マシンで完全に分離した場合に近いくらいの独立性は保たれます。
Dockerは、コンテナを管理するツールの1つです。ツールなので、別のツールでコンテナを管理することもできます。「docker以外のコンテナ管理ツール」で検索すると出てくると思います。
後で書くと書いた部分です。
仮想環境とは何なのか、普通の(?)環境とは何が違うのか、そしてなぜこの環境にした方が良いのか?
以下、仮想マシンを想定して書いていますが、コンテナの場合もほぼ同じはずです。
違いは上に書いた通りです。メリットですが、何と比べるかによりますが、
ケース1:1つの物理PCの中に仮想環境を10作るのと、物理PCを10台用意してそれぞれで1OSずつ動かすこととの比較
・コストが安い。ハードウェアも安く済むし、置き場所面積や消費電力などもすくなくてよい
・10倍のスペックのPCが要るのでは?と思うかもしれませんが、CPUやメモリー使用には山と谷があるので、山の時間帯が重ならない限り、3倍とか5倍とかで十分
・見積もった数値よりも、もうちょっとCPU能力が欲しい、メモリーが欲しい、逆に、もっと少なくてよかったとかの場合に、柔軟に変更が可能(トータルで物理PCの能力の範囲内でですが)
・もう1つ追加したいときに早い(PC注文や納品処理などが不要)・・・これは重要。企業だと「購入申請」とかも必要
ケース2:1つの物理PCの中に仮想環境を10作るのと、1つの物理PCでOSを1つだけ動かして10台分のソフトを全部1OSに突っ込むのとの比較
これは、システム管理したことない人にわかる説明は難しいですね。思いつくままにいろいろ書くと、
・X部署用のウェブサーバーとY部署用のウェブサーバーを動かしたいとなると、1つのウェブサーバーに同居することになるので、管理が面倒とか部署間で調整が要るとか
・プログラムAの障害等でOSの設定を変更して再起動する必要が出た時には全部のプログラムがOS再起動中止まる
・ファイル名・ディレクトリ名がぶつからないように、ディレクトリー構成を全体見定めて決める必要があり、さらに1システム追加するとそれを踏まえて構成変更する
・プログラムAとプログラムBで、同じソフトを使うが別のバージョンを使いたいとか(これはそのソフトが複数バージョン共存して切り替えて使える機能があればそれでもいい)
・前項と類似だが、OSの設定ファイルに書くべきことが違うとかもあるかも
・全体が複雑になるの、障害の原因箇所究明にかかる時間が増えるかも
投稿2025/08/08 05:46
編集2025/08/08 06:07総合スコア86393
0
まずは、環境について。
ここの環境は、プログラムやサービスの実行環境のことです。この環境にはOSそのものとか、実行したいプログラムやサービスを実行するために必要な別のプログラムなどが含まれています。
たとえば、ブラウザで動くゲームをやりたければ、ブラウザがインストールされている必要があります。pythonで書かれたプログラムを動かしたければ、pythonそのものや必要なpythonモジュールをインストールしておく必要があります。
1つの環境でいろいろなプログラムやシステムを動かそうとすると、それに合せていろいろなものをインストールして管理しなければなりません。また、同じものの違うバージョンをインストールする必要があったりして、困ってしまうことも起きます。
次は仮想化について。
ここでの仮想化とは、1台のPCやサーバ上に複数の対象となる「何か」を作ることを指しています。
たとえば、PCを仮想的に作ることができます。仮想PCとか仮想マシンとか呼びます。この仮想PCにOSをインストールすることで、PC上で別のPCを動かすことができるようになります。作ったのは全く別のPCなので、そのPCに何をインストールしても親のPCには何も影響しません。 ただし、PCのハードウェアをソフトウェア的に実現しているので、親PCのリソースをたくさん消費します。
pythonの仮想環境では、pythonの実行に必要なものだけ、PC/サーバ上で切り替えて使えるようにするためのもので、リソースは少なくて済みますが、pythonのプログラムしか実行できません。
dockerについて
dockerも仮想環境の一種です。 仮想PCでは、環境にPCのハードウェアから含まれいますが、複数の仮想PCを1台の 親PCに設置する場合でも、仮想環境のハードウェアやOSは同じであることがほとんどであり、リソースを効率的に使えているとは言えません。
dockerでは、OSの核の部分(カーネル)を、親PCもしくは別途用意されたものを共通使用するとで、少ないリソースで運用できるようにしています。
dockerで1つの環境を構成するために必要なもの=OSのカーネル以外のもの、を含んだものをコンテナと呼びます。コンテナを起動すると、用意されたOSカーネルと、コンテナに含まれたファイルを使ってOSが起動します。
仮想環境を利用することで、いろいろな面で効率的に作業/運用することができるようになったと思います。
- HWの保守とシステムの保守を切り離すことができる。
- リソースが柔軟に変えられるので、DBなどを専用にすることができる。
- 新技術を導入しやすくなる
あたりですかね。
投稿2025/08/05 06:12
総合スコア14588
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Docker自体についてはさておき、「仮想環境」を一目で説明しよう。
僕のPCはLinux(Xubuntu24.04LTS)で動かしている。Linuxと言うOSも「環境」を提供している。「作業場」(WorkSpace)って言っても良いけど、まぁ、環境だな。
その上でこういう事が出来る。
Linux上でApple II、MSX、NEC PC-9801、SHARP X68000が走ってる。それぞれの上でBASIC、MSX-BASIC、MS-DOS、SX-Windowが走ってるわけだが。
つまり、ある環境(この場合はLinux)上で全く別の環境(この場合はApple II、MSXマシン、NEC PC-9801、 SHARP X68000)を走らせるシステムを「仮想環境」と言うんだ。纏めると、ある環境A上で全く別のシステムBの環境を走らせる「機構」を仮想環境と呼ぶ。
覚えた?
人に依っては、「この例はエミュレータじゃない?」って言うかもしれんが、逆に言うとエミュレータは仮想環境の一種だ。根本的には殆ど同一のモノを指している。
ザックリ言うと、通常、「エミュレータ」を含む仮想環境は、何らかのエミュレートしたい対象「のみ」をエミュレートするが、Dockerなんかは汎用に、複数の環境のエミュレータを一手に引き受けてる「仮想環境生成器」って捉える事が出来るんじゃないかな。
投稿2025/08/08 05:02
編集2025/08/08 06:23総合スコア158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
仮想環境とは2台以上パソコンがないと出来ないことを1台で出来るようにする技術です。
2台以上ないと出来ないことといえば例えば、
ポケモンバトルだったり?ポケモン交換だったり?
あとは、特定のポケモンソフトが実はバグ版で、特定のDSに入れるとアップデートされるので分けたい!とか?
まあそんな用途で使います。
で、実際にはソフトウェアが干渉したり、バージョンが干渉したり、特定のやりたいことと空間を分けたい!みたいな時に2台PCを買うことでもできるけど、せっかくパソコンがあるのだから、この上でやろう!という要望を叶えられるものですね。
例えばWindowsを立ち上げてくださいと言われた時、1つのPCで1つしか出来ないでしょう?仮想環境があればできます。
旧バージョンのChromeと新バージョンのChromeと言った具合に2つ以上バージョンの異なるChromeを立ち上げてくださいと言われた時、1台のパソコンでは出来ないでしょう?(特別なハックはあるかもしれませんが、それが影響するかもしれな)
仮想環境があれば2台用意しているかのように扱うこともできます。
コンテナというのはPC全部じゃなくてよくないか?的なやつです。
もちろんこれも仮想環境です。
投稿2025/08/07 14:40
総合スコア68
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。