컨테이너 다시 빌드 정보
codespace에서 작업하는 경우 개발 환경은 가상 머신에서 실행되는 Docker 컨테이너입니다. codespace 내에서 개발 컨테이너 구성을 변경하고 해당 변경 내용을 현재 codespace에 적용하려면 컨테이너를 다시 빌드해야 합니다.
기본적으로 컨테이너를 다시 빌드할 때 GitHub Codespaces은 컨테이너의 이전 빌드에서 캐시된 이미지를 다시 사용하여 빌드 프로세스를 가속화합니다. 이는 일반적으로 다음과 같은 이유로 개발 컨테이너 구성에 대한 변경 내용을 구현하는 가장 빠른 방법입니다.
- GitHub Codespaces은(는) 컨테이너 레지스트리에서 이미지를 다시 사용하는 대신 캐시의 이미지를 다시 사용할 수 있습니다.
- 개발 컨테이너 기능 및 Dockerfile 지침과 같이 컨테이너를 빌드하는 방법을 정의하는 개발 컨테이너 구성의 부분은 캐시의 이미지 계층에서 이미 구현되었을 수 있으므로 이러한 프로세스가 다시 실행될 때까지 기다릴 필요가 없습니다. 그러나 컨테이너가 빌드된 후 실행되는 구성의 명령(예:
onCreateCommand
)이 다시 실행됩니다.
경우에 따라 컨테이너의 전체 다시 빌드를 수행할 수 있습니다. 전체 다시 빌드를 사용하여 GitHub Codespaces는 캐시에서 모든 Docker 컨테이너, 이미지 및 볼륨을 정리한 다음 새로 끌어온 이미지로 컨테이너를 다시 빌드합니다. 구성에 정의된 모든 설정이 다시 실행되어 새 이미지 계층이 생성됩니다. 다음과 같은 상황에서 캐시된 이미지로 컨테이너를 다시 빌드하는 여러 번 반복한 후에 전체 다시 빌드를 수행할 수 있습니다.
- 구성에 정의된 설정이 캐시된 이미지에 종속되지 않고 누군가가 구성에 따라 새 codespace를 만들 때 필요에 따라 실행되도록 하려고 합니다. 예를 들어 코드스페이스로 마지막으로 끌어온 이후 기본 이미지에서 종속성이 제거되었을 수 있습니다.
- 예를 들어 디스크 공간이 부족하거나 스토리지 요금을 최소화하려는 경우 캐시에서 사용하는 디스크 공간을 확보하려고 합니다. 기본 이미지를 여러 번 변경했거나, 구성을 여러 번 반복하거나, Docker Compose를 사용하여 여러 컨테이너를 실행하는 경우 이미지 캐시에서 상당한 양의 디스크 공간을 사용할 수 있습니다.
컨테이너 다시 빌드
VS Code 웹 클라이언트 또는 데스크톱 애플리케이션의 codespace 내에서 컨테이너를 다시 빌드하거나 GitHub CLI를 사용할 수 있습니다.
VS Code 웹 클라이언트 또는 데스크톱 애플리케이션에서 개발 컨테이너 다시 빌드
-
Shift명령+ P(Mac) 또는 Ctrl+Shift++P(Windows/Linux)를 사용하여 VS Code Command Palette에 액세스합니다.
-
"다시 빌드"를 입력하고 Codespaces: Rebuild Container or Codespaces: Full Rebuild Container를 선택합니다.
-
개발 컨테이너 구성 변경으로 인해 컨테이너 오류가 발생하는 경우 codespace는 복구 모드로 실행되고 오류 메시지가 표시됩니다.
- To diagnose the error by reviewing the creation logs, click View creation log.
- To fix the errors identified in the logs, update your
devcontainer.json
file. - To apply the changes, rebuild your container.
Using GitHub CLI to rebuild a dev container
If you've changed a dev container configuration outside of VS Code (for example, on GitHub.com or in a JetBrains IDE), you can use GitHub CLI to rebuild the dev container for an existing codespace.
-
In a terminal, enter the following command.
gh codespace rebuild
Your codespaces are listed.
-
Use the arrow keys on your keyboard to highlight the required codespace, then press Enter.
GitHub CLI을(를) 사용하여 전체 다시 빌드를 gh codespace rebuild --full
수행하려면 명령을 사용할 수 있습니다.
다시 빌드를 통해 데이터 유지
codespace를 만들면 리포지토리가 codespace의 /workspaces
디렉터리에 복제됩니다. 컨테이너에 탑재되는 영구 디렉터리입니다. 파일 편집, 추가 또는 삭제를 포함하여 이 디렉터리 내에서 변경한 내용은 codespace를 중지하고 시작할 때와 codespace에서 컨테이너를 다시 빌드할 때 유지됩니다.
/workspaces
디렉터리 외부에서 codespace에는 codespace를 빌드하는 데 사용되는 이미지에 따라 달라지는 Linux 디렉터리 구조가 포함됩니다. 파일을 추가하거나 디렉터리 외부의 /workspaces
파일을 변경할 수 있습니다. 예를 들어 새 프로그램을 설치하거나 와 같은 ~/.bashrc
파일에서 셸 구성을 설정할 수 있습니다. 루트가 아닌 사용자는 특정 디렉터리에 대한 쓰기 액세스 권한을 자동으로 부여하지 않을 수 있지만 대부분의 이미지는 명령을 사용하여 이러한 디렉터리에 대한 루트 액세스를 허용합니다 sudo
.
외부에서 /workspaces
는 디렉터리를 제외하고 codespace의 /tmp
디렉터리가 컨테이너의 수명 주기에 연결됩니다. 즉, codespace를 중지하고 시작할 때 변경 내용이 유지되지만 컨테이너를 다시 빌드할 때는 유지되지 않습니다.
다시 빌드를 통해 디렉터리 외부의 /workspaces
파일을 유지하려는 경우 컨테이너의 원하는 위치에 영구 디렉터리에 대한 기호 링크(symlink)를 만들 수 있습니다. 예를 들어 /workspaces/.devcontainer
디렉터리에서 다시 빌드 간에 유지되는 config
디렉터리를 만들 수 있습니다. 그런 다음 config
디렉터리와 그 내용을 devcontainer.json
파일에 postCreateCommand
로 symlink할 수 있습니다.
{
"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