본문 바로가기
인공지능 개발하기/Backend

[Docker] 5. 이미지 구조 살펴보기

by 선의공 2024. 10. 15.

 

 

안녕하세요.

이번 포스팅에서는 이미지가 어떻게 구성되어있는지 

확인해보겠습니다.

 


 

1. 생성된 이미지 확인

 

아래 명령어를 입력하면 이미지 구성을 확인할 수 있습니다.

docker inspect 이미지ID

 


 

2. 이미지 구조

저는 저번 포스팅에서 제가 직접 생성한 python base 이미지를 살펴보겠습니다.

[
    {
        "Id": "sha256:280862e09443acfa5ab9ea5c6a021d26c372ed52589fafc45a81996620644c6d",
        "RepoTags": [],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "buildkit.dockerfile.v0",
        "Created": "2024-10-12T06:21:10.806283175Z",
        "DockerVersion": "27.2.0",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305",
                "PYTHON_VERSION=3.13.0"
            ],
            "Cmd": [
                "python",
                "rng.py"
            ],
            "ArgsEscaped": true,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "/app",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "arm64",
        "Variant": "v8",
        "Os": "linux",
        "Size": 371721351,
        "GraphDriver": {
            "Data": null,
            "Name": "overlayfs"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:8badcfdd9076e3c27484535c1e425870eac2895f15d23039e0e6b2ca6f9caf29",
                "sha256:8d6551b23d413f9005cf2b8437db7f8cd4417f0411ca71bf77fd1bfcb0da4296",
                "sha256:9ea571566ff7315aea398913f34a9cc2c8158d451d0c094b54f678a2078bd544",
                "sha256:7f0175a09165a9d95ee23df2046ffb5bf375df25b444f675529ead9d15e15da5",
                "sha256:b1c4ebb193de2cba21ee8e7833f7709a6a25d375707e7e51d5df176a52d9dba4",
                "sha256:794b76f65c3f8a3b8257bde77208b3f87a59841b4909be6bde1c0278254d8e93",
                "sha256:b1a5398df31f8d68ddeceb2ae446199924fc06e0ee4030a997d2a86740e4f412",
                "sha256:2df42f87d70288668fbf421a9a6a0e80c5718a08102c8a19bb69db4405632f2b",
                "sha256:45cfcaecfc971039ea424f11f9fcc474fe13b9fb39a0aafa76bfc17c22b680c4"
            ]
        },
        "Metadata": {
            "LastTagTime": "2024-10-15T05:39:27.786518668Z"
        }
    }
]

 

  • Id:
    • Docker 이미지의 고유한 식별자 id. Docker가 이미지를 식별할 때 사용.
  • RepoTags:
    • 레포지토리(Docker hub)에 업로드 되었을 경우 이미지의 이름과 버전 정보같은 식별 태그.
  • RepoDigests:
    • 레포지토리(Docker hub)에 업로드 되었을 경우 이미지의 식별 키.
  • Parent:
    • 이 필드는 부모 이미지의 ID를 나타냅니다. 부모 이미지가 없다면 빈 값.
  • Comment:
    • 이미지 생성과 관련된 주석 정보. "buildkit.dockerfile.v0"는 Dockerfile의 버전 정보를 나타내는 듯함.
  • Created:
    • 이미지가 생성된 시간을 나타냄.
  • DockerVersion:
    • 이미지를 생성할 때 사용된 Docker의 버전 정보.
  • Author:
    • 이미지를 생성한 사람의 정보. 
  • Config:
    • Hostname: 컨테이너가 실행될 때 설정될 호스트 이름.
    • Domainname: 도메인 이름.
    • User: 컨테이너에서 명령어를 실행할 사용자 계정.
    • AttachStdin/AttachStdout/AttachStderr: 표준 입력, 표준 출력, 표준 오류에 연결할지 여부.
    • Tty: 터미널을 사용해 상호작용할지 여부.
    • OpenStdin: 컨테이너 시작 시 표준 입력을 열지 여부.
    • Env: 컨테이너 내에서 사용되는 환경 변수. 해당 이미지에서는 PATH와 PYTHON_VERSION이 설정되어 있음.
    • Cmd: 컨테이너가 시작될 때 실행될 기본 명령어 . 해당 이미지에서는 ["python", "rng.py"]가 설정되어 있어, rng.py 파일을 실행하는 Python 스크립트임을 알 수 있음.
    • ArgsEscaped: 명령어 인자가 이스케이프 처리되었는지 여부.
    • Image: 기반이 되는 이미지의 ID. 해당 이미지에서는 비어 있으므로 특정 이미지에 의존하지 않는 독립적인 이미지.
    • WorkingDir: 컨테이너 내에서 작업 디렉토리로 설정된 경로입니다. 해당 이미지에서는 /app 디렉토리에서 작업이 진행됨.
  • Architecture:
    • 이미지가 실행될 CPU 아키텍처를 나타냄. Intel, amd, arm 등. 해당 이미지에서는여기서는 "arm64"로, ARM 기반 64비트 아키텍처를 지원함.
  • Variant:
    • 아키텍처의 변형 버전을 나타냄. 해당 이미지에서는 "v8"으로, ARMv8 버전을 의미.
  • Os:
    • 이미지가 실행될 운영체제. 해당 이미지에서는 "linux"로, 리눅스 운영체제에서 실행될 이미지임을 나타냄. (macOS에서 생성을 했어도 linux 커널로 실행됨으로 linux로 나온다고 함.)
  • Size:
    • 이미지의 크기(byte). 
  • GraphDriver:
    • Name: 이미지를 저장하는 데 사용된 저장 드라이버의 이름? "overlayfs"는 Docker가 일반적으로 사용하는 파일 시스템 중 하나라고 함.
  • RootFS:
    • Type: 루트 파일 시스템의 유형. "layers"는 레이어 기반 파일 시스템을 사용함을 의미.
    • Layers: 이미지의 각 레이어에 대한 해시 값. 각 레이어는 이미지의 구성 요소를 나타냄. 해당 이미지는 Dockerfile 구성시 FROM 명령어로 base로 python을 기본 레이어로 사용했고, 그 뒤에 설정한 여러 레이어가 붙여짐.
  • Metadata:
    • LastTagTime: 이미지에 마지막으로 태그가 지정된 시간. == 이미지가 마지막으로 업데이트된 시간.

 

 

 

 


 

 

이렇게 이미지 구조를 살펴보았습니다.

 

앞에 예제에서 run에서 명령어로

detech와 attach, Stdin, tty를 설정했었는데

이미지 내에 해당 설정 변수가 존재해서 가능한 것이었네요!