はじめに
Dockerのインストール手順です。インストールは公式サイトをもとに行っています。
環境
Ubuntu20.4 (Windows10 + Vagrant)
公式サイト
手順
1.非公式の Docker パッケージの削除
ディストリビューションよっては、インストール済みのDockerパッケージが存在する場合があるようです。そのようなパッケージが、公式のDockerパッケージと競合する可能性があるため、公式のDocker Engineをインストールする前に削除します。
削除するDockerパッケージはつぎの6個です。
- docker.io
- docker-compose
- docker-compose-v2
- docker-doc
- podman-docker
$for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
2.Dockerのインストール
インストール方法はいくつかありますが、aptでインストールします。普通はaptでインストールするものだと思います。
まずは、CA証明書をインストールします。こちらはDockerのHTTPS通信で必要になります。curlはインストール済であれば不要です。
$sudo apt-get update
$sudo apt-get install ca-certificates curl
インストールされたことを確認します。
$apt list --installed | grep ca-ccertificates
/etc/apt/keyringsディレクトリを作成します。
$sudo install -m 0755 -d /etc/apt/keyrings
keyringsディレクトリのパーミションが755で作成されていることを確認します。
$ls -l /etc/apt
公開鍵をダウンロードします。公開鍵はPGPによって生成されています。
$sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
etc/apt/sources.list.d/docker.list にDockerのリモートリポジトリのアドレスを追加します。
Dockerは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
更新した内容を確認します。
$cat /etc/apt/sources.list.d/docker.list
パッケージの一覧を最新にします。
$sudo apt-get update
ここに来てようやく本番。Dockerをインストールします。aptを使ってインストールしていますが、Dockerのリモートリポジトリからインストールしています。
$sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Dockerがインストールされたことを確認します。
$apt list --installed | grep docker
Dockerイメージを実行してインストールが成功したことを確認します。
$sudo docker run hello-world
Dockerデーモンが起動されていることを確認します。
$service --status-all
$systemctl status docker
3.dockerグループの追加
プロセス間通信にTCPポートを使っているデーモンであれば、一般ユーザーでも利用できますが、UNIXソケットを使っている場合は、基本的にrootでないと利用できないようになっています。DockerデーモンはUNIXソケットを使っておりrootでないと利用できません。
つまり、dockerコマンドを利用するときは、先頭にsudoをつけて実行することになります。毎回sudoを付けなくてもいいようにするには、dockerグループを作成してdockerグループに自分のユーザーを追加すれば対応できます。dockerグループを用意しておくと、DockerデーモンがdockerグループからUNIXソケットにアクセスできるようになります。
ディストリビューションによっては、dockerグループを手動で作成しなくても、自動で作成されるようになっている場合があるようです。ちなみに、自分の環境では自動で作成されていました。
$cat /etc/group
ユーザーをdockerグループに追加します。ここに関しては自動で行われません。必ず、手動で行う必要があります。
sudo usermod -aG docker $USER
追加されたことを確認します。
$cat /etc/group
docker:x:996: # 変更前
docker:x:996:vagrant # 変更後
グループへの追加を再ログインすることなく反映させます。
$newgrp docker
sudoを付けずにdockerコマンドが実行できることを確認します。
$docker run hello-world
dockerデーモンが自動起動になっているかどうかを確認します。インストール直後はデフォルトでは自動起動になっています。
$systemctl is-enabled docker.service
$systemctl is-enabled containerd.service
enabled
自動起動を止めたい場合はつぎのコマンドで止めます。
$systemctl disable docker.service
$systemctl disable containerd.service
4.デフォルトのログドライバーを構成する
Dockerはjson-fileというログドライバーを利用してログを収集します。json-fileの代わりに、OSが持っているjournald-systemd、rsyslogを利用することもできます。
json-fileを使う場合、ログローテを行う機能は自動で設定されていないため、デフォルトのままにしておくと、ログはどんどんと肥大化していくことになります。json-fileのログローテは自分で設定する必要があります。
次のファイルを新規作成します。デフォルトでは/etc/docker/daemon.jsonファイルは存在していません。
$vi /etc/docker/daemon.json
つぎのようにファイルを編集します。ログは10MBまでとして、履歴を5ファイルまで保持しますという例です。
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
}
}
設定ファイルを有効にするためにデーモンを再起動します。
$sudo systemctl restart docker.service
これで、json-fileのログローテが有効になりました。