2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

devcontainerの利用サンプル

Last updated at Posted at 2023-08-01

devcontainer

devcontainer公式ページ
https://code.visualstudio.com/docs/devcontainers/containers

サンプルの構成

Next.js、Mongo DB、Azuriteをcomposeで環境作成
init.shで.envを作成して、Dockerfileで読み込みdocker-composeに渡すイメージ

root/
  ┣ .devcontainer
  ┃   ┣ devcontainer.json
  ┃   ┣ docker-compose.yml
  ┃   ┣ Dockerfile
  ┃   ┗ init.sh
  ┃
  ┣ src (Next.js)
.devcontainer/Dockerfile
FROM node:18-slim

ARG USERNAME=$USERNAME
ARG UID=$UID
ARG GID=$GID

USER $USERNAME

.devcontainer/docker-compose.yml
version: '3.2'

services:
  next:
    build:
      context: ..
      dockerfile: .devcontainer/Dockerfile
      args:
        UID: $UID
        GID: $GID
        USERNAME: $USERNAME
    depends_on:
      - mongo
      - azure-storage
    user: $UID:$GID
    tty: true
    command: sleep infinity
    volumes:
      - ../:/workspaces:cached
    environment:
      MONGO_URI: mongodb://root:example@mongo:27017/
    deploy:
      resources:
        limits:
          memory: 4GB
  mongo:
    image: mongo
    volumes:
      - mongo-data:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
  mongo-express:
    image: mongo-express
    ports:
      - 8081:8081
    depends_on:
      - mongo
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
  azure-storage:
    image: mcr.microsoft.com/azure-storage/azurite
    ports:
      - 10000:10000
      - 10001:10001
      - 10002:10002
    environment:
      AZURITE_ACCOUNTS: "devstoreaccount1;UseDevelopmentStorage=true"
    volumes:
      - azure-storage-data:/data
volumes:
  mongo-data:
  node_modules_volume:
  azure-storage-data:

featuresでzshとgitを設定

vscodeのフォーマット設定をromeで行う

.devcontainer/devcontainer.json
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-docker-compose
{
  "name": "Existing Docker Compose (Extend)",

  // Update the 'dockerComposeFile' list if you have more compose files or use different names.
  // The .devcontainer/docker-compose.yml file contains any overrides you need/want to make.
  "dockerComposeFile": "docker-compose.yml",

  // The 'service' property is the name of the service for the container that VS Code should
  // use. Update this value and .devcontainer/docker-compose.yml to the real service name.
  "service": "next",

  // The optional 'workspaceFolder' property is the path VS Code should open by default when
  // connected. This is typically a file mount in .devcontainer/docker-compose.yml
  // "workspaceFolder": "/workspace",
  "workspaceFolder": "/workspaces/",

  // Features to add to the dev container. More info: https://containers.dev/features.
  "features": {
    "ghcr.io/devcontainers-contrib/features/zsh-plugins:0": {},
    "ghcr.io/devcontainers/features/git:1": {}
  },

  // Use 'forwardPorts' to make a list of ports inside the container available locally.
  // "forwardPorts": [],

  // Uncomment the next line if you want start specific services in your Docker Compose config.
  // "runServices": [],

  // Uncomment the next line if you want to keep your containers running after VS Code shuts down.
  // "shutdownAction": "none",

  "initializeCommand": "${localWorkspaceFolder}/.devcontainer/init.sh",

  // Configure tool-specific properties.
  "customizations": {
    "vscode": {
      "settings": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "rome.rome",
        "[typescript]": {
          "editor.formatOnSave": true
        },
        "[typescriptreact]": {
          "editor.formatOnSave": true,
          "editor.defaultFormatter": "rome.rome"
        },
        "editor.codeActionsOnSave": {
          "source.fixAll.eslint": true,
          "source.fixAll": true,
          "source.organizeImports": true,
          "quickFix.rome": true
        },
      },
      "extensions": [
        "rome.rome",
        "dsznajder.es7-react-js-snippets",
        "mongodb.mongodb-vscode"
      ]
    }
  },

  // Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root.
  "remoteUser": "${localEnv:USERNAME}"
}

.devcontainer/init.sh
# create .env file
echo "UID=$(id -u $USER)" > .devcontainer/.env
echo "GID=$(id -g $USER)" >> .devcontainer/.env
echo "USERNAME=$USER" >> .devcontainer/.env

exit 0
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?