0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【学習記録】今までまったくDockerに触ったことない人の初学記録

Posted at

【Docker超入門①】Dockerって何がすごいの?〜仮想マシンとの違いから最初の一歩まで〜

はじめに

実はわたくし、Dockerというものを今まで使ったことがないんです。
案件に参画して1年たちますが、払い出された仮想環境がなぜか数GBしかないので
DockerとかVSCODEとか、今まで全く利用できなかったんです。

そんな私が一念発起して、Dockerを基礎から2週間かけて勉強してみました。
間違ってること、補足あればぜひ教えてください。

シリーズ構成:

  • 第1弾(この記事):Dockerって何がすごいの?
  • 第2弾:イメージ・コンテナ・Dockerfileを完全理解する
  • 第3弾:docker-composeでPython + PostgreSQLを連携させる

それでは、いってみましょう!


1. そもそも仮想マシンとは?

通常、1つのPCには1つのOSが入っています。

でも開発のとき、こんなことが起こるらしい。。

  • Linuxが前提のシステムを開発したい → でもPCはWindows...
  • 本番環境と同じ環境で動かしたい
  • 隔離された環境で開発したい

そんな時に使うのが仮想マシンコンテナです。

仮想マシンの構造

物理ハードウェア
└── ホストOS
    └── ハイパーバイザ(仮想化ソフト)
        └── ゲストOS(仮想マシン)
            └── アプリ

ハイパーバイザーというのは、ゲストOSを使うための土台を作ってくれるソフトです。仮想CPUの割り振りやメモリ、ディスクなどの割り当てをやってくれます。

ただ、これは結構重たいらしい。

OSを2つ動かさなければならないし、ハイパーバイザーも動作が重ため。


2. コンテナの登場

そこで、コンテナの出番です。

コンテナの構造

物理ハードウェア
└── ホストOS
    └── Docker Engine
        └── アプリ

コンテナもまた、仮想マシンと同様に独立した環境を作るための技術です。

仮想マシンとの最大の違い

ホストOSを共有しているところ!

OSの一番司令塔的な役割を持っている「カーネル」と呼ばれるシステムがあります。これはCPUやメモリなど、本物のハードウェアに直接指示を出しながら処理を行う、一番土台の役割を持っており、すべてのアプリはこの「カーネル」の上に載っています。

コンテナは、ホストOSのカーネルを使わせてもらって、別環境を疑似的に作成するシステムなのです。

OSを2つも乗っけなくてよい分、非常に軽くなります

Docker EngineはホストOSのカーネルといろいろやりとりしてくれる役割を担っています。

比較まとめ

項目 仮想マシン コンテナ
起動速度 遅い(分単位) 速い(秒単位)
リソース消費 大きい 小さい
独立性 完全に独立 カーネル共有
用途 異なるOS環境が必要な場合 同一OS上での環境分離

3. 【補足】Windowsユーザー向け:WSL2って何?

ここはWindowsユーザー向けの補足です。Mac/Linuxの方は読み飛ばしてOK!

DockerはもともとLinux環境前提のシステムです。

「あれ、Windowsなのにカーネル共有できるの??」って疑問がわいたんですが...

できません。

できないので、Windows環境でDockerを動かす時は、「WSL2」(Windows Subsystem for Linux 2)というソフトをDockerの下にインストールします。

これはWindows上で、Linuxカーネルへの指示を処理できるようにするためのソフトです。

まぁ、「Windowsの上でLinux動かすのに必要なんだな〜」くらいに思ってます。

Docker Desktopをインストールすると、一緒にWSL2も入れてくれることが多いので、難しいことは考えなくて大丈夫です!


4. 「環境差異」という地獄を理解する

システムを構築する際は基本、環境が分かれていることが多いです。

「開発環境」「検証環境」「本番環境」 ですね。

(もっとたくさん環境を作ってるプロジェクトもあります。私はマックス8個環境があったことがあります。移送が地獄だった...)

で、開発環境では動いていたのに、本番環境では動いてなかった! なんてことは結構起きるのです。

  • 前提のライブラリが入ってなかった〜
  • テーブルがなかった〜(あってはならないんですけど、あったんですよ実際...)

なので環境管理はシステム開発者にとって実は超重要!

コンテナが解決する

コンテナは独立した環境を作るソフトなんですが、この環境、簡単に他に持ち出して適用することができるのです!

開発環境で作ったコンテナをそのまま検証、本番環境にもっていく、なんてこともできるわけ。

これで、環境差異を大きく減らせますね。

また、プロジェクトに新規参画してきた人が、他の開発者さんと同じ環境で開発・テストを行うために、コンテナをもらってきて自分の環境上に建てる、なんて使い方もGOODです!


5. 初めてのDocker起動:hello-world

ではでは、初めてのDocker起動です!

Dockerがインストールされているか確認

PowerShell(私はWindowsなので)を開いて...

docker --version
Docker version 28.x.x, build xxxxxxx

みたいに表示されればOK!入ってそうですね。

hello-worldを実行

docker run hello-world

何かいっぱい出てきた...

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
Digest: sha256:f7931603f70e13dbd844253370742c4fc4202d290c80442b2e68706d8f33ce26
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

出力の意味を読み解く

メッセージ 意味
Unable to find image 'hello-world:latest' locally 「hello-world」がローカルにないよ!
Pulling from library/hello-world 最新のやつ持ってくるよ!
Status: Downloaded newer image for hello-world:latest 持ってきたよ!
Hello from Docker! 成功!

これでDockerが正常に動いていることが確認できました!


まとめ

今回以下のことを学びました:

  1. 仮想マシンとコンテナの違い

    • コンテナはカーネルを共有するから軽い
  2. Dockerを使う理由

    • 環境差異の地獄から解放される
    • 同じ環境を簡単に配布・再現できる
  3. 最初の一歩

    • docker run hello-world でDockerの動作確認ができた

次回

次回は、Dockerを使う上で最も重要な概念である「イメージ」と「コンテナ」について深掘りします。

  • イメージ = 設計図、コンテナ = 実体
  • 基本コマンド(pull, run, ps, stop
  • Docker Hubからnginxやpostgresを取得して遊ぶ
  • 自分でDockerfileを書いてみる
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?