
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
- Debian GNU/Linux 10
- Docker 20.10.22, build 3a2c30b
やり方
このサイトがわかりやすかったので、参考にしながら進めていく。
まずはサーバーにログインする。
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
の記述を含めると、なんかブラウザからアプリにアクセスしたときのロードがめちゃくちゃ重くなっちゃったからやめた。
ていうか開発環境でこれ入力しちゃうと、複数のアプリを開発するときなんかめちゃくちゃにならんか??
って思った。
どういう場合に必要か
- クラウド環境で、何か理由があって再起動を行うことがたまにある場合
- オンプレミス環境で停電時等の時に電源が切れても、次回起動時にはコンテナも自動で立ち上がってほしい場合
- 自分以外の人がサーバーを再起動してしまったときに利用者がパニックにならないようにしたい