【Linux】UbuntuにDockerをインストールする方法

この記事では、Ubuntu にDockerをインストールする方法を解説します。
Docker Desktop とDocker Engine
Dockerとは、一言でいうと「プログラムを動かすための、持ち運びできる専用の箱(コンテナ)を作るための道具」です。
コンテナにしてから動かすことで、どこでも同じように動くようになります。
Dockerを使うと「私の環境では動かない!」みたいなトラブルがなくなるので、ツールを配りやすいわけですね。
Dockerには大きく分けて「Docker Desktop」と「Docker Engine」という2つの形があります。
簡単に言うと、Docker Engineは Docker を動かすのに必要な機能のみを提供し、Desktopの方はその機能を使いやすくするためにGUIをつけたものです。
この記事では「Docker Engine」をUbuntuにインストールしてみようと思います。
Docker Engineをインストールする
Dockerの公式GPGキーを取得する
「公式GPGキー」とは、「ある組織やプロジェクトが、自分たちの発行する情報やソフトウェアが『本物であり、改ざんされていないこと』を、デジタルな署名によって証明するための公開鍵」のことです。
これにより、ダウンロードしたソフトウェアが安全なものか、あるいは受け取った情報が信頼できるものかを、自分自身で確認できるようになります。これは、インターネット上で安全に情報をやり取りする上で、非常に重要な仕組みの一つです。
まず、以下のコマンドでapt でインストールできるパッケージリストを最新にしておきましょう。
sudo apt update
次に、Dockerインストールに必要なパッケージをインストールします。
sudo apt install ca-certificates curl
上記コマンドでインストールされるパッケージ
ca-certificates
パッケージ
ca-certificates
は、SSL/TLS接続において、Webサイトやサービスが正当なものであることを検証するための「信頼されたルート証明書」のセットを提供するパッケージです。
curl
パッケージ
curl
は、様々なプロトコル(HTTP, HTTPS, FTP, FTPS, SCP など)を使ってデータを転送するためのコマンドラインツールおよびライブラリ(libcurl)です。
次に、GPGキーを置く場所を以下のコマンドで作成します。
sudo install -m 0755 -d /etc/apt/keyrings
上記コマンドの意味
このコマンドは /etc/apt/keyrings
というディレクトリを誰でも見れるけど書き換えは管理者しかできない、特別なフォルダとして作成しています。
ここで実行しているinstall
というコマンドは 一般的な「インストール」という言葉から想像される「ソフトウェアを導入する」とは少し違います。ここでは、「ファイルやフォルダを、指定した権限で作成・コピーする」という役割のコマンドです。
コマンドでいうと、cp
+ mkdir
+ chmod
みたいな役割をもちます。-m 0755
の部分は作成するディレクトリの権限付与で、数字はそれぞれ以下のような意味を持ちます。
- 所有者(root): 読み・書き・実行(7)
- グループ: 読み・実行(5)
- その他: 読み・実行(5)
-d /etc/apt/keyrings
でディレクトリ名を指定しています。
その後、以下のコマンドでDockerの公式GPGキーを取得し、先ほど作成したディレクトリに置きます。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
上記コマンドの意味
curl
は インターネット上にあるファイルや情報をダウンロードするためのコマンドです。-fsSL
はcurl
コマンドに与える、いくつかの「おまじない」のような指示で、以下のような意味があります。
-f
(–fail): もしダウンロードに失敗したら、エラーとしてきちんと教えてね、という指示です。-s
(–silent): ダウンロード中の余計な情報(進捗状況など)は表示しないで、静かに実行してね、という指示です。-S
(–show-error):-s
で静かに実行するけれど、もしエラーが起きたらそのエラーメッセージだけは表示してね、という指示です。-L
(–location): もしダウンロード先が別の場所(リダイレクト)に変わっても、その新しい場所を追いかけてダウンロードしてね、という指示です。
これらを合わせると、「もしダウンロードに失敗したら教えてくれつつ、ダウンロード中はエラーだけは表示して、もし場所が変わっても追いかけてね」ということになります。
-o /etc/apt/keyrings/docker.asc
は「ダウンロードしたファイルを、指定した場所(/etc/apt/keyrings/
)に、指定した名前(docker.asc
)で保存する」という指示です。
ちなみに、-o
は「output file」(出力ファイル)の略です。
公式GPGキーを取得できたら、以下のコマンドで公式GPGキーにアクセス権限を付与します。
sudo chmod a+r /etc/apt/keyrings/docker.asc
a+r
で、「all」(全てのユーザー; a
)に「read」(読み込み権限; +r
)を付与するという意味です。
aptの提供元リストにリポジトリを追加する
apt
でインストールできるリストにDockerを追加します。
この処理は以下のコマンドで行うことができます。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
上記コマンドの意味
echo "..."
:
これは「指定された文字の塊を画面に表示する」コマンドです。
ここでは、二重引用符 "
の中にある長い文字列を、次のコマンドに渡す準備をしています。
"..."
の中身
「Dockerのソフトウェアがどこにあるか」を示す情報です。これはApt(ソフトウェア管理システム)が理解できる特別な書き方になっています。
deb
:
これは「Debian形式のパッケージがあるよ」というapt
への合図です。[arch=$(dpkg --print-architecture) ...]
:
ここでは、あなたのパソコンの「種類(CPUのアーキテクチャ、例:amd64
やarm64
など)」を自動で調べて、それに合ったDockerのソフトウェアを探すように指定しています。signed-by=/etc/apt/keyrings/docker.asc
:
これはダウンロードするソフトウェアは公式GPGキーで署名されていることを確認してねという指示です。https://download.docker.com/linux/ubuntu
:
Dockerが置いてある場所を指定しています。$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
:
ここで、自分のUbuntuのバージョンを自動で調べて、そのバージョンに合ったソフトウェアを探すようにしています。-
stable
:
「安定版のソフトウェアをダウンロードしてね」という指示です。
|
(パイプ):
これは特殊な記号で、左側のコマンド(echo
)の出力結果を、右側のコマンド(sudo tee
)の入力として渡す役割をします。
sudo tee /etc/apt/sources.list.d/docker.list
tee
コマンドは、受け取った情報を「画面に表示しつつ」、同時に「指定したファイルにも書き込む」という便利なコマンドです。sudo
をつけているので、管理者権限でファイルに書き込みます。
/etc/apt/sources.list.d/docker.list
が、apt
がインストールできるリストを保存する場所です。
> /dev/null
これは「リダイレクト」と呼ばれるもので、tee
コマンドが通常画面に出力する内容を、/dev/null
という「ゴミ箱」のような場所に捨てる、という意味です。
これにより、コマンドの実行中に余計な情報が画面に表示されず、必要な情報だけがファイルに書き込まれます。
最後にもう一度以下を実行します。
sudo apt update
Docker パッケージのインストール
最後に以下のコマンドでDocker パッケージ一式をインストールします。
(最新のバージョンがインストールされます)
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Docker グループにユーザーを追加する(任意)
Docker グループにユーザーを追加すると、dockerコマンドをsudo
なしで実行できるようになります。
一方で、docker
グループに属すると root 権限と同等のアクセスが可能になります(Docker を通じてホストの全ファイルにアクセスできるため)。信頼できるユーザーのみ追加してください。
通常、Docker をインストールすると自動的に docker
グループが作成されます。
以下で確認できます。
getent group docker
グループが存在すればOKです。
もしない場合は以下で作成できます。
sudo groupadd docker
現在のユーザーをDockerグループに追加します。
sudo usermod -aG docker $USER
実行後、シェルを再起動します。WSL2の人は一回ログアウトします。
これで、dockerコマンドをsudo
なしで実行できるようになります。
確認
最後に正常にインストールできたか確認してみましょう。
以下のコマンドで、hello-world
Dockerイメージを実行できます。
docker run hello-world
これで、「Hello from Docker!」と出ればOKです。(ほかにもいっぱい出力がでます。)
まとめ
この記事ではUbuntu にDockerをインストールする方法を解説しました。
Dockerは、「プログラムを動かすための、持ち運びできる専用の箱(コンテナ)を作るための道具」です。
今回は「Docker Engine」をUbuntuにインストールしてみました。
みなさんの参考になればうれしいです。
参考サイト
- Docker Engine公式ドキュメント