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 교육
'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 |