「ローカルでは動くのに本番で動かない」── この消耗を根絶するのが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手でデプロイできる快感を味わえば,もう手作業には戻れない.