「SnapとDocker」と「SnapとApt」のそれぞれの違いと使い方を徹底解説

この記事は 2 分で読めます。
概要

本記事では、似て非なるパッケージ管理のシステムsnap」と仮想環境プラットフォーム「Docker」の違いについて解説します。また、パッケージ管理のシステムの「snap」と「apt」の違いにも触れ解説も致します。

この記事の読者層

SnapとDockerの違いを知りたい方

SnapとAptの違いを知りたい方

「SnapとDocker」と「SnapとApt」の違いとは?

本記事では、似て非なる以下の二つの違いについて解説していきます。

①「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-cloud

・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 find [検索ワード]
パッケージの情報表示% snap info [パッケージ名]
パッケージ済パッケージの更新% snap intall [パッケージ名]
インストール済みパッケージの更新% snap refresh
snapパッケージの変更履歴表示% snap changes
パッケージのアンインストール% snap remove [パッケージ名]
Snapコマンドと主な操作

「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」のインストール方法

aptのインストール用パッケージは不要です。

aptでインストールされたプログラムは、基本、「/usr/bin」、「/bin」、「/lib」、「/usr/lib」などUbuntuとして駆動させるらめの重要なフォルダへ直接導入されます。これにより依存パッケージや依存関係が存在することになります。

まとめ

本記事のポイント

Snap」は、自己完結型パッケージ形式でGUIアプリなどに利用され、ローカルマシンにインストールします。

Docker」は、軽量の仮想マシンとしてサーバーサービスなどを構築でき、複数同時にローカルマシン上で動作可能です。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です