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 |