本記事では、似て非なるパッケージ管理のシステム「snap」と仮想環境プラットフォーム「Docker」の違いについて解説します。また、パッケージ管理のシステムの「snap」と「apt」の違いにも触れ解説も致します。
本記事の読者層は以下の方を想定しています。
- SnapとDockerの違いを知りたい方
- SnapとAptの違いを知りたい方
「SnapとDocker」と「SnapとApt」の違いとは?
本記事では、似て非なる以下の二つの違いについて解説していきます。
Snap とAptとDocker
- 「SnapとDocker」との違い(Snap vs Docker)
- 「SnapとApt」との違い(Snap vs Apt)
仮想環境としての「Snap」と「Docker」の違い
「Snap」の特徴
「Snap」は、システムにインストールさえているライブラリーを使用しないパッケージ形式(自己完結型パッケージ)を採用しています。このSnapには、ソフトウェアを隔離することでセキュリティを高める機能があります。これはサンドボックス環境と呼ばれており、Dockerコンテナー(コンテナ技術)と似ています。「Snap」は、1つのマシンに1つのソフトウェアや環境を構築したいときに利用します。これは複数の環境を構築できる「Docker」より劣るかもしれませんが、Linux上のデスクトップアプリのようなグラフィカルインターフェイスを必要とするソフトのインストールはSnapにしかできません。「Snap」 は、より複雑に絡み合ったデスクチップ環境をLinux系のローカル マシンにインストールするときの環境構築に用いられます。
実際、ディストリビューションのアップグレード時の画面上をよく見るとsnapを利用してるのはgnomeなどのデスクトップ環境をインストールしているのが確認できるかと思います。
「Docker」の特徴
「Docker」 はコンテナーと呼ばれるイメージファイルを使用してサーバー用サービスを実行します 。一種の軽量の仮想マシンといえます。一般の仮想環境と違うところは、DockerではLinuxカーネルの上にプロセスを隔離して環境を実行できます。またOS自身をDocker内のイメージに加えなくても良く、実行時の速度がネイティブ環境と比べてあまり落ちない特長があります。
これらのコンテナー では独自の IPアドレス を割り当てられるため、コンテナー間のネットワークなどを設定できます。Snap と同様に、Docker イメージでも特定のサービスを実行するのに必要なすべてものが含まれています。ただsnapは1つのローカルマシンにインストールするのに対して、Dockerの場合は、同じイメージからでも複数のコンテナーを同一マシン内に同時実行できます。
Docker は主に実行中のサービス (Web サーバー、データベース サーバー、アプリケーション サーバーなど) を対象として使用するものです。
「Docker」は、1つのマシンに複数の環境を構築したいときに利用します。主にサーバー機能やサービスといったバックグラウンドで動かせるような機能をもつアプリはDockerで利用できます。
「Snap」と「Docker」のコマンド使い分け
Snapを利用するものは、以下に示すようなローカルに直接インストールできるようなデスクトップアプリケーションです。
実際にsnapでインストールされているアプリケーションの例
- gnome
- gtk
- google-clod
- Chromium (google chromeのオープンソース版)
一方で、Dockerを利用するものは、データーベースサーバーやHTTP サーバー、更にはpythonのプログラム環境などのあまり複雑とならない環境構築用です。
実際にDockerでインストールされているアプリケーションの例
- nextcloud
- owncloud
- MySQL
- Apache2
- Python
パッケージとしての「Snap」と「Apt」の違い
Ubuntu Linuxでは、「Snap」と「Apt」という二つのパッケージマネージャーがあります。どちらもパッケージのインストール、管理、および削除を自動化してきれますが、動作方法が異なります。
繰り返しになりますが、
「Snap」の特徴
「Snap」は、Ubuntu Linuxディストリビューションを開発している英Canoincal社によって提供されているパッケージ管理のシステムです。「Snap」パッケージは、ソフトウェアの実行に必要なライブラリなどのすべてのソフト(環境)が含まれれており、自己完結型パッケージとも呼ばれています。このため、追加で依存関係をインストールする必要はなく、どのLinuxバージョンでも同じバイナリーをそのまま駆動できるユニバーサルパッケージとも呼ばれています。ある意味、ディストリビューション固有のパッケージ管理(deb, rpm, aptなど)に代わるものです。
現在、Snapパッケージが利用できるOSは、「Ubuntu」にとどまらず、「Debian」、「Fedora」、「Arch Linux」、「openSUSE」などの様々なLinux系OSで利用できます。
「Apt」と異なり、アプリケーションをアーカイブとしてパッケージ化しています。これはサンドボックス環境と呼ばれており、Dockerコンテナー(コンテナ技術)と似ています。アーカイブには、バイナリコード、データ、およびライブラリが含まれています。
「Snap」の長所
・「Apt」と異なり、依存関係をパッケージにバンドル可能である。つまり、パッケージ内のすべてのアプリケーション データとの依存関係は自己完結型パッケージ形式である。このため、パッケージを作成するのも簡単で、削除するのもアプリケーション全体を削除すれば良い。
Snap」の短所
・「Snap」はroot権限なしで実行できるため安全性は低い。
・「Snap」はaptに比べてファイル容量が大きくなります。
・「Snap」はディストリビューション固有で最適化がしづらい。
「Apt」の特徴
「Apt」(Advanced Packaging Tool) はUbuntuやその他の様々なディストリビューションで使用されているLinuxパッケージソフトウェアです。「Snap」同様に、アプリケーションのインストールに必要なバイナリコード、データ、およびライブラリが含まれています。「Apt」は「snap」と異なり、アプリケーションの依存関係を後から自動的にインストールします。
「Apt」の特徴として、以下のものがあります。
データをホストのファイルシステムに直接・永続的にインストール
データをホストのファイルシステムに直接そして永続的にインストールされるため、基本的には使用中アプリケーションの1つのバージョンのみしかインストールできません。
安全性が高い
ホストに直接ファイルをインストールされるため当然ではなりますが。「Apt」はインストール時に、 root 権限が必要なため、より安全にパッケージ管理ができる。
効率的なストレージ管理と高速起動
依存関係がバンドルされていないため、サイズを小さくでき効率的なストレージ管理が可能になり、このため、「Apt」経由でインストールされたアプリケーションは起動が速い傾向があります。
「Snap」と「Apt」のコマンド使い分け
古い環境に新バージョンのソフトウェアを提供したいが、AptやDebパッケージでは依存関係が解決できない。解決手段として、必要なものを丸ごとパッケージして、他のパッケージとの依存関係を気にせずに済むようにしたものが「Snap」になります。
「Snap」パッケージは「Apt/Deb」パッケージと共存可能です。これは、下記で述べるように「snap」パッケージをインストールされている場所(「/snap」)が異なるからです。このため、アプリケーションをインストールするのにAnapパッケージとDebパッケージの両方をインストールしても問題なく、これがsnapの利点ともいえます。
snapとaptのパッケージは混在しても問題ない。
「Snap」/「docker」/「Apt」のインストール方法
「Snap」のインストール方法
「Snap」のインストール方法
Ubuntuでの「snap」のインストールは以下のコマンドで可能です。
$ sudo apt install snapd
「Snap」のパッケージの確認
「snap」でインストールされたパッケージの確認は以下のコマンドで確認できます。
$ snap list
Name Version Rev Tracking Publisher Notes
bare 1.0 5 latest/stable canonical? base
core18 20221212 2667 latest/stable canonical? base
core20 20221212 1778 latest/stable canonical? base
core22 20221212 469 latest/stable canonical? base
gnome-3-34-1804 0+git.3556cb3 77 latest/stable/… canonical? -
gnome-3-38-2004 0+git.6f39565 119 latest/stable canonical? -
gnome-42-2204 0+git.c271a86 44 latest/stable canonical? -
gnome-calculator 41.1-4-g5c9869a58c 920 latest/stable/… canonical? -
gnome-characters 42.0 781 latest/stable/… canonical? -
gnome-logs 42.0 115 latest/stable/… canonical? -
gnome-system-monitor 42.0 181 latest/stable/… canonical? -
gtk-common-themes 0.1-81-g442e511 1535 latest/stable/… canonical? -
snapd 2.58 17950 latest/stable canonical? snapd
ここでsnapのインストール先はホームディレクトリ内の「/snap」ディレクトリに保存されます。
「Snap」の使い方
以下、Snapコマンドとコマンドの主な操作をまとめておきます。
操作 | コマンド |
---|---|
パッケージの検索 | % snap find [検索ワード] |
パッケージの情報表示 | % snap info [パッケージ名] |
パッケージ済パッケージの更新 | % snap intall [パッケージ名] |
インストール済みパッケージの更新 | % snap refresh |
snapパッケージの変更履歴表示 | % snap changes |
パッケージのアンインストール | % snap remove [パッケージ名] |
「Docker」のインストール方法
DockerをubuntuへFullインストールする方法は、以下のコマンド入力でできます。
$sudo apt-get install docker-ce docker-ce-cli containerd.io
「Docker」のLinuxへのインストールならびに使い方
より詳細なインストール手順は以下の記事をご参照ください。
「Docker」のアンインストール手順
「Docker」のLinuxへのアンインストールは以下のコマンドでできます。
$sudo apt-get uninstall docker-ce docker-ce-cli containerd.io
「Apt」のインストール方法
Ubuntu上では、aptのインストールやアンインストールは不要です。
aptでインストールされたプログラムは、基本、「/usr/bin」、「/bin」、「/lib」、「/usr/lib」などUbuntuとして駆動させるらめの重要なフォルダへ直接導入されます。これにより依存パッケージや依存関係が存在することになります。
まとめ
本記事では
- 「Snap」は、自己完結型パッケージ形式でGUIアプリなどに利用され、ローカルマシンにインストールします。
- 「Docker」は、軽量の仮想マシンとしてサーバーサービスなどを構築でき、複数同時にローカルマシン上で動作可能です。
次回の記事をご期待下さい。どうぞよろしくお願いいたします。
コメント