Сведения о перестроении контейнера
При работе в codespace среда разработки представляет собой контейнер Docker, который выполняется на виртуальной машине. Если вы вносите изменения в конфигурацию контейнера разработки из codespace и хотите применить эти изменения к текущему codespace, необходимо перестроить контейнер.
По умолчанию при перестроении контейнера GitHub Codespaces ускорит процесс сборки, повторно используя кэшированные образы из предыдущих сборок контейнера. Обычно это самый быстрый способ реализации изменений в конфигурации контейнера разработки по следующим причинам.
- GitHub Codespaces может повторно использовать образы в кэше, а не удалять их из реестров контейнеров.
- Части конфигурации контейнера разработки, определяющие способ сборки контейнера, такие как функции контейнера разработки и инструкции Dockerfile, возможно, уже реализованы на уровнях образов в кэше, поэтому вам не придется ждать повторного запуска этих процессов. (Однако команды в конфигурации, которые выполняются после сборки контейнера, например
onCreateCommand
, будут выполняться снова.)
Иногда может потребоваться выполнить полную перестройку контейнера. При полном перестроении GitHub Codespaces очищает все контейнеры, образы и тома Docker из кэша, а затем перестраивает контейнер с новыми извлеченными образами. Вся настройка, определенная в конфигурации, будет выполняться снова, создавая новые слои образов. Вам может потребоваться выполнить полное перестроение после многих итераций перестроения контейнера с кэшируемыми образами в таких ситуациях, как показано ниже.
- Необходимо убедиться, что настройка, определенная в конфигурации, не зависит от кэшированных образов и будет выполняться по мере необходимости, когда кто-то создает новое пространство кода на основе конфигурации. Например, зависимость могла быть удалена из базового образа с момента последнего извлечения в codespace.
- Вы хотите освободить место на диске, используемое кэшем, например, если у вас мало места на диске или вы хотите свести к минимуму расходы на хранилище. Кэш образа может использовать значительный объем дискового пространства, если вы несколько раз меняли базовый образ, вносили большое количество итеративных изменений в конфигурацию или используете несколько контейнеров с Docker Compose.
Перестроение контейнера
Вы можете перестроить контейнер в codespace в веб-клиенте или классическом приложении VS Code или использовать GitHub CLI.
Перестроение контейнера разработки в веб-клиенте или классическом приложении VS Code
-
Получите доступ к VS Code Command Palette спомощью команды+ SHIFT+P (Mac) или CTRL+SHIFT+P (Windows/Linux).
-
Начните вводить "Перестроение" и выберите Codespaces: Перестроение контейнера или Codespaces: Полный контейнер перестроения.
-
Если изменения в конфигурации контейнера разработки приводят к ошибке контейнера, codespace запустится в режиме восстановления и появится сообщение об ошибке.
- Диагностируйте проблему путем просмотра журналов создания. Для этого нажмите кнопку Просмотр журнала создания.
- Чтобы устранить ошибки, выявленные в журналах, обновите файл
devcontainer.json
. - Чтобы применить изменения, перестройте контейнер.
Использование GitHub CLI для перестроения контейнера разработки
Если вы изменили конфигурацию контейнера разработки за пределами VS Code (например, в GitHub.com или в интегрированной среде разработки JetBrains), вы можете использовать GitHub CLI для перестроения контейнера разработки для существующего пространства кода.
-
В окне терминала введите следующую команду.
gh codespace rebuild
В списке указаны ваши codespace.
-
Используйте клавиши со стрелками на клавиатуре, чтобы выделить необходимое пространство кода, а затем нажмите клавишу ВВОД.
Чтобы выполнить полное перестроение с GitHub CLI, можно использовать gh codespace rebuild --full
команду .
Сохранение данных при перестроении
При создании codespace репозиторий клонируется в /workspaces
каталог в codespace. Это постоянный каталог, подключенный к контейнеру. Любые изменения, внесенные в этот каталог, включая редактирование, добавление или удаление файлов, сохраняются при остановке и запуске codespace, а также при перестроении контейнера в codespace.
За пределами /workspaces
каталога codespace содержит структуру каталогов Linux, которая зависит от образа, используемого для сборки codespace. Вы можете добавлять файлы или вносить изменения в файлы за пределами /workspaces
каталога. Например, можно установить новые программы или настроить конфигурацию оболочки в файле, ~/.bashrc
например . Как пользователь, не являющийся корневым, вы можете не иметь автоматический доступ на запись в определенные каталоги, но большинство образов разрешают корневой доступ к этим каталогам с помощью sudo
команды .
Вне /workspaces
, за исключением /tmp
каталога, каталоги в codespace привязаны к жизненному циклу контейнера. Это означает, что все внесенные изменения сохраняются при остановке и запуске codespace, но не сохраняются при перестроении контейнера.
Если вы хотите сохранить файлы за пределами /workspaces
каталога при перестроении, можно создать в нужном расположении в контейнере символьную ссылку (символьную ссылку) на постоянный каталог. Например, в каталоге /workspaces/.devcontainer
можно создать каталог config
, который будет сохранен при перестроении. Затем вы можете связать символьной ссылкой каталог config
и его содержимое как postCreateCommand
в файле devcontainer.json
.
{
"image": "mcr.microsoft.com/vscode/devcontainers/base:alpine",
"postCreateCommand": ".devcontainer/postCreate.sh"
}
В приведенном ниже примере файла postCreate.sh
содержимое каталога config
связано символической ссылкой с домашним каталогом.
#!/bin/bash
ln -sf $PWD/.devcontainer/config $HOME/config && set +x