はじめに
2013年にDockerが誕生してから10年経ち、使い古いされてきた。
もっと言うと、コンテナ環境=Kubernetesと言われるくらいオーケストレーションツールが普及している。
コンテナエンジンとしては、Docker以外にもPodmanといった新種も出ている。
そんな中でDocker環境の構築を記すのは、私がより実践的なコンテナ開発・運用方法を習得する必要が出てきたからです。
規模の大きいシステムをコンテナ環境で運用することを検討(画策)している。
#docker を学び直します!
— LittleBear🐻 (@littlebear_6w6) April 21, 2023
断片的な知識を整理して、本番での運用能力を養うのと単純に兼務部署の上司にコンテナの良さをプレゼンする必要が出てきた。 pic.twitter.com/ksUqIM2Qlt
そんな状況で、技術評論社社から出版されている山田明憲氏著「Docker/Kubernetes 実践開発入門」に取り組むことに!
書籍にはLinux環境での構築はオプション的になっていて記述が少なかったので、やったことのメモも兼ねて当記事にまとめておく。
Linux環境でもDocker Desktopが使えるようになっているが、今回はあえてDocker EngineをインストールするCLI環境を構築した。
CLI環境にした理由は、この先の拡張性があるかなという程度です。
環境
項目 | 値 |
---|---|
OS | Linux |
ディストリビューション | Ubuntu 22.04.02 LTS |
Docker Engine | 23.0.4 |
Docker Compose | 2.17.2 |
Dockerインストール方法
基本的には公式サイトが丁寧に解説してくれているので、従ってインストールする。
1.aptの参照リポジトリにDockerを登録
$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg
2.DockerのGPGキーを登録
$ sudo install -m 0755 -d /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
3.リポジトリのセットアップ
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4.Docker Engine、containerd、Docker Composeをインストール
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5.稼働確認
$ sudo docker run hello-world
dockerコマンドをsudo
なしで実行できるようにする
使用しているUserをDockerグループに入れる。
これにより、/var/run/docker.sock
に書込み権限を付加できるのでsudo
なしでdocker ps
等が打てるようになる。
sudo usermod -aG docker $(whoami)
ログアウトしても反映されない場合があります。
その場合は、再起動しましょう!
docker imagesの格納場所を変更する
Dockerを多用した開発をした場合、docker imagesが増えてDiskを逼迫させる恐れがる。
デフォルトでは/var/lib/docker
がDocker Rootになっていて、このディレクトリにイメージが保存される。
また、複数のDiskをマウントしていてディレクトリを分けて保存している場合、/var
を入れているDiskは小さくてすぐ一杯になる恐れがる。
その場合は、容量が大きいDiskに移しましょう!
そして、/var/lib/docker
にシンボルリンクを張れば、細かい設定変更なしで問題なく使用できます!
- DockerデーモンとDockerソケットを止める
- Docker Rootディレクトリを移動
-
/var/lib/docker
のシンボルリンクを移動先に張る - DockerデーモンとDockerソケットを起動
-
hello-world
コンテナが起動するか確認
$ sudo systemctl stop docker.service
$ sudo systemctl stop docker.socket
$ mv /var/lib/docker ~/dockerRoot/
$ ln -s ~/dockerRoot/docker /var/lib/docker
$ sudo systemctl start docker.service
$ sudo systemctl start docker.socket
$ sudo docker run hello-world
Dockerプラグインにパスを通す
$PATH
に追加しても良いが、/usr/local/bin
にシンボルリンクを張る。
/usr/local/bin
はパスが通っているので、ここにシンボルリンクを張るだけで使用できる。
$ ln -s /usr/libexec/docker/cli-plugins/ /usr/local/bin/
参考資料