「ローカルでは動くのに本番で動かない」── この消耗を根絶するのがDockerだ.VPS1台でも再現性のある本番環境は十分に作れる.
対象はアプリは書けるがデプロイで詰まる個人開発者.読み終えたとき,docker composeで複数コンテナを動かす全体像が掴めている状態を目指します.
なぜ個人開発こそDockerなのか
個人開発は環境構築をやり直す機会が多い.サーバー移行・再構築のたびに手順を思い出すのは苦痛で,しかもミスが入り込む.
Dockerなら環境定義がコードになる.「このファイルさえあれば誰のどのサーバーでも同じ環境が立つ」── この再現性が,1人開発の最大の武器になる.
ステップ1:VPSにDockerを入れる
公式の導入スクリプトが最も確実だ.導入後,一般ユーザーをdockerグループに追加してsudo無しで使えるようにする.
Docker と compose プラグインの導入
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# 再ログイン後
docker compose versionステップ2:アプリをDockerfileで定義する
アプリの起動手順をDockerfileに書く.本番イメージは軽量ベースを選び,不要なものを含めないのがコツだ.
Node アプリの最小Dockerfile例
FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
CMD ["node", "server.js"]ステップ3:compose で複数コンテナをまとめる
アプリ+DB+リバースプロキシを1つのcompose.ymlで束ねる.依存関係も再起動ポリシーもここに宣言する.
compose.yml(アプリ+PostgreSQL)
services:
app:
build: .
restart: always
env_file: .env
depends_on: [db]
db:
image: postgres:16
restart: always
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- dbdata:/var/lib/postgresql/data
volumes:
dbdata:ステップ4:秘密情報は .env に逃がす
APIキーやDBパスワードをイメージやGitに焼き込んではいけない..envファイルに分離し,リポジトリからは除外する.
.gitignore と起動
echo ".env" >> .gitignore
docker compose up -d # バックグラウンド起動
docker compose logs -f app # ログ確認ステップ5:再起動・OS再起動に耐えさせる
restart: always を付ければ,コンテナ落ちやVPS再起動の後も自動で復帰する.個人開発の「気づいたら落ちてた」を防ぐ要だ.
デプロイ更新はgit pull → docker compose up -d –buildの2手で完結する.手順が固定化されることがDockerの最大の恩恵だ.
補論:Docker運用にはメモリの余裕が効く
複数コンテナを安定して回すには,メモリの余裕が地味に効く.アプリ+DB+プロキシを動かすなら2GB〜4GBあると安心で,ビルド時のスパイクにも耐えやすい.
高速NVMe・50種類以上のOSテンプレートに対応した国内VPS─シン・VPS─ はNVMe SSDでビルドやイメージpullが速く,後からメモリを増やせるため「最初は小さく,育ったら増強」というDocker運用と相性が良い.スナップショットを取ってから更新すれば,失敗しても即座に戻せる.
本番公開には独自ドメインを.取り扱い400種類以上のドメイン取得サービス─ムームードメイン─ で取得したドメインをプロキシコンテナに紐づければ,コンテナ構成のまま綺麗なURLで公開できる.
よくある質問
Q1:VPS1台でDBもコンテナで動かして大丈夫?
個人開発・小規模なら問題ない.ただしDBのデータは必ずvolumeに置き,定期バックアップを取ること.規模が育てばDBだけ分離・マネージド化を検討する.
Q2:Kubernetesは要らない?
個人開発にはオーバースペックだ.compose1枚で回るうちはそれが最善で,必要になってから学べば良い.
Q3:ビルドがVPSで重いときは?
手元やCIでイメージをビルドしてレジストリにpushし,VPSではpullするだけにすると軽くなる.次の記事のCI/CDと組み合わせると効く.
まとめ ― 環境を「コード」にすれば,もう環境構築で消耗しない
Dockerは個人開発の再現性を担保する.compose1枚に全構成を宣言すれば,サーバーが変わっても同じ環境が一発で立つ.
まずは小さなアプリを1つDocker化してVPSに上げてみよう.git pullとup -dの2手でデプロイできる快感を味わえば,もう手作業には戻れない.