[Docker] 이미지

2024. 12. 31. 09:57·DevOps/Docker

이미지란? 

컨테이너를 실행하기 위한 모든 파일, 라이브러리, 설정 등을 포함한 읽기 전용 템플릿

  • Dockerfile을 사용하여 이미지를 생성
  • 컨테이너를 생성하기 위한 템플릿 역할

이미지 이름 구성

<레지스트리>/<계정 이름>/<이미지 이름>:<태그>
  • 레지스트리: 이미지를 저장하고 관리하는 원격 저장소
  • 계정 이름: 이미지 소유자를 구분하기 위한 네임스페이스
  • 이미지 이름: 이미지의 고유 이름
  • 태그: 이미지 버전

 

예시

Docker Hub의 공식 Nginx 이미지

  • docker.io/library/nginx:latest 를 의미
nginx:latest

이미지 레이어

도커의 이미지는 여러 이미지 레이어가 중첩된 형태로, 각 레이어는 이전 레이어의 변경 사항을 가지고 있음

  • 예를 들어 nginx 이미지를 다운 받을 때, ubuntu 이미지가 존재하는 경우 nginx 레이어만 다운받음 → 이를 통해 효율성과 재사용성을 높임
  • 이미지 레이어는 Dockerfile의 RUN, COPY, ADD 명령 실행 결과로 생성됨
  • 이미지 레이어는 읽기 전용 계층(Read-Only layer) → 이미지의 불변성 유지를 위해
  • 컨테이너 생성 시, 읽기/쓰기 전용 레이어(R/W layer)를 추가하여 애플리케이션 실행 중 변경사항을 저장함

 

nginx 이미지의 레이어 구조 확인하기

nginx 이미지는 debian 기반의 베이스 이미지에 LABEL, ENV, RUN, COPY 등 명령어를 통해 생성된 여러 레이어가 중첩된 형태임을 확인할 수 있음

$ docker history nginx
IMAGE          CREATED       CREATED BY                                       SIZE      COMMENT
bdf62fd3a32f   2 weeks ago   CMD ["nginx" "-g" "daemon off;"]                 0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   STOPSIGNAL SIGQUIT                               0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   EXPOSE map[80/tcp:{}]                            0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   ENTRYPOINT ["/docker-entrypoint.sh"]             0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   COPY 30-tune-worker-processes.sh /docker-ent…   4.62kB    buildkit.dockerfile.v0
<missing>      2 weeks ago   COPY 20-envsubst-on-templates.sh /docker-ent…   3.02kB    buildkit.dockerfile.v0
<missing>      2 weeks ago   COPY 15-local-resolvers.envsh /docker-entryp…   389B      buildkit.dockerfile.v0
<missing>      2 weeks ago   COPY 10-listen-on-ipv6-by-default.sh /docker…   2.12kB    buildkit.dockerfile.v0
<missing>      2 weeks ago   COPY docker-entrypoint.sh / # buildkit           1.62kB    buildkit.dockerfile.v0
<missing>      2 weeks ago   RUN /bin/sh -c set -x     && groupadd --syst…   99.9MB    buildkit.dockerfile.v0
<missing>      2 weeks ago   ENV DYNPKG_RELEASE=1~bookworm                    0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   ENV PKG_RELEASE=1~bookworm                       0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   ENV NJS_RELEASE=1~bookworm                       0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   ENV NJS_VERSION=0.8.7                            0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   ENV NGINX_VERSION=1.27.3                         0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   LABEL maintainer=NGINX Docker Maintainers <d…   0B        buildkit.dockerfile.v0
<missing>      2 weeks ago   # debian.sh --arch 'arm64' out/ 'bookworm' '…   97.2MB    debuerreotype 0.15

 

dive 명령으로 레이어마다 어떤 디렉터리가 속하는지 확인할 수 있음

$ dive nginx

컨테이너를 이미지로 만들기

실행 중인 nignx 컨테이너 내부로 접속

$ docker exec -it some-nginx /bin/sh

 

html 내용 변경하기

$ cd /usr/share/nginx/html
$ echo "My awesome website" > index.html

 

localhost:8080 접속해보면 내용이 변경됨

container commit 명령으로 some-nginx 컨테이너를 frontend 이미지로 생성

$ docker container commit some-nginx frontend:latest
$ docker images

 

기존에 실행 중이던 some-nginx 컨테이너 삭제하고, frontend 이미지로 새로운 컨테이너 생성

$ docker stop some-nginx
$ docker rm some-nginx 
$ docker run --name my-website -d -p 8080:80 frontend:latest

 

localhost:8080 접속해보면, 기본적인 nginx에 html 내용이 변경된 컨테이너가 생성된 것을 확인할 수 있음

 

'DevOps > Docker' 카테고리의 다른 글

[Docker] Multi-stage build  (0) 2024.12.31
[Docker] docker compose  (0) 2024.12.31
[Docker] Volume  (0) 2024.12.31
[Docker] Dockefile  (0) 2024.12.31
[Docker] Docker 설치 및 기본 명령어  (0) 2024.12.31
'DevOps/Docker' 카테고리의 다른 글
  • [Docker] docker compose
  • [Docker] Volume
  • [Docker] Dockefile
  • [Docker] Docker 설치 및 기본 명령어
Doodo
Doodo
  • Doodo
    Doodo
    Doodo
  • 전체
    오늘
    어제
    • 분류 전체보기 (192)
      • CS (17)
        • Network (11)
        • Database (6)
      • Language (19)
        • Python (11)
        • SQL (6)
        • R (2)
      • Linux (17)
      • DevOps (35)
        • Git (7)
        • Docker (8)
        • Kubernetes (9)
        • GCP (4)
        • AWS (7)
      • Data Engineering (50)
        • 책 리뷰 (14)
        • Airflow (35)
        • Redis (1)
      • DBMS (21)
        • CUBRID (21)
      • ML & DL (2)
      • 코딩테스트 (24)
      • 프로젝트 (7)
        • 서울시 대기현황 데이터 적재 프로젝트 (4)
        • CryptoStream (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Doodo
[Docker] 이미지
상단으로

티스토리툴바