理想の形になっていないのでそのうちブラッシュアップする…
フォルダ・ファイル構成
.
├── app //空フォルダ
├── db
│ └── pgsql-data //空フォルダ
└── docker-compose.yml
docker-compose.ymlを用意
2019年12月時点では下記が入ります。
Node.js : v13.2.0
PostgreSQL : psql (PostgreSQL) 10.11
version: '3'
services:
postgres:
image: postgres:10-alpine
container_name: "test-postgres-db"
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: secret
volumes:
- ./db/pgsql-data:/var/lib/postgresql/data
app:
image: node:13.2.0
ports:
- "8080:8080"
- "21337:1337"
volumes:
- ./app:/src
working_dir: /src
tty: true
depends_on:
- postgres
起動
docker-compose.yml
のあるディレクトリで。
$ docker-compose up -d
コンテナに入る
docker-compose.yml
のあるディレクトリで。
$ docker-compose exec app /bin/bash
strapiをインストール
app
コンテナに入り、strapi
をインストールしたいディレクトリで。
※このdocker-composeではworking_dir
としてホストの./app
をマウントしている/src
を指定しているので、入ったそのまま/src
が楽だと思います。
npx create-strapi-app test-app
strapi設定
dockerコンテナの設定に合わせる。Hostをdocker-compose.yml
内のサービスの名前に合わせると接続できる。
? Choose your installation type Custom (manual settings)
? Choose your default database client postgres
? Database name: postgres
? Host: postgres
? Port: 5432
? Username: postgres
? Password: ******
? Enable SSL connection: No
ログ
Creating a project with custom database options.
Creating files.
Dependencies installed successfully.
Your application was created at /src/test-app.
Available commands in your project:
yarn develop
Start Strapi in watch mode.
yarn start
Start Strapi without watch mode.
yarn build
Build Strapi admin panel.
yarn strapi
Display all available commands.
You can start by doing:
cd /src/test-app
yarn develop
DB接続周りでエラーが出ている場合は、postgres
のコンテナがうまく起動していないなどをうたがう・
strapiを起動
cd test-app
yarn develop
ログ
$ strapi develop
Building your admin UI with development configuration ...
✔ Webpack
Compiled successfully in 42.05s
[2019-12-13T11:59:45.458Z] info File created: /src/test-app/extensions/users-permissions/config/jwt.json
Project information
┌────────────────────┬──────────────────────────────────────────────────┐
│ Time │ Fri Dec 13 2019 11:59:45 GMT+0000 (Coordinated … │
│ Launched in │ 12783 ms │
│ Environment │ development │
│ Process PID │ 8151 │
│ Version │ 3.0.0-beta.17.8 (node v13.2.0) │
└────────────────────┴──────────────────────────────────────────────────┘
Actions available
One more thing...
Create your first administrator 💻 by going to the administration panel at:
┌─────────────────────────────┐
│ http://localhost:1337/admin │
└─────────────────────────────┘
[2019-12-13T11:59:46.015Z] debug HEAD index.html (90 ms) 200
[2019-12-13T11:59:45.999Z] info ⏳ Opening the admin panel...
docker-compose.yml
で21337へのアクセスを1337につながるようにしてあるので、このコンテナのhttp://localhost:1337/admin
にホスト(Mac)側からアクセスするには、http://localhost:21337/admin
でアクセス出来るようになっている。
docker-compose.ymlに変更を加える
次回以降docker-compose up -d
でstrapiの起動まで行えるようにdocker-compose.yml
を変更しておく。
TODO: 変更したくないし、Dockerfile
も書きたくないので、になんとかできないか模索する
version: '3'
services:
postgres:
image: postgres:10-alpine
container_name: "test-postgres-db"
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: secret
volumes:
- ./db/pgsql-data:/var/lib/postgresql/data
app:
image: node:13.2.0
ports:
- "8080:8080"
- "21337:1337"
volumes:
- ./app:/src
working_dir: /src/test-app #strapiに合わせて変更
tty: true
depends_on:
- postgres
command: yarn develop # develop起動用にコマンドを指定
ストップする
docker-compose.yml
のあるディレクトリで。
docker-compose stop
(おまけ)ホストからDBにアクセス
基本的にデフォルトです。パスワードはdocker-compose.yml
のPOSTGRES_PASSWORD
に入力したものが使われます。
コンテナ間の通信とはホスト設定が違います。
項目 | 値 |
---|---|
Host | 127.0.0.1 |
Port | 5432 |
User | postgres |
Password | secret |
Database | postgres |
(おまけ)APP(GUI)を活用する
Docker composeはKitematicを、ホストからのDB接続はTablePlus(or 他のGUIクライアント)の利用を推奨。
Kitematicを使えば、上記の[コンテナに入る]はボタンクリックで出来るようになり、コマンドやサービス名を覚えていなくてもいいですし、DBはちまちまコマンド叩くよりGUIで情報量を増やすほうが作業効率がいいと思います。
まとめ
これはstrapiのサンプルですが、もちろんNode.js製のフレームワークであればなんでも応用可能です。
なにかやってみたいと思ったタイミングで、プロジェクトのディレクトリを作る→このdocker-compose.yml
を置いて微調整(nodeのバージョンなど)、いらなくなったら即捨てる、でいかがでしょうか。