Docker概念の基礎基本!
この記事の目的
コンテナ型仮想化ソフトウェアDockerとはなんぞや
コンテナ型仮想化ソフトウェアDockerとは
今回説明するこのDockerというコンテナ型仮想化ソフトウェアは、ホストOS(macOsなど)にインストールされ、アプリケーション(MySQLやrailsなど)を管理するソフトウェアです。
よく比較されるのが「ホスト型仮想化」と「ハイパーバイザー型仮想化」です。今回、これらについての説明は省きます。
そもそも仮想化とは
そもそも仮想化とは、「サーバーなどの物理的リソースを抽象化してソフトウェア的に統合・分割できるようにする技術」のことです。つまり、「仮想化されたサーバー」は「偽物のサーバー」ではなく、「本物の(物理的な)サーバーではないが、ソフトウエアによって実質的に本物と同じように扱えるサーバー」と解釈するとわかりやすいでしょう。
このような仮想化技術が発展する前は、一つのハードウェアに一つのサーバー(webサーバー、メールサーバー)が乗っていたため、物理的なスペースを必要なサーバーの分だけ使っていた。
コンテナ型仮想化のメリットとデメリット
このコンテナ型仮想化のメリットを3点紹介します。
・ゲストOSを必要としないので起動にかかる負荷が少ない
・サーバーではないので一つのコンテナに複数のアプリケーションをインストールしない
・ホストOSがあるのでコンテナを起動しながらブラウザやエディタも普通に使い続けられる
デメリットも存在します。
それは、「ホストOSの違いがコンテナにも影響する」ということです。
この原因は、コンテナには、ゲストOSが含まれておらずホストマシン上のLinuxカーネルを使用しているためです。例えば、M1 Mac とIntel Mac でLinuxカーネルの使用が異なるためそのLinuxカーネルを使用して動かしているDOckerなどのコンテナにも影響が出るということです。
Dockerを理解するための用語集
・Docker Engine
→コンテナを乗せるLinuxで動くソフトウェアのことをDocker Engineという。つまり、Dockerで作ったコンテナは全てLinuxがベースとなっているということ。
・Docker CLI
→Docker Engineによって提供されているdocker runやdocker buildなどのコマンドが使えるようになるもの。これは、Docker Engineによって提供されているので、そのDocker Engineは先ほど説明したようにLinuxで動くためMacやWindowsなどでは使用できない。
・Docker Desktop
→MacやWindowsでDockerを使うためのGUIアプリケーション。このDocker DesktopにはLinuxカーネルやDocker Engineが含まれているため、Linux以外のOSでもDocker Engineを動かすことができるので、一般的にMacやWindowsでDockerを使用するというときはこのDocker Desktopを使うということを意味する。
・Docker Compose
→このコマンドは、Docker CLIをdocker-compose.ymlファイルに記述することで使用できるようになるコマンドで、本来「Railsのコンテナを起動して」「MySQLのコンテナを起動して」「それぞれのネットワークを構築して」「コンテナのデータをホストマシンと共有させて」などの複雑なコマンドを実行しなければいけないところをこのdocker-compose.ymlファイルにまとめることで「docker composeコマンドを実行する」だけで済ませることができる便利な機能。Dockerを使うならほぼ確実に使うので覚えておきましょう。
Discussion