Dockerは、コンテナ型の仮想空間で開発およびデプロイを行うことができる人気のソフトウェア。そしてUbuntuは、Linuxディストリビューションであり、Dockerのサポートが充実しているOSとして知られています。

UbuntuにDockerをインストールすると、UbuntuのOSカーネルを共有する軽量の仮想マシンで、開発プロジェクトに理想的なプラットフォームを構築することができます。この記事では、これを実現する4つの方法をご紹介します。

Dockerとは

Dockerは、コンテナ型の仮想空間(Dockerホスト)上でアプリケーションを構築・実行するための、ポータブルな開発環境を提供しています。コンテナのイメージは、ノートパソコンからクラウドまで、Dockerが利用できる環境であれば、変更なしでどこでも利用することができます。つまり、実行環境間の差異がなくなり、開発者の負担が軽減することを意味します。また、コンテナは、複数の物理マシンへの負荷分散が容易であり、需要の変化に応じたアプリケーションの拡張も簡単です。

Dockerには、Docker Hubや他のパブリックレジストリ、またはDockerfileなど、コンテナにおけるイメージの構築と実行に必要なものがすべて揃っています。

UbuntuにDockerをインストールする前に

最新バージョンのDockerは、Ubuntuのバージョン 18.04、20.04、21.10、22.04にインストール可能です。x64_64/AMD64、ARMhf、ARM64、S390xの各アーキテクチャに対応しています。

Dockerのインストール方法はいくつかあり、必要な機能やパッケージ管理に対するアプローチに応じてお好きな方法を選択してください。今回は、すべての手順をご紹介していきます。

Docker EngineかDocker Desktopか

Linux上のDockerは従来ターミナル専用で、コンテナを実行するデーモンであるDocker Engineと、そのデーモンと対話するためのdockerCLI(コマンドラインインターフェース)で構成されています。

現在は、Docker DesktopでDockerを利用する方法もあり、元々はWindowsとMacのみでサポートされていましたが、2022年5月にLinux向けにも提供が開始されています(UbuntuでDocker Desktopを使用する場合は、AMD64プロセッサとUbuntu 21.10、または22.04のいずれかが必要)。コンテナを管理するグラフィカルインターフェース、統合Kubernetesクラスタ、サードパーティ拡張機能のサポートがあります。さらに、dockerとDocker Compose CLIも利用可能です。

Docker DesktopはDocker Engineと異なり、仮想マシンでコンテナを実行するため、WindowsとMacOSの場合は、Docker Desktopを使用することになります。Ubuntuの場合は、両方を並行して利用することもできますが、dockerCLIのバージョン間で干渉が生じる恐れがあるため、どちらかを選んで使用するのが賢明です。快適なターミナルでの作業と優れたサポートとパフォーマンスを重視する場合は、Docker Engine。VMが若干重くなるものの、統合型UIを使用したい場合、またはKubernetesを使用する場合には、Docker Desktopがお勧めです。

UbuntuにDocker Engineをインストールする方法

Ubuntuでは、Docker Engineを使用するのが標準的です。ローカルのUbuntu DesktopからクラウドのUbuntu Serverまで、サポートされているすべてのバージョンと環境で動作します。また、インストールを行う前に、Ubuntuのバージョンが18.04以降であるか確認することをお忘れなく。

Docker Engineには、以下3つを使ったインストール方法があります。

  1. Ubuntuのaptリポジトリ
  2. スタンドアロン型のDebianパッケージ(.deb
  3. 自動インストールスクリプト

1つ目のUbuntuのaptリポジトリを使った方法が最も一般的と言えます。Dockerをパッケージリストに追加して、apt upgradeを実行すると、将来のバージョン更新が簡単に行えるようになります。2つ目の方法は、自動更新の機能はなく、エアギャップ環境にDockerをインストールするのに適しています。3つ目の自動インストールスクリプトを使った手法が1番簡単ですが、あくまで開発用に設定されているため、本番環境での使用は非推奨です。

本番環境で作業している、サクッと更新したい、またはすべての環境で同じメカニズムを使用している場合には、aptリポジトリを使ってDocker Engineをインストールしてください。

手持ちのPCでDockerを試す目的で、素早いセットアップが必要であれば、自動インストールスクリプトを使った方法をお勧めします。

1. aptレポジトリを使ってDockerをインストールする

Dockerのパッケージは、aptリポジトリに保管されるため、このリポジトリをaptのソースリストに追加する必要があります(追加しなければaptでDockerパッケージが見つかりません)。

まずは、既存のパッケージ情報を更新して、いくつかの依存関係をインストールします。また、ca-certificatescurlgnupglsb_releaseを使って、Dockerのaptリポジトリの詳細情報と、使用しているシステムに対応した署名鍵をダウンロードしてください。こちらはすでに入手しているかと思いますが、念のため。

$ sudo apt update
$ sudo apt install ca-certificates curl gnupg lsb-release

次に、DockerのGPGの鍵をaptに登録します。これで、aptによる、インストールしたDockerパッケージの検証が可能になります。

$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg

curlコマンドで、Ubuntuで利用できるDockerのGPG鍵をダウンロードし、標準のOpenGPGエンコーディングに変換して、aptのキーリングディレクトリに保存します。chmodは、aptが確実に検出できる様、キーリングファイルに対して権限を設定するコマンドです。

これで、Dockerパッケージのソースをシステムに追加できます。以下のコマンドを実行してください。

$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

実行すると、シェルの置換を利用して、AMD64やARM64など、システムのアーキテクチャが自動で検出され、パッケージ情報がダウンロードされます。先ほど追加したGPG鍵を用いて認証が行われ、リポジトリが、新たなパッケージリストとしてapt /etc/apt/sources.list.d directory.に追加されます。

その後、aptがDockerパッケージの存在を検出できるよう、パッケージ情報を再度更新します。

$ sudo apt update

これで、apt installコマンドで、Dockerのコンポーネントをシステムに追加することができます。以下3つの最新版のDocker Community Edition(CE)をインストールしましょう。

  • docker-ce:Docker Engineのデーモン
  • docker-ce-cli:操作することになるDocker CLI
  • containerd.io:コンテナの起動と実行に利用するコンテナランタイム/ソフトウェア(containerd
$ sudo apt install docker-ce docker-ce-cli containerd.io

2. Debianパッケージを使ってDockerをインストールする

公式の.debパッケージは、セットアップは容易ですが、新たなバージョンがリリースされるたびに自分でダウンロードとインストールを行わなければなりません。パッケージは、シンプルなファイルサーバーで運用されています。まずは、Dockerのリリース情報ページに移動して、20.10.20のような最新のバージョンを見つけます。それから、containerdのGitHubページに移って、containerdのバージョン番号を確認します(「1.6.8」のように記載されているはず)。

以下の一連のコマンドを実行すると、使用しているプラットフォームに適したパッケージ一式をダウンロードすることができます。<DOCKER_VERSION><CONTAINERD_VERSION>は、それぞれ先ほど確認した現在のDockerとcontainerdのバージョン番号に置き換えてください。

$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/docker-ce_<DOCKER_VERSION>~3-0~ubuntu-focal_amd64.deb -o docker-ce.deb
$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/docker-ce-cli_<DOCKER_VERSION>~3-0~ubuntu-focal_amd64.deb -o docker-ce-cli.deb
$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/containerd.io_<CONTAINERD_VERISON>-1_amd64.deb -o containerd.deb

また、ブラウザから、Ubuntuバージョンのディレクトリ一覧にアクセスし、ファイルをダウンロードして、利用可能なすべてのバージョンを確認することもできます。

Docker CE、CLI、containerdパッケージをダウンロードしたら、以下のコマンドを実行してインストールします。

$ sudo apt install ./docker-ce.deb ./docker-ce-cli.deb ./containerd.deb

上のスクリプトを使わずに、自分でパッケージをダウンロードした場合には、ファイル名を適宜変更してください。

3. インストールスクリプトを使ってDockerをインストールする

Dockerの便利なスクリプトを使用すると、すべてのDockerコンポーネントのインストールをまとめて実行できます。自動で行われるため、システム処理中は何もせずに待機していればOKです。

まずは、スクリプトをダウンロードします。

$ curl -fsSL https://get.docker.com -o get-docker.sh

次に、スクリプトをroot権限で実行。

$ sudo sh get-docker.sh
Executing docker install script
...

スクリプトの処理が完了するまで待ちましょう。完了後は、Dockerがインストールされたことを示すメッセージが表示されます。

なお、このスクリプトは、汎用的な選択肢であり、スクリプトのソースを直接編集しない限りは、その挙動に手を加えることはできません。また、Dockerの更新用には設計されていないため、依存関係を最新バージョンに変更することもできません。

Ubuntu上でのDocker Engineの動作を確認する

上記いずれかの方法でDockerをインストールしたら、コンテナを起動して、正常に動作することを確認しましょう。

$ sudo docker run hello-world

Dockerクライアントにより、Docker Hubリポジトリからhello-world:imageが取り込まれます。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:7d246653d0511db2a6b2e0436cfd0e52ac8c066000264b3ce63331ac66dca625
Status: Downloaded newer image for hello-world:latest

その後、新規コンテナが自動で作成されます。hello-worldイメージは、Dockerの基本情報を出力後すぐに終了する、という簡単なコマンドを実行する構成になっています。

Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 (amd64)
 3. The Docker daemon created a new container from that image which runs the
 executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
 to your terminal.

こんにちは!
このメッセージは、インストールが正しく行われたことをお知らせするメッセージです。
このメッセージは、以下の手順で生成されています。
1. DockerクライアントがDockerデーモンに通信
2. DockerデーモンがDocker Hubからhello-worldイメージを取り込む(amd64)
3. Dockerデーモンがそのイメージで新規コンテナを作成し、このメッセージを生成するファイルを実行
4. DockerデーモンがこのメッセージをDockerクライアントに送り、Dockerクライアントが端末に送信
(英語原文の日本語訳)

上記のようなメッセージが表示されれば、Dockerが使用できる状態です。デーモンによって、Docker Hubからhello-world:latestイメージが正しく取り込まれ、イメージをもとにコンテナが作成されています。最初の「Hello from Docker!」以降の行は、すべてコンテナ内の処理により出力されています。

UbuntuでのDocker Engineの権限設定

Docker Engineのインストールの際には、通常、dockerCLIコマンドの実行にroot権限が必要になります。これでは、各コマンドの前にsudoを記述しなければならず面倒です。

上でご説明した手順でDocker Engineをインストールした後、自分をdockerグループに追加すると、これを回避できます。この変更を加えると、通常のユーザーとして、sudoを記述せずにdockerコマンドを実行する権限が得られ、CLIの操作が楽になります。

まずは、dockerグループが存在しているかどうかを確認します。

$ sudo groupadd docker

次に、自分をグループに追加します。

$ sudo usermod -aG docker $USER

過去にsudodockerコマンドを実行したことがある場合は、~/.dockerディレクトリの権限を編集する必要があります。

$ sudo chown $USER:$USER /home/$USER/.docker -R
$ sudo chmod g+rwx $HOME/.docker -R

これにより、自分のユーザーアカウントを使ったディレクトリ内でのファイルの読み取りと書き込みが許可されます。

システムから一度ログアウトし、再度ログインして、新規グループメンバーシップを有効にします。それから、sudoを使わずにdockerコマンドを実行してみましょう。

$ docker run hello-world

これで、UbuntuでのDockerのセットアップは完了です。デーモンが自動で起動するように設定されているため、これについての設定は不要です。高度な構成でのインストールについては、Dockerのユーザーマニュアルで独自のネットワーク、ログ、ストレージ管理を設定する方法をご確認ください。

UbuntuにDocker Composeを追加する

Docker Composeは、複数のコンテナを使用する開発作業を簡易化してくれる、Dockerの人気ツールです。dockerCLIでは、各コマンドは1つのコンテナのみを対象としますが、docker composeは、実行ごとに複数のコンテナを起動・停止することができます。これによって、フロントエンドやバックエンド、データベースの各サービスが別々に存在するシステムの管理が容易になります。

Docker Composeは、現在dockerCLIの一部として利用可能です。Compose V2プラグインは、公式のインストールスクリプトを使用してDockerをインストールすると、同梱されています。また、以下のコマンドを使って、aptで利用することも。

$ sudo apt install docker-compose-plugin

または、最新の.debアーカイブをダウンロードして、インストールすることも可能です。

$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/docker-compose-plugin_2.6.0~ubuntu-focal_amd64.deb -o docker-compose-plugin.deb
$ sudo apt install -i ./docker-compose-plugin.deb

docker compose versionコマンドを実行して、Composeが動作していることを確認してください。

$ docker compose version
Docker Compose version v2.6.0

UbuntuにDocker Desktopをインストールする方法

Docker Engineは、CLIの使用に限定されます。一方で、Docker Desktopは、グラフィカルな管理画面、内蔵のKubernetesサポートを特徴としています。さらにコンテナのワークフローを簡素化するサードパーティ製拡張機能を追加することもできます。作業環境での使いやすさを重視するなら、Docker Desktopが優れた選択肢になります。

Docker Desktopをインストールするには、まずaptを使用して、いくつかの依存関係をインストールします。

$ sudo apt update
$ sudo apt install ca-certificates curl gnupg lsb-release

次に、以下のコマンドを実行し、Dockerのaptリポジトリを追加します。Docker Desktopはここにはありませんが、このリポジトリ内のパッケージは、Debianアーカイブから依存関係として参照されます。

$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update

curlコマンドで、DockerのUbuntu用GPG鍵をダウンロードし、標準のOpenGPG エンコーディングに変換して、aptのキーリングディレクトリに保存します。chmodで、aptが確実に検出できるように、キーリングファイルに対して権限を設定します。

Docker Desktop Debianアーカイブをドキュメント内のリンクからダウンロードすると、Linux用Docker Desktopの最新バージョンを入手できます。その後、aptでダウンロードしたバージョン番号を使って、パッケージをインストールします。

$ sudo apt install ./docker-desktop-4.11.0-amd64.deb

すると、Docker Desktopがアプリランチャーで表示されます。Docker Desktopを起動して、UIを開きましょう。ターミナルでdockerdocker composekubectlのコマンドを実行することも可能です。また、シェルスクリプトにメニューが追加され、Docker Desktopのステータス表示や簡単な設定が行えるようになります。

Docker Desktop初回起動時には、サービス契約書への同意が求められます。同意にチェックを入れて「Accept」ボタンを押したら、仮想マシンの起動が始まります。

しばらくすると、管理画面が表示されます。この画面で、一般的なイメージからコンテナの作成まで、簡単に操作を行うことができます。ターミナルコマンドを操作する必要はありません。

UbuntuにインストールされたDocker Desktop
UbuntuにDocker Desktopをインストール

WordPressとDocker Desktopを利用するなら「DevKinsta」が便利

Dockerの強みを活用したツールとして「DevKinsta」をおすすめします。DevKinstaは、WordPressテーマやプラグインの構築に便利な無料で使えるローカル開発ツールです。Dockerを利用し、WordPressサイトを完全に分離することで、安全性が確保されます。サーバーの面倒なセットアップは不要です。WordPressプロジェクトの開発をすぐに始め、開発を終えたら、Kinstaプラットフォームにそのままデプロイすることができます。

DevKinstaは、macOS、Windows、Ubuntuでインストール可能です。

まとめ

多くの開発者がコンテナを使い始めるきっかけとなるのが、Docker。Docker Engine、Docker Desktopは、Ubuntuに簡単にインストール可能です。Dockerを使えば、コンテナ上でアプリを構築・実行し、開発作業の簡略化、環境間の差異解消を実現することができます。

あわせて、WordPressのテーマやプラグインを開発するなら、DevKinstaがおすすめです。ローカル環境での開発と素早いサイトのデプロイを後押しします。

James Walker

James Walker is the founder of Heron Web, a UK-based software development studio providing bespoke solutions for SMEs. He's experienced in delivering custom software using engineering workflows built around modern DevOps methodologies. James is also a freelance technical writer and has written extensively about the software development lifecycle, current industry trends, and DevOps concepts and technologies.