Dockerとは
仮想化における方式の1つで、コンテナ型の仮想化環境を提供するオープンソースのソフトウェアです。
ものすごく簡単に言うとデータやプログラムを隔離できる仕組みです。
パソコンやサーバではApacheやMySQLなど複数のプログラム(ソフト)が同時に動いています。
こうしたいくつかのプログラム(ソフトウェア)やデータ、OS(※)を独立した環境に隔離できるのがDockerです。
※厳密にはOSごとパッケージ化しているのではなくホストOS(Linux)のカーネルを利用しています。
コンテナとイメージ
イメージとしてパソコンやサーバの環境をトランクルームにや物置のようなものに独立して分けていると考えるとわかりやすいです。
この物置のことをコンテナ(container)と言います。
コンテナを使える仕組みがDockerです。Dockerのソフト(DockerEngine)を使用することでコンテナを操作することができます。
コンテナを作成するにはDockerEngineを操作しますがその時イメージ(image)と呼ばれるコンテナの素になるものから生成します。
イメージにはたくさん種類があり、中に入れるソフトウェアによってそれそれ用意されたイメージを使います。
PHPのコンテナを作りたいならPHPのイメージなど、複数コンテナをイメージを使って作ることができます。
例
仮想化
ここで仮想化について簡単に説明いたします。
仮想化技術が普及する前は1台のサーバに対しては1つのサーバ環境を構築しておりサーバ環境が増えれば、それに応じてサーバの台数も増えるのが当たり前でした。
仮想化技術によって1台のサーバ上に複数のサーバ環境を構築することができ、物理的な制限にとらわれることなくソフトウェア的に統合・分割が可能になりました。
わかりやすくいうと「PCの中で仮想のPCを起動する」のが仮想化です。
AWSなどのクラウドも仮想環境をインターネットを通じて提供しているサービスです。
仮想化の3つの方式
仮想化を実現する技術は、 ホスト型 、 ハイパーバイザー型 、 コンテナ型があります。
ホスト型
ホスト型は、ホストOSの上に「仮想化ソフト」をインストールします。その上に仮想マシンを起動し各仮想マシン毎にゲストOSを入れていく方法です。
ゲストOSを動かすために、ホストOSを経由してハードウェアを動かすため動作が遅く、ゲストOSを動かすため仮想マシンごとにリソースが必要なため
仮想化環境の構築がしやすいため検証環境としてはよく利用される方式ですが、パフォーマンスが重視される本番環境には適しているとはいえません。
ハイパーバイザー型
ハイパーバイザー型は言わば「仮想化機能を持つOS」で、ホストOSを必要としない点が特徴です。
ホストOSの代わりに「ハイパーバイザー」と呼ばれる仮想化のためのソフトウェアをサーバーに直接インストールし、その上に仮想マシンを起動、各仮想マシン毎にゲストOSを入れていく方法です。
ホストOSを介さないのでその分高速でリソース効率が高いが仮想環境を構築する以外のことはできなくなります。
通常ならあるホストOSがない、頻繁にアップデートすを要するものもあるため専門的な知識や高いスキルが必要です。
コンテナ型
コンテナは「アプリケーションを実行するための領域(ユーザ空間)を複数に分割して利用する」もので、ホスト、ハイパーバイザーとは全く異なる概念です。
ホストOS上でコンテナエンジンを起動し、ゲストOSは使わずにコンテナイメージを作成することで
1つのOSであたかも別のマシンが動いているかのようにサーバーを動かすことができます。
ホストOS上で直接動作するため動作も早くコンテナイメージのコピーも簡単なので手軽にコンテナを起動ができます。
ホストOS上で動作しますがコンテナ内は実行環境として独立していて、コンテナ内のリソース(ネットワークやポート)もベースOSから分離されています。
コンテナ間も同様です。
要はAコンテナにはpython2を、Bコンテナにはpyhotn3の環境をというようにOS内に多面の実行環境を構築することができるということです。
Dockerを利用するメリット
開発現場に入ってやる作業で環境構築があります。
現場によっては工数が1日、2日かかり大変だったりしますが、
Dockerを使うとDockerfileという環境の設計図を記載しておいてコマンドを一つ叩くだけで自動的に開発環境を構築してくれるので非常に楽になります。
仮に何かエラーが出たり失敗して環境がぐちゃぐちゃになってしまってもインストールなどをしているコンテナ自体を壊して破棄ができるのでホストPCには何も影響はありません。
Dockerは基本Linux用のもの
通常のサーバであればOSの上にプログラムやデータを直接載せますが、Dockerの場合はOSの上にDocker Engineを載せその上でコンテナを動かします。
プログラムやデータはコンテナの中に入れます。
Dockerは基本的にLinuxOSの上でしか動作しません。
土台となるLinuxOSを利用する前提の仕組みなので、コンテナに入れるソフトもLinux用のソフトウェアです。
Windows環境ではコンテナ技術を動かすうえでのハードルが高かったのですがWindows上で完全な状態でLinuxを動作させるための実行環境WSL2が登場し高速にDockerを動かせるようになりました。
WSL2設定
WSL2とはwindowsでLinuxを動かす仕組みのことです。
Windowsで「Windowsの機能の有効化または無効化」を開き、以下にチェックを入れてください。
Linux用Windowsサブシステム
仮想マシンプラットフォーム
以下を参考にLinux カーネル更新プログラムダウンロード、WSL2の設定、Linux ディストリビューションのインストールなどを行ってください。
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual
Dockerのインストール
Docker Desktop(※)というWindowsやMacOSといったOS上で、簡単にDocker環境を構築できるツールがあります。
※2023年4月現在、個人利用は無償ですが、大企業が商用目的で使うなら有料となっています。
公式サイトよりDocker Desktopをインストールしてください。
https://docs.docker.com/get-docker/
1.ダウンロードしたインストーラを起動するとディスクトップにDocker Desktopが作成されます。
2.Docker Desktopを起動し、画面に従いインストールします
バージョンやホストOS(windowsかMacか)によっても異なる場合があるため
Docker ドキュメントの日本語訳を作成・公開しているサイトがあるのでこちらも参考してみてください。
https://docs.docker.jp/get-started/overview.html
Dockerコンテナ操作
コンテナを操作する基本はコマンドでの命令です。
docker~コマンドから始まります
docker コマンド 対象
コンテナの作成から停止、削除まで
Apacheのイメージ(httpd)からap001exというコンテナを作成・起動
docker run --name ap001ex -d httpd
psコマンドを実行しap001exというコンテナが稼働していることを確認
STATUSがUPになっていたら稼働している
docker ps
stopコマンドを実行しap001exのコンテナを停止
docker stop ap001ex
psコマンドを実行し一覧になければ停止されている
docker ps
rmコマンドを実行しap001exというコンテナを削除
docker rm ap001ex
Dockerコマンド例
イメージの一覧を表示
docker images
起動中のコンテナの一覧を表示
docker ps
ステータスに関係なくすべてのコンテナの一覧を表示
docker ps -a
起動中のコンテナの停止
docker stop
コンテナの削除
docker rm [コンテナID]
イメージの削除
docker rmi [イメージID]
参考
Dockerコンテナの作成、起動〜停止まで Quita
Dockerマニュアル