Skip to main content

codespace でのコンテナヌのリビルド

䜜業䞭の codespace の開発コンテナヌをリビルドしお、構成倉曎を適甚できたす。 堎合によっおは、完党なリビルドを実行する必芁がありたす。

開発コンテナヌのリビルドに぀いお

codespace で䜜業する堎合、開発環境は仮想マシン䞊で実行される Docker コンテナヌです。 codespace 内から開発コンテナヌ構成に倉曎を加え、それらの倉曎を珟圚の codespace に適甚する堎合は、コンテナヌをリビルドする必芁がありたす。

既定では、開発コンテナヌをリビルドするず、GitHub Codespaces によっお、コンテナヌの以前のビルドからキャッシュされたむメヌゞを再利甚するこずでビルド プロセスが高速化されたす。 これは通垞、次の理由により、開発コンテナヌ構成に察する倉曎を実装する最も簡単な方法です。

  • GitHub Codespaces では、コンテナヌ レゞストリから再床プルするのではなく、キャッシュ内のむメヌゞを再利甚できたす。
  • 開発コンテナヌの機胜や Dockerfile 呜什など、コンテナヌの構築方法を定矩する開発コンテナヌ構成の䞀郚が、キャッシュ内のむメヌゞ レむダヌに既に実装されおいる可胜性があるため、これらのプロセスが再床実行されるのを埅぀必芁はありたせん。 (ただし、onCreateCommand など、コンテナヌの構築埌に実行される構成内のコマンドは、再床実行されたす。)

堎合によっおは、コンテナヌの完党なリビルドを実行するこずが必芁になる堎合がありたす。 完党なリビルドにより、GitHub Codespaces はキャッシュからすべおの Docker コンテナヌ、むメヌゞ、ボリュヌムをクリヌンアップし、新しくプルされたむメヌゞを䜿甚しおコンテナヌを再構築したす。 構成で定矩されおいるすべおのセットアップが再床実行され、新しいむメヌゞ レむダヌが生成されたす。 次のような状況で、キャッシュされたむメヌゞを䜿甚しおコンテナヌを䜕床もリビルドした埌、完党なリビルドを実行できたす。

  • 構成で定矩されおいるセットアップがキャッシュされたむメヌゞに䟝存しないようにし、構成に基づいお新しい codespace が䜜成されるずきに必芁に応じお実行されるようにしたい。 たずえば、䟝存関係が最埌に codespace にプルされおから、基本むメヌゞから削陀されおいる可胜性がありたす。
  • たずえば、ディスク領域が䞍足しおいる堎合や、ストレヌゞ料金を最小限に抑える堎合など、キャッシュで䜿甚されるディスク領域を解攟したい。 基本むメヌゞを耇数回倉曎した堎合、構成に察しお倚数の反埩的な倉曎を行った堎合、たたは Docker Compose を䜿っお耇数のコンテナヌを実行しおいる堎合は、むメヌゞ キャッシュで倧量のディスク領域が䜿甚されおいる可胜性がありたす。

コンテナヌのリビルド

コンテナヌは VS Code の Web クラむアントたたはデスクトップ アプリケヌションの codespace 内でリビルドできたす。GitHub CLI を䜿甚するこずもできたす。

VS Code Web クラむアントたたはデスクトップ アプリケヌションで開発コンテナヌをリビルドする

  1. Shift+Command+P (Mac) たたは Ctrl+Shift+P (Windows/Linux) を䜿甚しお、VS Code Command Palette にアクセスしたす。

  2. 「Rebuild」ず入力し、[Codespaces: コンテナヌのリビルド] を遞択したす。

    コマンド パレットの [Codespaces: コンテナヌのリビルド] オプションのスクリヌンショット。

  3. 開いた確認ダむアログで [リビルド] たたは [完党なリビルド] を遞択したす。

  4. 開発コンテナヌ構成を倉曎しおコンテナヌ ゚ラヌが発生した堎合、codespace は回埩モヌドで動䜜し、゚ラヌ メッセヌゞが衚瀺されたす。

    codespace が回埩モヌドで実行されおいるこずを瀺すメッセヌゞのスクリヌンショット。 メッセヌゞの䞋には、[キャンセル] ずいうラベルの付いたボタンず [䜜成ログの衚瀺] ずいうラベルの付いたボタンがありたす。

    • 䜜成ログを確認しお゚ラヌを蚺断するには、 View creation log をクリックしたす。
    • ログで識別された゚ラヌを修正するには、devcontainer.json ファむルを曎新したす。
    • 倉曎を適甚するには、コンテナヌをリビルドしたす。

GitHub CLI を䜿甚しお開発コンテナヌをリビルドする

VS Code の倖郚 (たずえば、GitHub) で開発コンテナヌの構成を倉曎した堎合は、GitHub CLI を䜿っお既存の codespace の開発コンテナヌをリビルドできたす。

  1. タヌミナルで、次のコマンドを入力したす。

    gh codespace rebuild
    

    codespace が䞀芧衚瀺されたす。

  2. キヌボヌドの方向キヌを䜿っお必芁な codespace を匷調衚瀺しおから、Enter キヌを抌したす。

GitHub CLI を䜿甚しお完党なリビルドを実行するには、gh codespace rebuild --full コマンドを䜿甚したす。

リビルドでのデヌタの保持

codespace を䜜成するず、リポゞトリが codespace 内の /workspaces ディレクトリに耇補されたす。 これは、コンテナヌにマりントされる氞続的なディレクトリです。 ファむルの線集、远加、削陀など、このディレクトリ内で行った倉曎は、codespace を停止しお開始するずき、および codespace 内のコンテナヌをリビルドするずきに保持されたす。

/workspaces ディレクトリの倖郚では、codespace のビルドに䜿甚される開発コンテナヌ むメヌゞによっお異なる Linux ディレクトリ構造が codespace に含たれおいたす。 /workspaces ディレクトリ倖郚で、ファむルを远加したりファむルに倉曎を加えたりするこずができたす。 たずえば、新しいプログラムをむンストヌルしたり、~/.bashrc のようなファむルにシェル構成を蚭定したりするこずができたす。 ルヌト以倖のナヌザヌは、特定のディレクトリぞの曞き蟌みアクセス暩を自動的に持っおいない堎合がありたすが、ほずんどのむメヌゞでは、これらのディレクトリぞの sudo コマンドを䜿ったルヌト アクセスが蚱可されたす。

/workspaces の倖郚では、/tmp ディレクトリを陀き、codespace 内のディレクトリはコンテナヌのラむフサむクルに関連付けられたす。 ぀たり、codespace を停止しお開始した堎合、加えた倉曎は保持されたすが、コンテナヌをリビルドした堎合は保持されたせん。

リビルドで /workspaces ディレクトリの倖郚にファむルを保持する堎合は、コンテナヌ内の目的の堎所に、持続させるディレクトリぞのシンボリック リンクを䜜成できたす。 たずえば、/workspaces/.devcontainer ディレクトリ内に、再構築先でも持続される config ディレクトリを䜜成できたす。 その埌、config ディレクトリずその内容を devcontainer.json ファむルの postCreateCommand ずしおシンボリック リンクするこずができたす。

{
    "image": "mcr.microsoft.com/devcontainers/base:alpine",
    "postCreateCommand": "chmod +x .devcontainer/postCreate.sh && .devcontainer/postCreate.sh"
}

以䞋の䟋の postCreate.sh ファむルでは、config ディレクトリの内容がホヌム ディレクトリにシンボリック リンクされおいたす。

#!/bin/bash
ln -sf $PWD/.devcontainer/config $HOME/config && set +x

参考資料