プロジェクトの初期化
このセクションでは、Dockim で新しいプロジェクトを初期化し、生成された設定ファイルを理解し、特定のニーズに合わせてカスタマイズする方法について説明します。
基本的な初期化
新しいプロジェクトの作成
新しい Dockim プロジェクトを開始する最もシンプルな方法:
# プロジェクトディレクトリを作成して移動
mkdir my-new-project
cd my-new-project
# Dockim 設定を初期化
dockim init
これにより、適切なデフォルト設定で重要な .devcontainer/ ディレクトリ構造が作成されます。
既存プロジェクトでの初期化
既存のプロジェクトに Dockim を追加できます:
# 既存のプロジェクトに移動
cd existing-project
# Dockim を初期化(既存ファイルは上書きしません)
dockim init
# 既存のファイルは影響を受けません
ls -la
Dockim は既存のファイルを上書きしないため、既にいくらかのコンテナ化設定があるプロジェクトでも安全に実行できます。
生成されるファイルについて
dockim init によって作成される各ファイルを詳しく見てみましょう:
devcontainer.json
開発環境を定義するメイン設定ファイル:
{
"name": "Development Container",
"dockerComposeFile": "compose.yml",
"service": "dev",
"workspaceFolder": "/workspace",
"features": {},
"customizations": {
"vscode": {
"extensions": []
}
}
}
主要プロパティ:
name: コンテナの表示名dockerComposeFile: Docker Compose 設定への参照service: dev container として使用する compose.yml のサービスworkspaceFolder: コンテナ内でのコードのマウント位置features: インストールする事前構築の開発ツールcustomizations: エディタ固有の設定
compose.yml
コンテナサービスを定義する Docker Compose 設定:
services:
dev:
build:
context: .
dockerfile: Dockerfile
volumes:
- ..:/workspace:cached
command: sleep infinity
主要要素:
services.dev: メイン開発コンテナbuild: コンテナイメージのビルド方法を指定volumes: プロジェクトコードをコンテナにマウントcommand: コンテナの実行を維持(dev container に必要)
Dockerfile
開発ツールを含むカスタムイメージ定義:
FROM mcr.microsoft.com/devcontainers/base:ubuntu
# 必要に応じて追加のツールをインストール
RUN apt-get update && apt-get install -y \
git \
curl \
&& rm -rf /var/lib/apt/lists/*
構造:
FROM: ベースイメージ(dev container 機能付きの Ubuntu)RUN: 追加ツールをインストールするコマンド- パッケージリストをクリーンアップしてイメージサイズを削減
セットアップのカスタマイズ
ベースイメージの選択
Dockim は適切なデフォルトを使用しますが、プロジェクトのニーズに合わせてベースイメージをカスタマイズできます:
Node.js プロジェクト用:
FROM mcr.microsoft.com/devcontainers/javascript-node:18
Python プロジェクト用:
FROM mcr.microsoft.com/devcontainers/python:3.11
Rust プロジェクト用:
FROM mcr.microsoft.com/devcontainers/rust:latest
多言語プロジェクト用:
FROM mcr.microsoft.com/devcontainers/base:ubuntu
# 複数のランタイムをインストール
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
&& apt-get install -y nodejs python3 python3-pip
開発ツールの追加
プロジェクトに必要なツールを含めるよう Dockerfile をカスタマイズ:
FROM mcr.microsoft.com/devcontainers/base:ubuntu
# システムユーティリティ
RUN apt-get update && apt-get install -y \
git \
curl \
wget \
unzip \
jq \
&& rm -rf /var/lib/apt/lists/*
# プログラミング言語ツール
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && apt-get install -y nodejs
# 開発ツール
RUN npm install -g yarn pnpm
RUN pip3 install black flake8 mypy
# dotfiles をセットアップ(オプション)
RUN git clone https://github.com/yourusername/dotfiles.git /tmp/dotfiles \
&& /tmp/dotfiles/install.sh \
&& rm -rf /tmp/dotfiles
フィーチャーの設定
Dev Container フィーチャーは簡単に有効化できる事前構築ツールです:
{
"name": "Development Container",
"dockerComposeFile": "compose.yml",
"service": "dev",
"workspaceFolder": "/workspace",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/node:1": {
"version": "18"
}
}
}
人気のフィーチャー:
docker-in-docker: dev container 内の Dockergithub-cli: GitHub CLI ツールnode: Node.js ランタイムpython: Python ランタイムgo: Go ランタイム
環境変数
開発環境用の環境変数を設定:
# compose.yml
services:
dev:
build:
context: .
dockerfile: Dockerfile
volumes:
- ..:/workspace:cached
environment:
- NODE_ENV=development
- API_URL=http://localhost:3000
- DEBUG=true
command: sleep infinity
または devcontainer.json で:
{
"remoteEnv": {
"NODE_ENV": "development",
"API_URL": "http://localhost:3000",
"DEBUG": "true"
}
}
ポートフォワーディング
サービス用の自動ポートフォワーディングを設定:
{
"forwardPorts": [3000, 8080, 5432],
"portsAttributes": {
"3000": {
"label": "Application",
"onAutoForward": "notify"
},
"8080": {
"label": "API Server",
"onAutoForward": "openPreview"
}
}
}
プロジェクトテンプレート
Web アプリケーションテンプレート
フロントエンドとバックエンドを持つ典型的な Web アプリケーション用:
FROM mcr.microsoft.com/devcontainers/javascript-node:18
# 追加ツールをインストール
RUN apt-get update && apt-get install -y \
postgresql-client \
redis-tools \
&& rm -rf /var/lib/apt/lists/*
# グローバル npm パッケージをインストール
RUN npm install -g @vue/cli create-react-app
# compose.yml
services:
dev:
build:
context: .
dockerfile: Dockerfile
volumes:
- ..:/workspace:cached
environment:
- NODE_ENV=development
command: sleep infinity
database:
image: postgres:15
environment:
POSTGRES_PASSWORD: dev
POSTGRES_DB: myapp
ports:
- "5432:5432"
redis:
image: redis:alpine
ports:
- "6379:6379"
データサイエンステンプレート
Python ベースのデータサイエンスプロジェクト用:
FROM mcr.microsoft.com/devcontainers/python:3.11
# システム依存関係をインストール
RUN apt-get update && apt-get install -y \
build-essential \
&& rm -rf /var/lib/apt/lists/*
# Python パッケージをインストール
RUN pip install \
jupyter \
pandas \
numpy \
matplotlib \
seaborn \
scikit-learn \
plotly
{
"forwardPorts": [8888],
"portsAttributes": {
"8888": {
"label": "Jupyter Lab",
"onAutoForward": "openBrowser"
}
}
}
マイクロサービステンプレート
複数のサービスを持つプロジェクト用:
# compose.yml
services:
dev:
build:
context: .
dockerfile: Dockerfile
volumes:
- ..:/workspace:cached
depends_on:
- api
- database
command: sleep infinity
api:
build:
context: ./api
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@database:5432/myapp
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
ports:
- "8080:8080"
database:
image: postgres:15
environment:
POSTGRES_PASSWORD: dev
POSTGRES_DB: myapp
ベストプラクティス
ファイル構成
設定を整理して保持:
.devcontainer/
├── devcontainer.json # メイン設定
├── compose.yml # コンテナオーケストレーション
├── Dockerfile # カスタムイメージ
├── docker-compose.override.yml # ローカル上書き(gitignore)
└── scripts/
├── postCreateCommand.sh # セットアップスクリプト
└── postStartCommand.sh # スタートアップスクリプト
バージョン管理
バージョン管理に含める:
.devcontainer/devcontainer.json.devcontainer/compose.yml.devcontainer/Dockerfile- セットアップスクリプト
バージョン管理から除外:
.devcontainer/docker-compose.override.yml- 機密環境ファイル
ドキュメント
チームメンバー用のセットアップを文書化:
# 開発セットアップ
## 前提条件
- Docker Desktop
- Dockim CLI
## はじめ方
1. `dockim init` (まだ実行していない場合)
2. `dockim build`
3. `dockim up`
4. `dockim neovim`
## サービス
- App: http://localhost:3000
- API: http://localhost:8080
- Database: localhost:5432
トラブルシューティング
よくある問題
ビルドの失敗:
# ビルドキャッシュをクリアして再ビルド
dockim build --no-cache
パーミッションの問題:
# Dockerfile に追加
ARG USERNAME=vscode
RUN usermod -aG sudo $USERNAME
ファイル同期の遅さ:
# パフォーマンス向上のためキャッシュボリュームを使用
volumes:
- ..:/workspace:cached
次:コンテナ管理で開発コンテナのビルドとメンテナンスをマスターしましょう。