Docker 컨테이너와 볼륨
Docker 컨테이너의 파일 시스템은 패널에서 여느 폴더처럼 탐색할 수 있으며, Docker 볼륨도 마찬가지입니다. 네트워크 메뉴에서 Docker에 연결… 을 선택하거나 드라이브 막대의 Docker 칩을 클릭하면 엔진이 활성 패널에 나타납니다.
이것은 플러그인이며 꺼진 상태로 제공됩니다. 환경설정 ▸ 플러그인… 에서 켜십시오. 꺼진 채로 시작하는 이유는 Docker 데몬에 대한 연결이 이 Mac에서 사용자와 동일한 권한을 갖기 때문입니다 — 아래의 무엇에 접근하는가 를 보십시오.
보이는 것¶
최상위는 세 개의 폴더입니다.
- Compose Projects — Docker Compose가 시작한 모든 컨테이너를 프로젝트별로, 그다음 서비스별로 묶은 것입니다. 컨테이너가 하나뿐인 서비스는 곧 그 컨테이너입니다.
my-stack/backend/etc는 백엔드의/etc입니다. 여러 개인 서비스는 그것들을 위한 단계를 유지하며, 컨테이너당 폴더 하나가 됩니다. - Standalone Containers — 실행 중이든 아니든 그 밖의 모든 것.
- Volumes — 모든 Docker 볼륨이 각각 하나의 드라이브로.
그 아래부터는 진짜 파일 시스템입니다. F3으로 파일을 보고, F4로 편집하고, F5로 반대쪽 패널에 복사하고, F7로 폴더를 만듭니다. 반대쪽 패널은 로컬 폴더든 압축 파일이든 S3 버킷이든 무엇이든 될 수 있습니다.
묶음은 Compose가 자신의 컨테이너와 볼륨에 붙이는 레이블에서 읽으므로, docker-compose.yml 이 이 컴퓨터에서 오래전에 사라진 스택에 대해서도 정확합니다.
볼륨을 따로 나열하는 것은 의도적입니다. 볼륨은 그것을 만든 컨테이너보다 오래 남고, 여러 컨테이너가 공유할 수 있으며, 찾으러 온 데이터는 대개 바로 그 안에 있습니다. 현재 아무것도 마운트하지 않는 볼륨도 여전히 탐색할 수 있습니다.
열¶
패널의 열 머리글을 오른쪽 클릭하면 이 제공자의 고유한 열을 추가할 수 있습니다.
- 상태 —
● running,○ stopped,◌ paused,! restarting. - 접근 —
RW, 읽기 전용 루트 파일 시스템이나 마운트는RO, Docker 볼륨은VOL, 컨테이너에 마운트된 사용자의 폴더는BIND, tmpfs는TMP. - 이미지, ID.
- 마운트 — 실제로는 마운트인 디렉터리에 대해 그것이 무엇인지.
Volume: my-stack_db-data또는 바인드 뒤의 호스트 경로입니다. 이렇게 해서 Volumes 아래의 어느 볼륨이 컨테이너의 데이터를 담고 있는지 찾습니다.
멈춘 컨테이너¶
멈춘 컨테이너도 나열되며 그 파일 시스템을 읽고 쓸 수 있습니다. Docker의 파일 API는 한 달 동안 실행되지 않은 컨테이너에도 응답하며, 이것이 이 기능을 프로세스 목록이 아니라 드라이브처럼 느끼게 합니다.
실제로 실행 중인 컨테이너가 필요한 두 가지는 삭제 와 이름 변경 입니다. Docker Engine API에는 둘 중 어느 것에도 해당하는 작업이 없습니다 — 컨테이너 안의 파일을 지우거나 옮기는 유일한 방법은 그 안에서 무언가를 실행하는 것입니다 — 따라서 멈춘 컨테이너에서는 흉내 내는 대신 거부합니다.
예상해야 할 점¶
쓰기는 root 로 들어가고, 삭제는 컨테이너 자신의 사용자로 실행됩니다. 이것은 여기서 내린 선택이 아니라 Docker의 구조입니다. 파일을 안으로 복사하는 일은 엔진의 아카이브 API를 쓰며 root로 기록합니다. 반면 삭제나 이름 변경은 컨테이너 안에서 명령을 실행하고, 그 명령은 이미지가 설정한 사용자로 돌아갑니다. 그래서 조금 전에 복사해 넣을 수 있었던 파일의 삭제가 권한 거부 로 거절될 수 있습니다. Peach Commander는 root로 행세해 이를 우회하지 않고, 컨테이너가 무엇이라고 말했는지 알려 줍니다.
읽기 전용 컨테이너나 마운트는 쓰기를 거부하고, 이를 실패가 아니라 권한 오류로 알립니다.
심볼릭 링크를 읽으면 그것이 가리키는 대상을 읽습니다. 패널은 Attr 열에서 여전히 링크로 표시하며, F3은 빈 파일 대신 대상의 내용을 보여 줍니다.
큰 멈춘 컨테이너의 루트는 나열하지 못할 수 있습니다. Docker에는 디렉터리를 나열하는 호출이 없습니다. 디렉터리를 읽는다는 것은 그것을 아카이브로 요청한다는 뜻이고, 아카이브에는 그 아래의 모든 것이 들어 있습니다. 완전한 이미지 위에 만들어진 멈춘 컨테이너라면 수십 기가바이트가 될 수 있으므로, 전부 읽는 대신 나열을 거부합니다. 더 안쪽 디렉터리는 영향을 받지 않으며 실행 중인 컨테이너도 마찬가지입니다. 아카이브로 읽기에 너무 큰 디렉터리는 컨테이너 자신이 나열합니다. 아카이브 경로만 쓰려면 아래 설정을 보십시오.
컨테이너 전체를 복사해 내보내면 파일 시스템 전체가 복사됩니다 — /proc 과 /dev 까지 포함해서. 필요한 디렉터리를 복사하고 / 는 복사하지 마십시오.
무엇에 접근하는가¶
이 플러그인은 터미널에서 닿을 엔진과 대화합니다. DOCKER_HOST 를 설정해 두었다면 그것을, 아니면 현재 docker context 를, 아니면 Docker Desktop, Colima, Rancher Desktop, Lima, Podman의 일반적인 소켓을 사용합니다. Podman이 동작하는 것은 같은 API를 제공하기 때문입니다.
Docker 데몬에 대한 접근은 대개 그것이 실행되는 컴퓨터에 대한 광범위한 접근을 뜻합니다. 이 플러그인은 정확히 사용자의 권한만 가지며 그 이상을 요구하지 않습니다. 어떤 자격 증명도 저장하지 않고, 디스크에 있는 Docker 자신의 디렉터리를 결코 건드리지 않으며, 사용자를 대신해 권한이 필요한 작업을 수행하지 않습니다.
유일하게 만드는 것은 일회용 컨테이너 이며, 기존 컨테이너가 마운트하지 않은 볼륨에 닿기 위해서만 만듭니다. 볼륨은 그것을 마운트한 무언가의 안에서만 보이기 때문입니다. 이 컨테이너는 결코 시작되지 않고, Peach Commander의 것으로 표시되며, 드라이브를 떠날 때 제거됩니다.
컨테이너나 볼륨에 대한 작업¶
컨테이너나 볼륨을 오른쪽 클릭하면 Docker 하위 메뉴가 드라이브만으로는 말할 수 없는 것을 제공합니다.
- Inspect — 엔진이 그것에 대해 아는 모든 것을, 스크롤하고 선택할 수 있는 창에 형식을 갖춘 JSON으로 보여 줍니다.
- Show Logs — 컨테이너가 기록한 마지막 500줄.
- Show Mounts — 그것이 지닌 모든 마운트와, 각각이 무엇인지, 쓸 수 있는지.
- Copy ID — 컨테이너의 전체 id 또는 볼륨의 이름을 클립보드에. ID 열에 보이는 열두 글자가 아니라
전체 id입니다. 이것은
docker명령에 붙여 넣기 위한 것이고, 짧은 id는 언젠가 고유하지 않게 될 수 있는 접두사이기 때문입니다. - Jump to Volume — 실제로는 볼륨인 디렉터리에서 Volumes 아래의 그 볼륨으로 이동합니다. 마운트 열의 나머지 절반입니다. 열은 볼륨의 이름을 알려 주고, 이것은 그리로 데려갑니다.
- Open Compose Project — 컨테이너가 속한 프로젝트로 이동합니다.
- Start, Stop, Restart, Pause, Unpause — 이것들은 컨테이너를 읽는 대신 바꾸므로 먼저 묻습니다. Start는 위의 두 거절에서 빠져나가는 길이기도 합니다. 삭제와 이름 변경에는 실행 중인 컨테이너가 필요합니다.
이 항목들은 Docker 드라이브 안에서만 나타납니다. 자신의 폴더 위에서는 아예 없습니다.
로그는 파일이기도 합니다. 모든 컨테이너의 루트에 docker-logs.txt 가 있습니다. 이것은 컨테이너 안의 파일이 아니며, 읽으면 엔진에 로그를 요청합니다. F3을 누르면 뷰어에서 열리므로 뷰어의 검색, 특정 줄로 이동, 인코딩 선택이 모두 적용됩니다. 이는 별도의 창으로는 줄 수 없는 것입니다. 그 이름의 파일을 실제로 담고 있는 컨테이너는 자기 파일을 보여 주며, 가상 파일에는 아무것도 쓸 수 없습니다.
설정¶
환경설정 ▸ 설정 ▸ Docker 에 이 모든 것이 있습니다. 같은 값이 ~/Library/Application Support/PeachCommander/Docker/docker.ini 의 작은 파일에도 들어 있으며, 스크립트로 컴퓨터를 준비할 때는 그 파일을 편집합니다.
Endpoint— 찾아낸 주소 대신 사용할 주소.ExecFallback—0이면 플러그인이 Docker의 아카이브 API만 사용합니다. 그러면 컨테이너 안에서 아무것도 실행하지 않는 대신, 아주 큰 디렉터리를 나열하거나 삭제하거나 이름을 바꿀 수 없습니다.ProbeBudgetMB,MaxBudgetMB,MaxBudgetSeconds— 대체 경로로 넘어가거나 포기하기 전에 디렉터리의 아카이브를 얼마나 읽을 가치가 있는지.HelperImage— 위 일회용 컨테이너를 만들 이미지(기본값은 이미 컴퓨터에 있는 아무 이미지).ShowAnonymousVolumes—0이면 아무도 이름을 지어 주지 않아 Docker가 긴 해시를 이름으로 붙인 볼륨을 숨깁니다.
이 버전에 없는 것¶
SSH나 TLS를 통한 원격 엔진, 대화형 셸, 읽기 전용 파일 시스템으로서의 이미지.