logo
Published on

nestjs + postgresql + devcontainerで環境を作る

著者
  • profile
    名前
    平原典彦
nestjs+postgresql+devcontainerで環境を作りたいと思います。
ディレクトリはこのような感じです。
srcnestjs のコードが入っています。
├── .devcontainer/
│   └── devcontainer.json
├── node_modules/
├── src/
├── .dockerignore
├── docker-compose.yml
├── Dockerfile
└── package.json

dockerの準備

まずは普通にdockerが動作するようにします。
Dockerfile
ARG NODE_VER FROM node:${NODE_VER} ENV NODE_ENV development RUN npm update -g npm RUN npm i -g @nestjs/cli USER node WORKDIR /usr/src/app COPY --chown=node:node ./ ./ RUN npm install EXPOSE 3000 CMD [ "npm", "run", "start:dev" ]
USER node を指定しないと権限の問題で node_modules のディレクトリが生成されません。
docker-compose.yml
services: node: build: args: - NODE_VER=20.17.0 context: . dockerfile: Dockerfile environment: TZ: 'Asia/Tokyo' ports: - '3000:3000' tty: true volumes: - ./:/usr/src/app - ./node_modules:/usr/src/app/node_modules depends_on: - db db: image: postgres:14 container_name: db volumes: - db-data:/var/lib/postgresql ports: - '5432:5432' environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password volumes: db-data: node_modules:
.dockerignore
node_modules
これで一度 docker compose up --build を実行してください。
問題なく動作したら次に .devcontainer を準備します。

devcontainer

.devcontainer/devcontainer.json
{ "name": "nestjs", "dockerComposeFile": "../docker-compose.yml", "service": "node", "workspaceFolder": "/usr/src/app" }
これでエディタを再起動すればコンテナが自動起動するはずです。