Dockerを使って自宅サーバ環境を構築する
複数のサーバー環境を必要としていても、Dockerを使用することで容易に、様々なバージョンのランタイムやライブラリがインストールされた環境を混在することができます。また、仮に環境が壊れてもすぐに作り直すことができます。
この記事では、Docker EngineとDocker ComposeプラグインをインストールしたUbuntu環境を使用しています。
systemdサービスへ登録
サーバーアプリケーションは通常、システム起動時に一緒に起動してくれたほうが、管理上の都合がよいです。
サービスの環境設定等はdocker-compose.yml に記載するため、逆にサービスファイルは単純にdocker compose up
やdocker compose down
を呼び出すだけで良いはずです。
そこでdocker-compose.yml毎にサービスファイルを記載するのではなく、docker composeを起動・終了する共通のサービスファイルを作成します。
例えば次のようなコードです。
[email protected]
[Unit]
Description=%i docker compose service
Requires=docker.service
[Service]
Type=simple
Environment=COMPOSE_FILE=/opt/docker-compose-service/%i/docker-compose.yml
ExecStartPre=/usr/bin/docker compose -f ${COMPOSE_FILE} down -v
ExecStart=/usr/bin/docker compose -f ${COMPOSE_FILE} up
ExecStop=/usr/bin/docker compose -f ${COMPOSE_FILE} down -v
[Install]
WantedBy=multi-user.target
dockerやdocker composeのインストール方法によって、各コマンドの/usr/bin/docker compose
は変わります。
ここでは、永続データはホスト端末とのバインドマウントを使用する前提で、
起動前と終了時に名前付きボリュームや匿名ボリュームも削除することで、ゴミが残らないようにしています。
/opt/docker-compose-service/
ディレクトリ上にサービス名のディレクトリを作成し、そこにアプリケーションを実行するdocker-compose.ymlファイルを置くようにします。
例えば軽量なセルフホストgitサーバである、giteaをセルフホストする場合は、/opt/docker-compose-service/gitea
上にgitea用のサーバコンテナとDBコンテナを記述したdocker-compose.ymlを配置し、
# サービス起動
$ systemctl start [email protected]
# サービス登録
$ systemctl enable [email protected]
とすると起動・サービス登録ができます。
注意点として、systemctl
を使用して起動した場合は、systemctl status
で状況やログを確認できますが、直接docker compose
コマンドを使用して起動した場合は、確認できません。