能書き
私的サーバー構築日誌:仕切り直しからの自宅サーバー構築の続きです。
以前Dockerコンテナを作成しましたが、Dockerコンテナはマシンを再起動すると停止してしまいます。マシンを起動した時に自動起動するような設定を模索しました。
目標
- マシン再起動時に、指定のDockerコンテナを自動起動する。
- Dockerコンテナは docker compose で作成。
参考文献
- Dockerデーモンやコンテナ、コンテナ内のサービスの自動起動方法の解説(Linux版) - めもたんす
- dockerのコンテナの自動起動をsystemdにて行う際の注意点について - めもたんす
- Docker Compose restart の挙動 - 技術備忘記
概要
Dockerにはrestart
というオプションがある模様。恥ずかしながら知りませんでした。参考文献参照。
これがわかれば、後はやってみるだけですな。
やってみる
Dockerコンテナの置き場所
まずは、今後を見据えて細かい決め事をします。
今後、restart: unless-stopped
の設定でDockerコンテナを複数立てる事になると思われます。
その置き場所は、管理者アカウントのhomeディレクトリにdocker-コンテナ名
ディレクトリを作成して置く事にします。
テスト用Dockerコンテナ作成
cd
mkdir -p docker-test
cd docker-test
cat <<___ >docker-compose.yml
version: '3.8'
services:
test:
image: ubuntu:22.04
build: .
tty: true
restart: unless-stopped
___
今回はDockerfile
は不要です。このdocker-compose.yml
だけでコンテナを起動します。
docker compose up -d
確認。
docker compose ls
例えば管理者ユーザー名がadminの場合、下記のようになります。
$ docker compose ls
NAME STATUS CONFIG FILES
docker-test running(1) /home/admin/docker-test/docker-compose.yml
sudo reboot
マシン再起動後、ログインして様子を見ます。
docker compose ls
確かにDockerコンテナが自動起動しているようです。
$ docker compose ls
NAME STATUS CONFIG FILES
docker-test running(1) /home/admin/docker-test/docker-compose.yml
念の為、Dockerコンテナにログインしてみましょう。
cd
cd docker-test
docker compose exec test /bin/bash
exit
ここで、Dockerコンテナをstop
してみます。
docker compose stop
確認。
docker compose ls -a
止まったようです。
$ docker compose ls -a
NAME STATUS CONFIG FILES
docker-test exited(1) /home/admin/docker-test/docker-compose.yml
この状態でマシンを再起動してみます。
sudo reboot
今度はDockerコンテナは停止している筈。ログインして様子を確認します。
docker compose ls -a
確かに停止していました。
$ docker compose ls -a
NAME STATUS CONFIG FILES
docker-test exited(1) /home/admin/docker-test/docker-compose.yml
確認できたら、綺麗さっぱり後始末しましょう。
cd
cd docker-test
docker compose down --rmi all --volumes
cd ..
rm -r docker-test
仕舞い
マシン再起動時に、指定のDockerコンテナを自動起動できるようになりました。停止した場合には自動起動しません。理想的です!