Docker環境構築完全ガイド
Docker環境構築完全ガイド
Section titled “Docker環境構築完全ガイド”Dockerの環境構築から、実務で使えるベストプラクティスまで詳しく解説します。
1. Docker Desktopのインストール
Section titled “1. Docker Desktopのインストール”Windows
Section titled “Windows”# Docker Desktop for Windowsのインストール# 1. https://www.docker.com/products/docker-desktop からダウンロード# 2. インストーラーを実行# 3. WSL 2の有効化が必要な場合がある
# インストール確認docker --versiondocker-compose --version# Docker Desktop for Macのインストール# 1. https://www.docker.com/products/docker-desktop からダウンロード# 2. .dmgファイルを開いてインストール# 3. アプリケーションからDocker Desktopを起動
# インストール確認docker --versiondocker-compose --version# Ubuntu/Debianでのインストールsudo apt-get updatesudo apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release
# Dockerの公式GPGキーを追加sudo mkdir -p /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# リポジトリを追加echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker Engineのインストールsudo apt-get updatesudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Docker Composeのインストールsudo apt-get install -y docker-compose-plugin
# インストール確認docker --versiondocker compose version2. Dockerの基本コマンド
Section titled “2. Dockerの基本コマンド”イメージの操作
Section titled “イメージの操作”# イメージの一覧表示docker images
# イメージの検索docker search nginx
# イメージのプルdocker pull nginx:latest
# イメージのビルドdocker build -t my-app:latest .
# イメージの削除docker rmi my-app:latest
# 未使用のイメージを一括削除docker image prune -aコンテナの操作
Section titled “コンテナの操作”# コンテナの起動docker run -d -p 3000:3000 --name my-app my-app:latest
# コンテナの一覧表示docker ps # 実行中docker ps -a # すべて
# コンテナの停止docker stop my-app
# コンテナの再起動docker restart my-app
# コンテナの削除docker rm my-app
# 実行中のコンテナを一括停止docker stop $(docker ps -q)
# 停止中のコンテナを一括削除docker rm $(docker ps -aq)コンテナ内でのコマンド実行
Section titled “コンテナ内でのコマンド実行”# コンテナ内でシェルを実行docker exec -it my-app sh
# コンテナ内でコマンドを実行docker exec my-app npm test
# コンテナのログを確認docker logs my-appdocker logs -f my-app # リアルタイム3. Dockerfileの作成
Section titled “3. Dockerfileの作成”基本的なDockerfile
Section titled “基本的なDockerfile”# ベースイメージFROM node:18-alpine
# 作業ディレクトリの設定WORKDIR /app
# 依存関係のインストールCOPY package*.json ./RUN npm ci --only=production
# アプリケーションコードのコピーCOPY . .
# ポートの公開EXPOSE 3000
# アプリケーションの起動CMD ["npm", "start"].dockerignoreの作成
Section titled “.dockerignoreの作成”node_modulesnpm-debug.log.git.gitignore.env.env.local.DS_Store*.logcoverage.vscode.idea4. Docker Composeの設定
Section titled “4. Docker Composeの設定”基本的なdocker-compose.yml
Section titled “基本的なdocker-compose.yml”version: '3.8'
services: app: build: . ports: - "3000:3000" environment: - NODE_ENV=development - DATABASE_URL=postgresql://postgres:password@db:5432/mydb volumes: - .:/app - /app/node_modules depends_on: - db restart: unless-stopped
db: image: postgres:14-alpine environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: mydb volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" restart: unless-stopped
volumes: postgres_data:Docker Composeのコマンド
Section titled “Docker Composeのコマンド”# サービスの起動docker-compose up -d
# サービスの停止docker-compose down
# サービスの再ビルドdocker-compose up -d --build
# ログの確認docker-compose logs -f
# 特定のサービスのログdocker-compose logs -f app
# サービスの状態確認docker-compose ps
# サービスの再起動docker-compose restart
# サービスのスケールdocker-compose up -d --scale app=35. 実務でのベストプラクティス
Section titled “5. 実務でのベストプラクティス”パターン1: 環境別のdocker-compose.yml
Section titled “パターン1: 環境別のdocker-compose.yml”version: '3.8'
services: app: build: context: . dockerfile: Dockerfile.dev volumes: - .:/app environment: - NODE_ENV=development
# docker-compose.prod.ymlversion: '3.8'
services: app: build: context: . dockerfile: Dockerfile.prod environment: - NODE_ENV=production restart: always# 環境別の起動docker-compose -f docker-compose.dev.yml up -ddocker-compose -f docker-compose.prod.yml up -dパターン2: ネットワークの設定
Section titled “パターン2: ネットワークの設定”version: '3.8'
services: app: build: . networks: - app-network
db: image: postgres:14-alpine networks: - app-network
networks: app-network: driver: bridge6. よくある問題と解決策
Section titled “6. よくある問題と解決策”問題1: ポートが既に使用されている
Section titled “問題1: ポートが既に使用されている”原因:
- 他のアプリケーションが同じポートを使用している
解決策:
# ポートの使用状況を確認lsof -i :3000 # macOS/Linuxnetstat -ano | findstr :3000 # Windows
# 別のポートを使用docker run -p 3001:3000 my-app:latest問題2: ボリュームのマウントが動作しない
Section titled “問題2: ボリュームのマウントが動作しない”原因:
- パスが正しく設定されていない
- 権限の問題
解決策:
# 絶対パスを使用docker run -v /absolute/path:/app my-app:latest
# ボリュームの確認docker volume lsdocker volume inspect volume_nameこれで、Dockerの環境構築の基礎知識と実務での使い方を理解できるようになりました。