[Docker]Docker 이미지 관리

2025. 11. 19. 04:14·cs/ops
728x90

0.0.Docker 사용이유

기술이 필요하라니까 도입을 하는 것이다. CLI명령어가 아닙니다.

 

왜 이 기술을 써야 하는가?

서비스를 운영하기 위해 필요한 것 (기획 개발 디자인 설계)

서비스를 오랫동안 운영하기 위해 필요한 것

 

지표 수집(API 응답실패율, 초)

서비스 운영에서는 다양한 지표를 지속적으로 수집하고 모니터링해야 합니다.

메시지가 1초 내 도착해야 하는 경우, 카카오톡과 같은 실시간 서비스에서는 지연이 허용되지 않지만, 슬랙과 같이 유연한 서비스에서는 1초 정도의 지연이 큰 문제가 되지 않습니다.

 

서비스 모니터링 결과에 맞춰서 사이클을 계속 배포합니다.  필요 시, 긴급 배포도 진행합니다.

 

지속 가능성(Sustainabilty)

반복적인 작업을 자동화→ 자동화하지 않으면 휴먼에러가 생길 수 밖에 없음

자동화를 위한 추상화!!

복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.

 

무엇을?

하드웨어: VMWare

서비스: docker

서비스 인프라: kubernetes

 

VM vs Container

VM: 하드웨어에 OS를 올리는 거임. 각 VM은 독립적인 커널을 가진다.

컨테이너: OS는 하나만 있고 커널도 하나만 있어서 공유함. 다만 서비스 사이에 파티션이 쳐져있어서 모를뿐임.

Docker ≠ 컨테이너(Docker는 컨테이너를 생성, 배포, 관리하기 위한 플랫폼이자 도구입니다.)

 

컨테이너 = 서비스의 추상화

 

0.1.Docker 구조

Docker Daemon으로 API 요청이 전달됩니다.

이미지가 있으면 컨테이너/ 없으면 자동으로 다운로드합니다.

이미지를 배포하거나 공유할 때는 Git처럼 Docker Registry에 이미지 푸시를 합니다.

Docker Daemon을 제외하면, Git과 유사하게 버전 관리와 배포 개념으로 이해할 수 있습니다.

 

컨테이너 구조

추상화되어 있다는게 컨테이너 기술을 새로운 개념이 발생된 것 아니라 격리 시키는 기술이다.

리눅스의 기본 명령어와 기능을 잘 조합해서 쓰기 쉽게하는 것이다.

 

1.1.Docker 이미지 관리

이미지 검색

docker search [OPTIONS] <Keyword>

 

이미지 다운로드

docker pull [OPTIONS] REPOSITORY[:TAG|@DIGEST]

 # Default
 docker pull <REPOSITORY>:latest
 # By Tag
 docker pull <REPOSITORY>:<TAG>
 # By digest
 docker pull <REPOSITORY>@<DIGEST>

주요 옵션

Option Short Default Description
--all-tag -a   태그된 모든 이미지를 다운로드합니다.
--platform     이미지의 plaform을 설정합니다.

 

Tag 또는 Digest를 사용하지 않는 경우, latest 이미지를 다운로드 받습니다.

도커는 태그를 명시하지 않는다면, DEFAULT가 lateset

Tag & Digest

  • Tag 는 사용자가 특정 이미지에 부여한 값이므로, 같은 Tag 라도 다운로드 시점에 따라 다른 이미지를 나타낼 수 있습니다.
    • ex) latest 태그
  • Digest 는 변경이 불가능한 고유의 값이며, 동일한 방식으로 생성된 이미지라면 동일한 생성됩니다.

DIGEST = 고유의 값(ex.주민등록)

 

주의사항

  • 동일한 Tag를 가진 이미지가 존재하는 경우, 이미지를 교체하지 않습니다.
  • 동일한 이미지더라도 Tag가 다른 경우 이미지가 추가됩니다.
  • 이미지마다 지원하는 arch가 다를 수 있습니다. (arch = 아키텍처)
    • arch = arm, amd64, ....

 

이미지 목록 보기

https://docs.docker.com/engine/reference/commandline/images/

docker images [OPTIONS] [REPOSITORY[:TAG]]

# Alias
docker image list
docker image ls

 

주요 옵션

Option Short Default Description
--all -a   중간 이미지(intermediate image도 표시합니다.
--digests     Digest를 표기합니다
--filter -f   필터 조건에 맞는 이미지만 표시합니다.
--no-trunc     sha256 형식의 전체 이미지 ID를 표기합니다.
--quitet -q   이미지 ID만 표기합니다.

 

Repository를 명시한 경우, 해당 이름을 가진 이미지만 검색합니다.

 

이미지 삭제하기

공간과, 새롭게 업데이트된 이미지가 있기에

https://docs.docker.com/reference/cli/docker/image/rm/

docker rmi [OPTIONS] IMAGE [IMAGE...]

# Alias
docker image rm

태그가 있으면 여러 이미지를 지울 수 있음

주요 옵션

Option Short Default Description
--force -f   컨테이너가 존재하더라도 이미지를 삭제합니다.

실행 중인 컨테이너는 이미지에서 생성되었더라도 삭제할 수 없음

 

주의사항

  • 동일한 Image ID를 가진 이미지 2개 이상인 경우 Image ID를 이용하여 삭제할 수 없습니다.
    • -f 옵션을 사용한 경우 모든 이미지를 삭제합니다.

 

모든 이미지 삭제하기

https://docs.docker.com/engine/reference/commandline/image_prune/

docker image prune [OPTIONS]

docker image prune 은 모든 dangling 이미지를 삭제하는 명령어 입니다.

(쓰지 않는 이미지/기존의 이름 뺏긴 것들)태그는 없고 digest만 있는 사용하지 않는 이미지입니다.

 

dangling 이미지

  • Repository가 none으로 표기되는 이미지입니다.
  • 일반적으로 다음과 같은 상황에서 발생합니다.
    • 동일한 이름(Name&Tag)을 가진 다른 이미지를 생성한 경우
    • Multi-Stage 빌드중 생성된 중간 이미지

이름을 뺏긴 이미지가 none으로 표시

멀티스테이지 빌드는 빌드용 단계와 최종 실행 단계를 나눠, 최종 결과만 가져오는 방식입니다.

$ docker images -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 5b95739d14ad About a minute ago 1.02GB

주요 옵션

Option Short Default Description
--all -a   dangling 이미지를 포함한 사용하지 않는 모든 이미지를 삭제합니다.
--filter     Provide filter values(e.g. util=<timestamp>)

 

이미지 정보 조회

https://docs.docker.com/engine/reference/commandline/inspect/

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

 

ubuntu:22.04 이미지 정보 조회하기

$ docker inspect ubuntu:22.04

 

연습문제

[연습] ARM용 Ubuntu 다운로드하기

다음 명령어를 이용하여 ubuntu:22.04의 linux/arm용 이미지를 다운로드할 수 있습니다.

sha256에 보기: Dockerfile 내용 다 보이니까 평문으로 넣지말기

 $ docker inspect ubuntu:22.04 -f "{{ .Architecture }}"

 

[연습] PostgreSQL 이미지의 레이어 갯수 확인하

조건
digest:
sha256:a2282ad0db623c27f03bab803975c9e3942a24e974f07142d5d69b6b8eaaf9e2

제시된 Digets 를 이용하여 다음과 같이 이미지를 다운로드합니다.

$ docker pull postgres@sha256:a2282ad0db623c27f03bab803975c9e3942a24e974f07142d5d69b6b8eaaf9e2

 

다운로드한 이미지를 확인합니다.

$ docker images postgres
$ docker images --digests postgres

 

다음과 같이 Docker Id를 이용하여 해당 이미지를 구성하고 있는 레이어들을 확인할 수 있습니다.

 $ docker inspect a2282ad0db62 -f "{{range $v := .RootFS.Layers}}{{println $v}}
 {{end}}"

 

참고:CJ올리브네트웍스 CLOUDWAVE 교육

728x90
반응형

'cs > ops' 카테고리의 다른 글

[Docker]Docker 이미지 생성하기  (1) 2025.11.19
[Docker]Docker 컨테이너 관리  (0) 2025.11.19
[AWS]Auto Scaling 실습 과정  (0) 2025.09.18
[CS]CI/CD란?  (0) 2025.09.16
[CS]이중화(HA)? 재해복구(DR)? 뭐가 다른걸까?  (0) 2025.09.14
'cs/ops' 카테고리의 다른 글
  • [Docker]Docker 이미지 생성하기
  • [Docker]Docker 컨테이너 관리
  • [AWS]Auto Scaling 실습 과정
  • [CS]CI/CD란?
lakedata
lakedata
lakedata 님의 블로그 입니다.
  • lakedata
    lakedata 님의 블로그
    lakedata
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • cs (82)
        • dev (28)
        • sec (29)
        • ops (25)
      • 자격증 (32)
        • 정보처리기사 (20)
        • 정보보안기사 (1)
        • aws dva (6)
        • aws dop (2)
      • IT서적 (27)
        • 클린아키텍처 (10)
        • 객체지향의사실과오해 (7)
        • 오브젝트 (10)
      • 코테 (42)
        • 알고리즘 (20)
        • 백준 (13)
        • 프로그래머스 (7)
  • 블로그 메뉴

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

    • github
  • 공지사항

  • 인기 글

  • 태그

    SQL
    docker
    Security
    CS
    Spring
    알고리즘
    Java
    AWS
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
lakedata
[Docker]Docker 이미지 관리
상단으로

티스토리툴바