ある日、開発者がいなくなったことにより、PHPで動くサーバーのメンテをまかされた。まずは、動さないと、分かるものも分からない。
php開発のためにはやはりphpのインストールは必要でしょうか?デスクトップ環境なので、あまり汚染したくなく、アンインストールなどしたときに綺麗になるようにしたいのですが…何か良いかんがえはありますか?virtualboxは重いので嫌です。
ということで、geminiに聞くと、
Dev Containersという拡張機能を使えば良いとのこと。
まとめ
- VSCode(Visual Studio Code)インストール
- Dev Containers拡張機能インストール
- Docker Desttopインストール
- Dockerfile, devcontainer.json, docker-compose.yml作成
- launch.json作成
となってる。以下、細かい(不要な情報多い)が一つ一つ書き残していく。
IDE選択
どのVSCode派生のIDEで進めるかがミソだったりする。
Visual Studio Code
Windows、Mac、Linux(主要ディストリビーション系)の方は Download Visual Studio Code - Mac, Linux, Windowsから素直にダウンロードしてインストールする。Arch Linuxの方は、 AUR (en) - visual-studio-code-binからインストールする。
VSCodeがインストールできたら、拡張機能 Dev Containersをインストールする。
ソフトウェアパッケージング形式
Linuxの場合、詳しくない限りはsnapやflatpakといったパッケージでのインストールはおすすめしない。サンドボックス環境で動作するので、コンテナからホストに通信できないとか、デバッグできないとかトラブルが起きたときに、切り分けが難しくなる。
Code - OSS
Arch Linuxで試す時、 Code - OSSをインストールしてしまった。
VSCodeとほぼ同じものなのだけど、ライセンスとデフォルト設定が違い、何より Visual Studio Marketplaceは、Microsoftブランドのリリースでのみ使用できるようになっている1。なので Dev Containersを検索してもヒットしない…
Antigravity
当初、geminiの有料プランと契約してるのもあり
Google Antigravityをインストールした。AntigravityはDev Containers機能が同梱されているのだが…どうも動作が安定しない2、コンテナのビルドで頻繁に失敗するので諦めた。今思うとDockerのバージョンが 29.2.0 と新しすぎたのかも知れない。
また、キャッシュなしでコンテナがビルドができないのと、お仲間のgeminiすらVSCodeでのメニューで指示してくるので細かいメニュー名の違いがあり分かりづらい。
Cursorや、色んなVSCode派生があるが、Dockerが絡むと割と相性問題がある。
Docker
Windows, MacならDocker Desktop一択だと思う。LinuxでもDocker Desktopでも良いと思うが、最高のパフォーマンスを引き出したいなら、Docker CE(サーバー)版のインストールでのrootlessモードで実行するのがおすすめだ。
Dev ContainersがサポートしているAPIバージョンのDockerをインストールする
ただ、Linuxでも落とし穴がちょろちょろある。Arch Linuxで Arch | Docker Docsの手順で最新のをインストールすると
[2026-02-04T12:10:45.276Z] Version: 29.2.1 API version: 1.53 Go version: go1.25.6 Git commit: a5c7197 Built: Mon Feb 2 17:16:41 2026 OS/Arch: linux/amd64 Context: desktop-linux
[2026-02-04T12:10:45.296Z] request returned 500 Internal Server Error for API route and version http://%2Fhome%2Farimasou16%2F.docker%2Fdesktop%2Fdocker.sock/v1.53/version, check if the server supports the requested API version
[2026-02-04T12:10:45.299Z] Stop (23167 ms): Run: docker version
[2026-02-04T12:10:45.299Z] Exit code 1
[2026-02-04T12:10:45.302Z] Stop (23170 ms): Check Docker is running
[2026-02-04T12:10:45.308Z] Docker returned an error code 1, message: Command failed: docker version
APIバージョンが新しすぎて、駄目というエラーが出た。
ChromebookはCE(サーバー)版をrootfulモードで使う
また、Desktop版は仮想化支援を必須としているが、それをChromebookのLinux(Crostini)環境で使うとネストされた仮想化となり不安定になる可能性がある。
なので、ChromebookではCE(サーバー)版をインストールするが、rootlessモードではコンテナから外部に通信ができなかった(名前解決できなかった)ので、sudo usermod -aG docker ${USER}と、自分をdockerグループに入れてrootfulモードで使うのが手っ取り早い。
rootlessモード
ということで、一部に許されたDockerのrootless化の手順を以下に書き記しておく3。
Rootless mode | Docker Docsに書いてあるとおり。
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo "$(whoami):100000:65536" | sudo tee -a /etc/subuid
echo "$(whoami):100000:65536" | sudo tee -a /etc/subgid
sudo apt-get install -y uidmap
dockerd-rootless-setuptool.sh install
ちなみにrootless化をやめるときは、以下のとおりとなる。
dockerd-rootless-setuptool.sh uninstall
/usr/bin/rootlesskit rm -rf /home/yoyuucchi/.local/share/docker
Chromebook環境下では、インストール時もアンインストール時もdockerd-rootless-setuptool.shを使うときは、オプションとして --skip-iptablesしないと駄目だった。
次回は、実際にコンテナファイルを書いて、PHP 8.4 環境を立ち上げる。
-
Opening Remote...が一時間経つのに終わらなかったり、不安定だった。構築、デバッグ成功後、同じ条件で試すもコンテナビルドでやはり失敗した。 ↩︎ -
以前、 出来るだけ安全に最新のDockerをインストールして、グループにユーザを追加せずにルートレスで実行するで書き残したが、この記事みたいにあれこれ書いてあるのがノイズになりそうななので。 ↩︎