1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Devcontainer】Dockerfileを触らずGUI環境とVNC環境を後から入れる方法

Last updated at Posted at 2025-12-18

前置き

この記事はQiita Advent Calendar 2025 / ひとりアドベントカレンダー 分野における ふぐおの配信関係多めひとり Advent Calendar 2025 の19日目記事となります。

はじめに

こんにちは! プログラミング配信をしているふぐおです。
Dockerコンテナ内で何かする際に、今あるDockerfileにGUIとVNCを入れるコードを書くのは地味に面倒な作業です。
この手間をかけずに簡単にGUI環境を構築する方法を書きます。

やり方

GUI環境を作る前の状態

docker-compose.ymlだけの状態とします。
今回のdocker-compose.ymlは以下の状態です。

docker-compose.yml
services:
  minimum_devcontainer:
    image: ubuntu:latest

わかりやすくするために、最小の状態にしましたが、本来ならmountするディレクトリとかを指定すると思います。

.devcontainerディレクトリにdocker-compose.ymlを移動させる

.devcontainerディレクトリ以下にdocker-compose.ymlを移動させます。
Dockerfileがある場合も同様に.devcontainer以下に入れると良いと思います。

devcontainer.jsonを書く

.devcontainer以下にdevcontainer.jsonを書きます。

devcontainer.json
{
	"name": "minimum_devcontainer",
	"dockerComposeFile": "docker-compose.yml",
	"service": "minimum_devcontainer",
	"features": {
		"ghcr.io/devcontainers/features/desktop-lite:1": {
			"webPort": "6080"
		}
	}
}

docker-compose.ymlを編集する

docker-compose.ymlも編集します。

docker-compose.yml
services:
  minimum_devcontainer:
    image: ubuntu:latest
    tty: true
    ports:
      - "6080:6080"
    volumes:
      - ..:/workspace

portsを指定します。
tty:trueにすることで、コンテナが起動後に落ちないようにします。
volumesに現在のディレクトリを/workspaceにマウントしています。
devcontainerを使用する際は/workspaceというディレクトリをコンテナ内に作成する必要があります。(何も指定しない場合は)

コンテナを開く

VSCodeがインストールされている場合.devcontainerディレクトリの一つ上のディレクトリでVSCodeを開くと、自動で設定ファイルが認識され、次のようなポップアップが出現します。
image.png
ここでコンテナで再度開くをクリックするだけです。

VSCodeがない環境の場合

もし、VSCodeがない環境の場合はdevcontainer-cliをインストールする必要があります。
https://github.com/devcontainers/cli

インストール後、以下のコマンドを入力します。

devcontainer up --workspace-folder ./

指定したポートにブラウザからアクセス

先程指定したポートにWebブラウザでアクセスします。
今回の例だと6080なので、localhost:6080にアクセスします。
VNC経由でデスクトップにアクセスできました。
image.png

devcontainerの仕組み

devcontainer.jsonの以下の部分が今回のミソです。

	"features": {
		"ghcr.io/devcontainers/features/desktop-lite:1": {
			"webPort": "6080"
		}
	}

これは拡張機能的なもので、desktop環境とVNCをあとから入れられるものです。
内部でシェルスクリプトが走っています。このシェルスクリプトをDockerfileとかにコピペしてもいいんですが、環境による差分を吸収できるようにdevcontainerが様々な環境変数を提供しています。
よって、普通にDockerfileを書くより調整がいらないというわけです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?