サーバー本体を再起動時に自動でDockerのコンテナも立ち上げたい場合

docker-compose up -dを、起動時に任意のディレクトリで自動で叩いてほしい!

みたいな場合。

再起動のたびに叩くのもだるいしな。

今回の環境

  • Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-56-generic x86_64)
    • Docker 20.10.22, build 3a2c30b
      • Debian GNU/Linux 10
        • Laravel8.0
        • Vue2
      • nginx
      • mysql
      • phpmyadmin

やり方

このサイトがわかりやすかったので、参考にしながら進めていく。

Abillyz

まずはサーバーにログインする。

sshで接続してもいいし、オンプレミスなら直接キーボードでコマンドを叩いてもいい。

コマンドが通るか確認

まずはsu -でroot権限に入る。

先ほど紹介したお手本のサイトはsudo使ってるけどやり方は任せる。

cd プロジェクトディレクトリまでのフルパス ; docker-compose up -d

が通るかどうかを確認する。

既に起動してたらもう起動してるよ!ってメッセージが出てくるけどそれでいい。

docker-composeなのかdocker composeなのかも環境に合わせて叩くこと。


自分の場合は/root直下にプロジェクトディレクトリを配置しているので、

cd /root/プロジェクトディレクトリ/ ; docker-compose up -d

を叩いたらコマンドが通ったので、これを起動時に走らせる設定をこれから仕込んでいく。

スクリプト作成

vim /etc/rc.local

を叩く。

vimがインストールされていなければ、

apt-get update

apt-get install vim

を叩いてインストールする。

vimコマンドで作成するスクリプトの内容はこんな感じ

#!/bin/sh
cd /root/プロジェクトディレクトリ/ ; docker-compose up -d

さっき自分で叩いて通ることが確認できたコマンドを入れるわけやな。

ちなみに編集するときはi

保存するときは エスケープ →:wq

を叩くのがvimのお約束。

よーわからん人はググってくれ。

権限変更

下記のコマンドを叩く。

chmod u+x /etc/rc.local
chmod 755 /etc/rc.local

多分ルート権限じゃなくてもさっき作ったスクリプトを実行できるようにしてるんやと思う。

自動で起動時にスクリプトを呼び出せるようにする

unit作成

vim /etc/systemd/system/rc-local.service

[Unit]
Description=/etc/rc.local

[Service]
ExecStart=/etc/rc.local
Restart=no
Type=simple

[Install]
WantedBy=multi-user.target

自動起動設定のコマンド

systemctl enable rc-local.service

これでok!

コマンドラインからrebootしたり、電源ボタンから再起動したりしても

起動完了後に自動でコンテナを立ち上げてくれるようになった!

疑問点

サーバーにログインしなくても電源さえ入ればコンテナは立ち上がるのか

→立ち上がった!

ubuntuデスクトップに設定したが、実機のログイン画面からログインする必要はなかったし

sshで入らずともアプリにブラウザからアクセスできた。

ただ、安定動作に入るまでには時間がかかった。

初回アクセスだけやたら遅くなることがあるが、サーバー起動が後10分ぐらいしたらブラウザのキャッシュを消した状態でもページがサクサク読み込まれた。

rebootコマンドであろうと物理ボタン等での再起動であろうと自動で起動する?

→する

どちらでも挙動に変わりはなかった。

ちゃんとコンテナは起動してアプリも立ち上がった。

docker-compose.ymlに特別な記述は必要ないのか

なかった。

ほかの人の記事には、docker-compose.ymlにて

自動起動したいコンテナごとにrestart: always

を追記する必要があるって書いてたけど

別になくてもできた。

逆にdocker-compose.ymlにrestart: alwaysの記述を含めると、なんかブラウザからアプリにアクセスしたときのロードがめちゃくちゃ重くなっちゃったからやめた。

ていうか開発環境でこれ入力しちゃうと、複数のアプリを開発するときなんかめちゃくちゃにならんか??

って思った。

どういう場合に必要か

  • クラウド環境で、何か理由があって再起動を行うことがたまにある場合
  • オンプレミス環境で停電時等の時に電源が切れても、次回起動時にはコンテナも自動で立ち上がってほしい場合
  • 自分以外の人がサーバーを再起動してしまったときに利用者がパニックにならないようにしたい
無制限に質問可能なプログラミングスクール!

万が一転職できない場合は、転職保障全額返金できるコースもあり!!

無制限のメンター質問対応

 

DMMウェブキャンプでプログラミングを学習しませんか?

独学より成長スピードをブーストさせましょう!

 

まずは無料相談から!

おすすめの記事