Where are Docker Images Stored? Docker Container Paths Explained

 

다음을 실행하여 Docker 구성에 대한 기본 정보를 얻을 수 있습니다.

$ docker info

...
 Storage Driver: overlay2
...
 Docker Root Dir: /var/lib/docker
...

출력에는 스토리지 드라이버 및 도커 루트 디렉토리에 대한 정보가 포함됩니다.

 

도커 이미지와 컨테이너 저장소 위치

Docker 컨테이너는 네트워크 설정, 볼륨 및 이미지로 구성됩니다. Docker 파일의 위치는 운영 체제에 따라 다릅니다. 다음은 가장 많이 사용되는 운영 체제에 대한 개요입니다.

  • Ubuntu: /var/lib/docker/
  • Fedora: /var/lib/docker/
  • Debian: /var/lib/docker/
  • Windows: C:\ProgramData\DockerDesktop, C:\Program Files\Docker\Docker
  • MacOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

[참고] docker 디렉토리 구조

[root@docker]# tree -L 1
├── buildkit
├── containers
├── image
├── network
├── overlay2
├── plugins
├── runtimes
├── swarm
├── tmp
├── trust
└── volumes

 

macOS 및 Windows에서 Docker는 가상 환경에서 Linux 컨테이너를 실행합니다. 몇 가지 추가로 알아야 할 사항이 있습니다.

 

Docker for Mac

Docker는 기본적으로 macOS와 호환되지 않으므로 Hyperkit을 사용하여 가상 이미지를 실행합니다. 가상 이미지 데이터는 다음 위치에 있습니다.

~/Library/Containers/com.docker.docker/Data/vms/0

 

가상 이미지 내에서 경로는 기본 Docker 경로 /var/lib/docker입니다.
가상 환경에서 셸을 만들어 Docker 루트 디렉터리를 조사할 수 있습니다.

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

Ctrl+a를 누른 다음 k 및 y를 눌러 이 세션을 종료할 수 있습니다.

Docker for Windows

Windows에서 Docker는 약간 세분화되어 있습니다. Linux 컨테이너와 유사하게 작동하는 기본 Windows 컨테이너가 있습니다. Linux 컨테이너는 최소한의 Hyper-V 기반 가상 환경에서 실행됩니다.

Linux 이미지를 실행하기 위한 구성 및 가상 이미지는 기본 Docker 루트 폴더에 저장됩니다.

C:\ProgramData\DockerDesktop

 

 

도커 inspect

 

예시로, nginx 도커 image를 실행합니다.

docker run -it -d nginx

이미지를 검사하면 다음과 같은 경로가 표시됩니다.

$ docker inspect nginx

...
"LowerDir": "/var/lib/docker/overlay2/..ab/diff:/var/lib/docker/overlay2/..be/diff:/var/lib/docker/overlay2/..ef/diff:/var/lib/docker/overlay2/..a5/diff:/var/lib/docker/overlay2/..4e/diff",
"MergedDir": "/var/lib/docker/overlay2/..0b/merged",
"UpperDir": "/var/lib/docker/overlay2/..0b/diff",
"WorkDir": "/var/lib/docker/overlay2/..0b/work"
...

 

 

도커 이미지의 참조 위치로 이동할 수 있습니다.

$ cd /var/lib/docker/overlay2/..0b/

$ ls -lah
drwx--x---.  5 root root   69 Apr 19 11:25 .
drwx--x---. 33 root root 4096 Apr 19 11:25 ..
drwxr-xr-x.  6 root root   51 Apr 18 13:58 diff
-rw-r--r--.  1 root root   26 Apr 18 13:58 link
-rw-r--r--.  1 root root  492 Apr 18 13:58 lower
drwxr-xr-x.  1 root root   51 Apr 18 13:58 merged
drwx------.  3 root root   18 Apr 19 11:25 work

 

 

도커 root 폴더 구조

/var/lib/docker 내부에는 다양한 정보가 저장됩니다. 예를 들어 컨테이너, 볼륨, 빌드, 네트워크 및 클러스터에 대한 데이터입니다.

$ ls -la /var/lib/docker

total 152
drwx--x--x   15 root     root          4096 Feb  1 13:09 .
drwxr-xr-x   13 root     root          4096 Aug  1  2019 ..
drwx------    2 root     root          4096 May 20  2019 builder
drwx------    4 root     root          4096 May 20  2019 buildkit
drwx------    3 root     root          4096 May 20  2019 containerd
drwx------    2 root     root         12288 Feb  3 19:35 containers
drwx------    3 root     root          4096 May 20  2019 image
drwxr-x---    3 root     root          4096 May 20  2019 network
drwx------    6 root     root         77824 Feb  3 19:37 overlay2
drwx------    4 root     root          4096 May 20  2019 plugins
drwx------    2 root     root          4096 Feb  1 13:09 runtimes
drwx------    2 root     root          4096 May 20  2019 swarm
drwx------    2 root     root          4096 Feb  3 19:37 tmp
drwx------    2 root     root          4096 May 20  2019 trust
drwx------   15 root     root         12288 Feb  3 19:35 volumes

 

Docker images

기본 스토리지 드라이버 오버레이2를 사용하는 경우 Docker 이미지는 /var/lib/docker/overlay2에 저장됩니다. 여기에서 Docker 이미지의 읽기 전용 레이어와 변경 사항이 포함된 그 위에 있는 레이어를 나타내는 다양한 파일을 찾을 수 있습니다.

예제를 사용하여 콘텐츠를 살펴보겠습니다.

$ docker image pull nginx
$ docker image inspect nginx

[
    {
        "Id": "sha256:207...6e1",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:ad5...c6f"
        ],
        "Parent": "",
 ...
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 126698063,
        "VirtualSize": 126698063,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff:
                             /var/lib/docker/overlay2/585...9eb/diff",
                "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged",
                "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff",
                "WorkDir": "/var/lib/docker/overlay2/585...9eb/work"
            },
...

LowerDir은 이미지의 읽기 전용 레이어를 포함합니다. 변경 사항을 나타내는 읽기-쓰기 계층은 UpperDir의 일부입니다. 이미지를 변경한 경우에 NGINX UpperDir 폴더에 다음과 같은 로그 파일이 있을 수 있습니다.

$ ls -la /var/lib/docker/overlay2/585...9eb/diff

total 8
drwxr-xr-x    2 root     root    4096 Feb  2 08:06 .
drwxr-xr-x    3 root     root    4096 Feb  2 08:06 ..
lrwxrwxrwx    1 root     root      11 Feb  2 08:06 access.log -> /dev/stdout
lrwxrwxrwx    1 root     root      11 Feb  2 08:06 error.log -> /dev/stderr

MergedDir은 Docker에서 컨테이너를 실행하는 데 사용하는 UpperDir 및 LowerDir의 결과를 나타냅니다. WorkDir은 오버레이2의 내부 디렉토리이며 비어 있어야 합니다.

 

Docker Volumes

컨테이너에 영구 저장소를 추가하여 데이터를 컨테이너가 존재하는 것보다 더 오래 유지하거나 볼륨을 호스트 또는 다른 컨테이너와 공유할 수 있습니다. -v 옵션을 사용하여 볼륨으로 컨테이너를 시작할 수 있습니다.

아래와 같이 컨테이너를 실행 후 접속합니다. 접속 후 볼륨을 확인합니다.

$ docker run -d --name nginx_container -v /var/log nginx
$ docker exec -it nginx_container bash

## container 볼륨확인
# df -H
root@4078597b1af7:/# df -H
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sda2        22G  3.5G   18G  17% /var/log
...

위와 같이 볼륨이 마운트된 것을 확인 할 수 있습니다.

 

참조된 디렉토리에는 NGINX 컨테이너의 /var/log 위치에 있는 파일이 포함되어 있습니다.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data

total 88
drwxr-xr-x    4 root     root        4.0K Feb  3 21:02 .
drwxr-xr-x    3 root     root        4.0K Feb  3 21:02 ..
drwxr-xr-x    2 root     root        4.0K Feb  3 21:02 apt
-rw-rw----    1 root     43             0 Jan 30 00:00 btmp
-rw-r--r--    1 root     root       34.7K Feb  2 08:06 dpkg.log
-rw-r--r--    1 root     root        3.2K Feb  2 08:06 faillog
-rw-rw-r--    1 root     43         29.1K Feb  2 08:06 lastlog
drwxr-xr-x    2 root     root        4.0K Feb  3 21:02 nginx
-rw-rw-r--    1 root     43             0 Jan 30 00:00 w

 

Clean up space used by Docker

Docker 명령을 사용하여 사용하지 않는 컨테이너를 정리하는 것이 좋습니다. 컨테이너, 네트워크, 이미지 및 빌드 캐시는 다음을 실행하여 정리할 수 있습니다.

$ docker system prune -a

다음을 실행하여 사용하지 않는 볼륨을 제거할 수도 있습니다.

docker volume prune

 

'Docker' 카테고리의 다른 글

Docker Compose 네트워크  (0) 2022.04.21
Docker - 네트워크  (0) 2022.04.21
Install Docker Engine on CentOS  (0) 2022.04.18
Run the Docker daemon as a non-root user (Rootless mode)  (0) 2022.04.18
docker compose 설치  (0) 2022.03.18

+ Recent posts