Docker サーバー設定
単一コマンドでデータベースサーバーを起動
Docker Server Setup
歴史的注記: これは 2015 年のローカル開発向けリファレンスです。古いワークフローを理解するには役立ちますが、これらのスニペットを現在の本番環境のアドバイスとして扱わないでください。現在は、Docker Compose ファイル、カスタムネットワーク、イメージバージョンの固定、認証、シークレット、そして更新自動化のレビューが安全なデフォルトとなっています。
Who’s this guide for?
- アプリを「使い捨て」データベースでテストしたいことはありませんか?
- 疑わしいコードベースを引き継いだ?既存のデータベースへのアクセスを共有したくない?
- セキュリティに敏感なクライアントと仕事をしている?汚染リスクを回避したい!コンテナを使い、データ永続性を管理せよ!
- レガシーアプリが 12 年前の MySQL バージョンに依存しているため、開発環境を最新のデータベースにアップグレードできない?
そんな理由で足止めされることはもうありません!
Quick Links To 1-liners
この記事では、最も人気のあるデータベースを起動するための 1 行コマンドを紹介します。対象データベースは以下の通りです:
注記: これらのコマンドはローカル開発用のショートカットとして記述されています。実運用に流用する場合は、認証、シークレット管理、バックアップ、ネットワークポリシー、イメージの固定、アップグレード計画を必ず追加してください。
上級 Docker ユーザー:
docker-composeに慣れている場合は、以下のシェルコマンドをdocker-compose.yml用に変換すると良いでしょう。
Postgres Server
コンテナを起動し、名前を
pg-localhostにします
#Store db files on a local path, outside the containermkdir -p $HOME/.postgres-data
docker run \ --name pg-localhost \ -p 127.0.0.1:5432:5432 \ -e POSTGRES_PASSWORD=password \ --restart unless-stopped \ -it \ --shm-size=256mb \ postgres:16-alpine \ postgres -c 'listen_addresses=*' \ -c 'password_encryption=scram-sha-256' \ -c 'shared_memory_type=sysv' \ -c 'shared_buffers=256MB' \ -c 'max_connections=200'必要に応じてコマンドラインオプションを調整してください。(
postgres:16-alpineイメージ名の後に続くのが postgres デーモンの引数です。postgres -c 'listen_addresses=*'...を参照)
postgresユーザーでpsqlプロンプトにアクセスする
docker exec --user postgres -it pg-localhost psqlコンテナのシェルに root で入る
docker exec -it pg-localhost bash注記: 上記コマンドは公式の Alpine Linux ベースイメージを使用しています。通常の Debian 環境とは異なります。
Debian/Ubuntu ベースイメージを使用したい場合は、
postgres:12-alpineをpostgres:12に置き換えてください。
MongoDB Server
mkdir -p $HOME/.mongodb/data
docker run -d \ --name mongodb \ --restart on-failure:5 \ -p 127.0.0.1:27017:27017 \ -v $HOME/.mongodb:/data \ mongo:7 \ bash -c 'mongod --bind_ip 0.0.0.0'サーバーが起動したら、データが $HOME/.mongodb にあることを確認します:
ls -lach $HOME/.mongodbmongosh CLI ツールでサーバーに接続してみましょう。(インストールしていない場合は下記を参照してください。)
#> デフォルト引数で実行:mongosh以下のような出力が表示されるはずです:

Mongo CLI ツールのセットアップ
brew と macOS の使用方法
brew tap mongodb/brewbrew install mongodb-community-shellMysql Server
WARNING: 以下の
MYSQL_ROOT_PASSWORDのパスワードは必ず変更してください。
mkdir -p $HOME/.mysql
docker run -d \ -v $HOME/.mysql:/var/lib/mysql \ -p 127.0.0.1:3306:3306 \ --name mysql-$USER \ -e MYSQL_DATABASE=$USER \ -e MYSQL_ROOT_HOST='172.*.*.*' \ -e MYSQL_ROOT_PASSWORD='p@ssw0rd' \ mysql/mysql-server:8ElasticSearch Server
mkdir -p $HOME/.elastic
docker run -d \ --name elastic \ -p 127.0.0.1:9200:9200 \ -p 127.0.0.1:9300:9300 \ -v $HOME/.elastic:/data \ docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs 'Security Notes
NOTE:
-p 127.0.0.1:27017:27017のようにローカル IP アドレスを指定したポートオプションは、Docker サーバーの localhost ネットワーク以外からのアクセスをブロックします。
公開ポートにしたい場合はローカル IP プレフィックスを外し、-p 27017:27017のように指定してください。必要なセキュリティ対策を必ず実施してください。
Recommended: 常にポートスキャンツール(例: nmap、masscan)を使い、別ネットワーク上の別システムからネットワーク設定を検証することを推奨します。
データベースサーバーを起動するコマンドが揃ったので、次はアプリケーションを Docker イメージとしてパッケージ化します。パート 2は以下に続きます。
NodeJS Web アプリのパッケージング
- プロジェクトのルートに空ファイル
Dockerfileを作成します。 - (任意・推奨)
.dockerignoreを.gitignoreと同様のルールで作成し、サイズの大きい不要なパスを除外します。デフォルトではすべてのプロジェクトファイルが含まれます。
アプリのルートに Dockerfile を作成
# Example for NodeJSFROM node:22EXPOSE 3000COPY . /app/WORKDIR /appRUN apt-get update && apt-get dist-upgrade -yqqRUN ["npm", "install"]
# Overridable CommandCMD ["npm", "start"]Dockerfile の使い方を示し、コンソール上で結果を確認する方が分かりやすいです(以下のコマンド参照)。
ターミナルでプロジェクトフォルダへ cd し、変更をデプロイするたび、または OS や環境設定を変更・アップグレードしたいときは、次の build コマンドを 必ず 実行してください。
docker build -t app-name-here .主要な Docker コマンドリファレンス
Docker イメージのビルド
docker build -t app-name-here .DB サーバーへのリンク付き Web アプリの作成/実行
docker network create app-localdocker network connect app-local mongodbdocker network connect app-local elasticdocker run -d --name webapp01 --network app-local -p 3000:3000 app-name-hereインタラクティブに実行(デーモン化せず、ターミナル上)
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bashコンテナインスタンスまたはイメージの削除
重要: マウントされたボリュームパスに保存されていないデータはすべて失われます!!
# イメージの削除docker rmi -f app-name-heredocker rm -f webapp01# ここから上の `docker run...` を再実行してください# 例として、上記の DB インスタンスを停止するには、次のように実行します(`docker stop {mongo,elastic}` などで開始):docker rm -f mongo elastic