Contents
Docker Desktop のインストールと OS 別注意点
Docker Desktop は公式サイトから最新版を取得し、各 OS が満たすべき前提条件(CPU 仮想化支援やファイルシステム権限など)さえクリアすれば、インストーラを実行するだけで利用開始できます。以下では Windows・macOS・Linux の 3 種類に分けて、ダウンロード先の最新ページへのリンクと、インストール時に留意すべきポイントを解説します。
ダウンロードページは常に公式トップからたどる
直接バイナリ(例: Docker Desktop Installer.exe)への URL は将来的に変更されやすく、古いリンクが 404 になるリスクがあります。安全かつ最新のパッケージを取得するために 必ず 次の公式ページから OS を選択してください。
- 公式ダウンロードページ: https://www.docker.com/products/docker-desktop
このページでは「Download for Windows」「Download for macOS(Intel / Apple Silicon)」「Download for Linux」それぞれに対応したボタンが用意されています。リンク先は常に最新ビルドへリダイレクトされるため、手動でバージョンを追う必要がなくなります。
Windows
Windows 版 Docker Desktop は Hyper‑V と WSL2 の二つのバックエンドをサポートしますが、2026 年時点では WSL2 が推奨 されています。以下の手順でインストールと設定を行いましょう。
- BIOS/UEFI 設定
- Intel CPU の場合は
VT-x、AMD CPU の場合はAMD‑Vを有効化。 - WSL2 の有効化(PowerShell 管理者権限)
powershell
wsl --install
wsl --set-default-version 2
- Docker Desktop ダウンロード & インストール
- 公式ページの「Download for Windows」ボタンから取得した
.exeを実行。 - インストール後の確認
powershell
docker version
正常にバージョン情報が表示されれば完了です。
ポイント:Windows 10 バージョン 2004(2020 年 5 月リリース)以降、または Windows 11 が必須です。古い OS では WSL2 が利用できないため、Hyper‑V にフォールバックしますがパフォーマンスが劣ります。
macOS
macOS 向け Docker Desktop は Apple Silicon (ARM) と Intel の二つのアーキテクチャを別々に提供しています。公式ダウンロードページでは「Mac with Apple chip」または「Mac with Intel chip」を選択でき、対応する dmg が自動的に取得されます。
- システム要件
- macOS Ventura 12.0 以降(Apple Silicon は Ventura、Intel は Monterey 推奨)。
- インストール手順
- ダウンロードした
.dmgを開き、アプリケーションフォルダへドラッグ。 - 権限設定(初回起動時)
「システム環境設定」→「セキュリティとプライバシー」→「フルディスクアクセス」で Docker Desktop にチェックを入れます。
- 動作確認
bash
docker version
ポイント:Apple Silicon 用は
arm64アーキテクチャのイメージがデフォルトで使用され、Intel 用はamd64が使用されます。マルチプラットフォームビルドを行う際は--platform=linux/amd64,linux/arm64などで明示してください。
Linux(Ubuntu/Debian 系を中心に)
Linux 向け Docker Desktop は .deb または .rpm パッケージとして提供されますが、APT / DNF リポジトリから直接インストールできるわけではありません。以下は Ubuntu 22.04(Debian 系)と Fedora(RPM 系)の代表的な手順です。
共通前提:cgroup v2 の有効化
Docker Desktop は cgroup v2 が必須です。カーネルが対応していない場合はアップグレードまたはブートオプションで有効にします。
|
1 2 3 4 |
# cgroup バージョン確認 stat -fc %T /sys/fs/cgroup/ # 出力が "cgroup2fs" なら OK |
Ubuntu/Debian 系
- Docker Engine(docker-ce)を公式リポジトリからインストール(Docker Desktop が依存する Docker デーモンです)
bash
sudo apt-get update
sudo apt-get install \
ca-certificates curl gnupg lsb-release
# Docker の GPG 鍵追加
sudo mkdir -p /etc/apt/keyrings
curl -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
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
- Docker Desktop の .deb パッケージを取得
-
公式ページの「Download for Linux」から
docker-desktop-*.debをダウンロード。 -
インストール
bash
sudo apt-get install ./docker-desktop-*-amd64.deb
- 起動と自動開始設定
bash
systemctl enable --now docker-desktop
- 確認
bash
docker version
Fedora / RHEL 系
- Docker Engine のインストール(公式リポジトリ)
bash
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager \
--add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io
- Docker Desktop の .rpm パッケージ取得(公式ページからダウンロード)
- インストール
bash
sudo rpm -i docker-desktop-*.rpm
sudo systemctl enable --now docker-desktop
注意点:Linux ディストリビューションやカーネルバージョンによっては Docker Desktop の最新リリースがサポート外になる場合があります。その際は Docker Engine + VS Code Remote‑Containers だけで代替可能です(本稿の後半で説明)。
VS Code Remote‑Containers 拡張機能の設定
VS Code の Remote‑Containers 拡張機能を使うと、ローカルに Go コンパイラやツールチェインをインストールせずとも、コンテナ内部が完全な開発環境として立ち上がります。ここでは 拡張機能の導入 → devcontainer.json の作成 → コンテナ起動 までの流れを具体的に示します。
拡張機能インストール
- VS Code の左サイドバー「Extensions」 (
Ctrl+Shift+X) を開く。 - 検索ボックスに
Remote - Containersと入力し、Microsoft が提供する拡張機能(2026 年 3 月時点でバージョン 0.357 が最新)をインストール。
ポイント:拡張機能は自動的に Docker Desktop の API を利用します。Docker Desktop が起動していないと「Docker デーモンが見つかりません」というエラーになるので、事前に
docker versionが成功することを確認してください。
devcontainer.json のベストプラクティス
以下は 公式 Go 1.22 ベースイメージ を利用し、Docker‑outside‑of‑Docker(DoD)機能の最新版を自動取得する例です。バージョン番号を固定せずに latest タグで参照することで、将来的な更新に追従できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "name": "Go Dev Container", "image": "mcr.microsoft.com/vscode/devcontainers/go:1.22", // 常に最新の Go 1.22 イメージを使用 // Docker‑outside‑of‑Docker 機能はバージョン指定なしで最新版取得 "features": { "ghcr.io/devcontainers/features/docker-outside-of-docker": {} }, "customizations": { "vscode": { "extensions": [ "golang.Go", "ms-vscode.go-debug" ] } }, // ワークスペース作成後に依存関係を整理 "postCreateCommand": "go mod tidy", // 推奨設定(言語サーバーの有効化・フォーマッタ指定) "settings": { "go.useLanguageServer": true, "go.formatTool": "gofmt" } } |
設定項目の解説
| 項目 | 意味 |
|---|---|
image |
Microsoft が公式に保守する Go 開発用ベースイメージ。タグ 1.22 は「Go 1.22 系列」の最新ビルドを指す。 |
features.docker-outside-of-docker |
コンテナ内からホストの Docker デーモンへアクセスできるようにする機能。バージョン指定なしで latest が自動取得され、将来のリリースにも追従可能。 |
customizations.vscode.extensions |
開発時に必須な拡張機能をコンテナ起動と同時にインストール。 |
postCreateCommand |
コンテナ作成直後に実行されるコマンドで、依存関係の解決やコード生成に利用できる。 |
settings |
VS Code のユーザー設定をワークスペース単位で上書きし、Go 言語サーバーやフォーマッタを有効化する。 |
ポイント:
devcontainer.jsonはリポジトリにコミットして共有すれば、チーム全員が同一環境で作業できます。またimageのタグは「メジャーバージョン」だけに留めることで、パッチリリースの自動取得が可能です。
コンテナ起動手順
- プロジェクトのルートディレクトリ(
.devcontainer/がある場所)で VS Code を開く。 - コマンドパレット
Ctrl+Shift+P→ Remote-Containers: Reopen in Container を選択。 - Docker が自動的にイメージをプルし、数十秒でコンテナが起動します。ターミナルが表示されたら
go versionで Go のバージョンが確認できるはずです。
dvc-go-gemini テンプレート取得・カスタマイズ手順
「dvc‑go‑gemini」テンプレートは、2025 年 10 月に Zenn に掲載された公式サンプルリポジトリです。以下の手順でクローンし、先ほど作成した devcontainer.json と Dockerfile を最新環境向けに差し替えるだけで、すぐにハンズオンを開始できます。
手順概要
- GitHub リポジトリをクローン
.devcontainer/devcontainer.jsonと.devcontainer/Dockerfileのベースイメージを更新- 必要に応じて拡張機能や VS Code 設定を追加
実際のコマンド
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# 1️⃣ リポジトリ取得(2026 年時点の最新コミット) git clone https://github.com/hiro345/dvc-go-gemini.git cd dvc-go-gemini # 2️⃣ .devcontainer ディレクトリへ移動し、ファイルを上書き cat > .devcontainer/devcontainer.json <<'EOF' { "name": "Go Dev Container", "image": "mcr.microsoft.com/vscode/devcontainers/go:1.22", "features": { "ghcr.io/devcontainers/features/docker-outside-of-docker": {} }, "customizations": { "vscode": { "extensions": [ "golang.Go", "ms-vscode.go-debug", "github.vscode-pull-request-github" ] } }, "settings": { "go.useLanguageServer": true, "go.formatTool": "gofmt" }, "postCreateCommand": "go mod tidy" } EOF # Dockerfile のベースイメージだけを Go 1.22 に差し替える sed -i 's|FROM golang:1.20-alpine|FROM golang:1.22-alpine|' .devcontainer/Dockerfile |
ディレクトリ構成(変更後)
|
1 2 3 4 5 6 7 |
dvc-go-gemini/ ├─ .devcontainer/ │ ├─ devcontainer.json ← 本稿で示した最新設定 │ └─ Dockerfile ← Go 1.22 ベースに更新済み ├─ goapp001/ ← サンプルプロジェクト(後述) └─ README.md |
ポイント:ベースイメージだけ差し替えると、既存のビルドキャッシュがそのまま流用されるため、再構築時間は数秒に短縮できます。
サンプルプロジェクト構造とコード例(インポート文修正)
このセクションでは goapp001 ディレクトリの典型的な Go プロジェクト構成を示し、実際にコンテナ内でビルド・実行できる最小限の HTTP サーバーコードをご紹介します。インポート文は単一ブロックにまとめており、コンパイルエラーは発生しません。
ディレクトリ構成(標準的なレイヤード設計)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
goapp001/ ├─ cmd/ │ └─ server/ │ └─ main.go ← アプリケーションのエントリーポイント ├─ internal/ │ └─ handler/ │ └─ hello.go ← ハンドラは内部限定で公開しない実装例 ├─ pkg/ │ └─ util/ │ └─ version.go ← 再利用可能ユーティリティ(例示のみ) ├─ go.mod ← モジュール宣言と Go バージョン指定 └─ go.sum ← 依存関係ロックファイル |
go.mod(Go 1.22 を使用)
|
1 2 3 4 |
module github.com/hiro345/dvc-go-gemini/goapp001 go 1.22 |
cmd/server/main.go(エントリーポイント)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package main import ( "log" "net/http" "github.com/hiro345/dvc-go-gemini/goapp001/internal/handler" ) func main() { http.HandleFunc("/hello", handler.Hello) log.Println("🚀 server listening on :8080") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatalf("server failed: %v", err) } } |
internal/handler/hello.go(インポートブロックの修正)
|
1 2 3 4 5 6 7 8 9 10 11 |
package handler import ( "fmt" "net/http" ) func Hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello from Go 1.22 in a Docker container!") } |
ポイント:
internal/ディレクトリは外部からインポートできない設計となっており、ライブラリとして再利用したいコードはpkg/に配置します。この構造は大規模プロジェクトでもスケーラビリティが保たれます。
コンテナ内での実行確認
|
1 2 3 |
# devcontainer が起動したターミナル(Docker 内)で実行 go run ./cmd/server |
ブラウザで http://localhost:8080/hello にアクセスし、以下の文字列が表示されれば成功です。
|
1 2 |
Hello from Go 1.22 in a Docker container! |
マルチステージ Dockerfile とデバッグ用ランタイムの考慮点
マルチステージビルドは 開発時に必要なツールチェイン(go, git 等)と、本番運用時に最小限だけ残すイメージ を分離できるため、セキュリティ・サイズともに有利です。ただしデバッグ目的で Delve を利用する場合は、ランタイムステージの選択が重要になります。
推奨マルチステージ構成(Go 1.22 + Distroless)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# ---------- Build Stage ---------- FROM golang:1.22-alpine AS builder WORKDIR /src # 依存関係だけを先に取得し、キャッシュ効率化 COPY go.mod go.sum ./ RUN go mod download # ソースコード全体をコピーしてビルド COPY . . RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -ldflags="-s -w" -o /app/goapp001 ./cmd/server # ---------- Release Stage ---------- FROM gcr.io/distroless/base-debian10 AS runtime WORKDIR /app COPY --from=builder /app/goapp001 . EXPOSE 8080 ENTRYPOINT ["./goapp001"] |
デバッグ時の注意点
- Distroless イメージはシェルやデバッガが同梱されていません。Delve を使いたい場合は、別途
debugステージを用意し、dlvバイナリと必要な共有ライブラリをコピーします。 - 代替案として、開発・デバッグ専用には
golang:1.22-alpineをそのままランタイムに使うか、debian:sid-slim等の最小サイズイメージに切り替えても問題ありません。
デバッグ用ステージ例(Distroless の代わりに Alpine)
|
1 2 3 4 5 6 7 8 9 |
# ---------- Debug Stage ---------- FROM golang:1.22-alpine AS debug WORKDIR /app COPY --from=builder /app/goapp001 . RUN go install github.com/go-delve/delve/cmd/dlv@latest EXPOSE 8080 40000 CMD ["dlv", "exec", "./goapp001", "--headless", "--listen=:40000", "--api-version=2", "--log"] |
ポイント:
debugステージは本番イメージに混入させないよう、docker build --target runtimeでリリースビルドを行うか、CI パイプラインで明示的にステージを切り替えてください。
ローカルビルド・コンテナ起動コマンド
Dockerfile がプロジェクトのルートにある前提で、以下の手順で ローカルイメージのビルド と コンテナ実行 を行います。.dockerignore に不要ファイル(例: test/, *.md, .git/)を列挙しておくと、ビルドキャッシュが小さくなります。
|
1 2 3 4 5 6 |
# 1️⃣ ビルド(デフォルトは runtime ステージ) docker build -t goapp001:latest . # 2️⃣ 実行(ポートマッピングのみ)※ デバッグ不要時 docker run --rm -p 8080:8080 goapp001:latest |
Delve デバッグ用に実行する場合
|
1 2 3 4 5 6 7 8 |
# debug ステージをビルドし、デバッグポート 40000 を公開 docker build -t goapp001:debug --target debug . # コンテナ起動(バックグラウンド) → Delve が待ち受ける docker run -d --name goapp-debug \ -p 8080:8080 -p 40000:40000 \ goapp001:debug |
ポイント:
--rmを付けずにバックグラウンド実行すると、VS Code のデバッガが接続しやすくなります。作業完了後はdocker stop goapp-debug && docker rm goapp-debugでクリーンアップしてください。
VS Code から Delve デバッグを行う手順
Delve(Go 用デバッガ)を ヘッドレスモード で起動し、VS Code の launch.json にリモートアタッチ設定を書くだけでブレークポイントが効くようになります。以下は Distroless を使わずに Alpine ベースの debug イメージ を利用した手順です。
手順概要
| ステップ | 内容 |
|---|---|
| 1️⃣ デバッグイメージをビルド | docker build -t goapp001:debug --target debug . |
| 2️⃣ コンテナ起動(ポート公開) | docker run -d --name goapp-debug -p 8080:8080 -p 40000:40000 goapp001:debug |
3️⃣ VS Code の launch.json 設定追加 |
下記 JSON を .vscode/launch.json に貼り付け |
| 4️⃣ デバッグ開始 | 「Run」→「Start Debugging(F5)」でブレークポイントがヒット |
.vscode/launch.json
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "version": "0.2.0", "configurations": [ { "name": "Attach to Go (Docker)", "type": "go", "request": "attach", "mode": "remote", "remotePath": "/app", // コンテナ内の作業ディレクトリ "port": 40000, "host": "127.0.0.1", "trace": "verbose" } ] } |
デバッグ時に注意すべき点
- バイナリがデバッグ情報を保持していること
go build時に-gcflags="all=-N -l"を付与すると最適化が無効化され、ステップ実行が正確になります。debug ステージの Dockerfile に以下を追加してください。
dockerfile
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -gcflags="all=-N -l" -o /app/goapp001 ./cmd/server
- ファイアウォール
ローカルマシンでポート 40000 がブロックされていると VS Code は接続に失敗します。ufw status等で開放状況を確認してください。
ポイント:本番リリース用イメージには Delve バイナリやデバッグフラグは含めないよう、必ず
--target runtimeでビルドしてください。
クラウド(Google Cloud Run / AWS App Runner)への簡易デプロイ例
ローカルで動作確認が取れたら、コンテナイメージをレジストリにプッシュし、Serverless コンテナサービス にデプロイすればインフラ管理の手間が大幅に削減されます。ここでは最もポピュラーな Google Cloud Run と AWS App Runner の 2 パターンを紹介します。
前提条件
| 項目 | 必要なツール |
|---|---|
| Google Cloud Platform (GCP) | gcloud CLI(最新版)・プロジェクト作成済み |
| AWS | aws CLI(v2 以上)・ECR リポジトリ作成済み |
手順:イメージのビルドとレジストリへのプッシュ
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 1️⃣ イメージ名を統一(例: goapp001:latest) docker build -t goapp001:latest . # Google Container Registry (GCR) に push docker tag goapp001:latest gcr.io/$PROJECT_ID/goapp001:latest docker push gcr.io/$PROJECT_ID/goapp001:latest # AWS Elastic Container Registry (ECR) に push aws ecr get-login-password --region $REGION | \ docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com docker tag goapp001:latest $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/goapp001:latest docker push $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/goapp001:latest |
Google Cloud Run デプロイ
|
1 2 3 4 5 6 7 |
gcloud run deploy goapp001 \ --image=gcr.io/$PROJECT_ID/goapp001:latest \ --platform=managed \ --region=asia-northeast1 \ --allow-unauthenticated \ --port=8080 |
--allow-unauthenticatedを付けると全員がアクセス可能な HTTPS エンドポイントが生成されます。プライベートにしたい場合は IAM ロールで制御してください。
AWS App Runner デプロイ
|
1 2 3 4 |
aws apprunner create-service \ --service-name goapp001 \ --source-configuration ImageRepository={ImageIdentifier=$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/goapp001:latest,ImageRepositoryType=ECR} |
- 作成後にコンソールから 自動スケーリング や 環境変数 を設定できます。
ポイント:どちらのプラットフォームでも、
DockerfileのEXPOSE 8080が正しく記述されていればポートマッピングは不要です。コンテナ起動時に自動でPORT=8080が注入されます。
よくあるエラーとトラブルシューティング
| 現象 | 主な原因 | 推奨対処法 |
|---|---|---|
| Docker が起動しない(Windows) | BIOS で VT‑x が無効、または Hyper‑V と WSL2 の競合 | BIOS 設定を確認し、wsl --shutdown && wsl --set-default-version 2 を実行 |
go.mod の取得エラー |
社内プロキシが存在せず外部へ直接アクセスできない | 環境変数 GOPROXY=https://proxy.golang.org,direct を設定し、.bashrc に永続化 |
| コンテナサイズが大きい | .dockerignore が未設定で test/, *.md などがコピーされている |
プロジェクト根に .dockerignore を作成し、不要ファイルを除外 |
| Delve 接続タイムアウト | デバッグポート 40000 が公開されていないかファイアウォールで遮断 | docker run -p 40000:40000 … と明示的に指定し、ローカルのファイアウォール設定を確認 |
| Cloud Run デプロイ失敗(permission denied) | サービスアカウントに roles/run.admin が付与されていない |
IAM コンソールで対象サービスアカウントに Cloud Run Admin ロールを追加 |
| Docker Desktop for Linux がインストールできない | カーネルが cgroup v2 非対応、またはディストリビューション非サポート | systemd.unified_cgroup_hierarchy=1 でカーネル起動オプションを付与し再起動、もしくは Docker Engine + Remote‑Containers のみ利用 |
まとめ:エラーメッセージはそのまま検索すると公式ドキュメントや GitHub Issue が多数ヒットします。まずは 権限・ネットワーク設定 を点検し、それでも解決しない場合は Docker Desktop のログ(
~/.docker/desktop/log/vm/docker.log)を確認してください。
おわりに
本稿では、2026 年時点の最新情報に基づき Docker Desktop + VS Code Remote‑Containers を利用した Go 開発環境の構築手順を網羅的に解説しました。
- URL は公式ダウンロードページへ統一し、将来的なリンク切れリスクを回避
- Linux のインストールは .deb/.rpm パッケージ方式で明示し、cgroup v2 必要条件を記載
devcontainer.jsonでは Docker‑outside‑of‑Docker 機能のバージョン固定をやめ、最新版自動取得に変更- Go の import 文は単一ブロック化してコンパイルエラーを防止
- Distroless ランタイム使用時のデバッグ制約と代替手段(debug ステージ)を追記
- 文字数・誤字・表記揺れを改善し、見やすさと情報密度を向上
このガイドに沿って設定すれば、ローカルでもクラウドでも一貫したコンテナ開発フロー が手に入ります。ぜひプロジェクトに導入して、開発効率・デプロイ速度の向上をご体感ください。