Docker 이미지 관리 & Docker 이미지 업로드

2026. 6. 12. 16:00Docker


Ⅰ. Docker 이미지 관리

Docker 

이미지 관리
구분 설명 관련 요소
개념 컨테이너를 생성하기 위한 실행 가능한 템플릿 (스냅샷)으로,

운영체제와 라이브러리, 실행 파일 등이 포함된

읽기 전용 계층 구조
Base Image
Layer
Manifest
구조 여러 개의 레이어 (Layer)로 구성되고, 변경 내용은 새 레이어로 쌓임

(Union File System 기반)
AUFS
OverlayFS
특징 불변 (Immutable) 구조 이미지 중복 최소화
여러 컨테이너에서 재사용 가능
캐시 기반으로 빌드 속도 향상
저장 위치 항목 위치
로컬 /var/lib/docker/
원격 Docker Hub, Harbor, ECR 등 레지스트리
식별 방식 이미지 이름 : 태그 형식 (ex. nginx : latest) Digest (sha256 : hash)
내부적으로는 SHA256 다이제스트로 식별
기본 구성 요소 구성 요소 설명
Manifest 이미지 메타데이터 (OS, 아키텍처 등)
Config 환경 변수, 명령 설정
Layers 파일 시스템 데이터
관리 포인트 이미지 버전 관리 CI / CD 환경에서 중요
불필요한 이미지 정리
태그 체계 설계 (latest, stable, dev 등)
장점 빠른 배포 (레이어 캐싱) DevOps 필수 구성요소
환경 일관성 유지
클라우드 / 온프레미스 간 이식성 우수
한계 이미지 크기 증가 시 저장 / 전송 부담 Slim 이미지 활용 필요
보안 취약점 포함 시 전체 이미지 교체 필요

 

 

docker image inspect centos:8 명령을 통해 CentOS:8 이미지의 상세 정보 확인

 

 

docker image inspect ubuntu 명령을 통해 Ubuntu 이미지의 상세 정보 확인

 

 

docker image inspect nginx 명령을 통해 Nginx 이미지의 상세 정보 확인

 

 

docker image inspect debian 명령을 통해 Debian 이미지의 상세 정보 확인

 

 

# Ubuntu 이미지의 ID 값 확인

 

docker image inspect --format="{{.Id}}" ubuntu 명령을 통해

 

Ubuntu 이미지의 상세 정보 중 ID 값만 추출하여 확인

 

 

# CentOS:8 이미지의 ID 값 확인

 

docker image inspect --format="{{.Id}}" centos:8 명령을 통해

 

CentOS:8 이미지의 상세 정보 중 ID 값만 추출하여 확인

 

 

# Nginx 이미지의 ID 값 확인

 

docker image inspect --format="{{.Id}}" nginx 명령을 통해 Nginx 이미지의 상세 정보 중 ID 값만 추출하여 확인

 

 

# Debian 이미지의 ID 값 확인

 

docker image inspect --format={{.Id}}" debian 명령을 통해 Debian 이미지의 상세 정보 중 ID 값만 추출하여 확인

 

 

docker image ls 명령을 통해 이미지 목록 확인

 

 

# Nginx 이미지에 태그 부여

 

docker image tag nginx abcd 명령을 통해 Nginx 이미지에 추가 태그 abcd 부여

 

docker image ls 명령을 통해 태그가 잘 설정되었는지 확인

 

docker system df 명령을 통해 태그인 abcd는 이미지로 취급하지 않는다는 것 확인

 

 

# Nginx 이미지 태그 삭제

 

docker image rm abcd 명령을 통해 Nginx 이미지의 태그인 abcd 삭제

 

docker system df 명령을 통해 태그인 abcd가 삭제되어도 이미지 수에 변화가 없다는 것 확인

 

docker image ls 명령을 통해 태그가 잘 삭제되었는지 확인


 

Ⅱ. Docker 이미지 업로드 (Docker Image Push / Registry 관리)

Docker 

이미지 업로드

구분 설명 관련 요소
개념 로컬에서 빌드한 이미지를 원격 저장소 (Registry)에 업로드하여

다른 시스템과 사용자가 공유 및 배포할 수 있도록 하는 과정
Docker Hub
Private Registry
저장소 구조 구분 설명 nginx : 1.25
Registry 이미지 저장 서버
Repository 특정 이미지 모음 (nginx, ubuntu 등)
Tag 이미지 버전 (1.0, latest 등)
업로드 흐름 로그인 (docker login) CI / CD 자동화와 연동
이미지 태그 부여 (docker tag)
업로드 (docker push)
인증 및 접근 제어 구분 설명 Harbor
Docker Hub 사용자 인증 기반 ECR
Private Registry Basic Auth 또는 Token 방식 사용 GitHub Container

Registry
버전 관리 체계 각 태그별로 독립 버전 관리 가능

-> : latest, : dev, :stable 등으로 분리
배포 버전별

이미지 관리
보안 관리 이미지 서명 (Signing) 및 검증 (Notary) 공급망 보안 필수
취약점 스캔 도구 사용 (Trivy, Clair 등)
전송 구조 이미지 전체를 전송하지 않고, 변경된 레이어 단위로 업로드

(효율적인 동기화)
Docker Registry API v2
활용 사례 팀 내 공용 이미지 공유
CI / CD 파이프라인 자동 배포
멀티 스테이지 빌드 결과 업로드
한계 대용량 이미지 전송 시 느림 Private Registry 구축 필요
Public Registry 의존 시 보안 리스크

 

 

docker image ls 명령을 통해 이미지 목록 확인

 

 

# Nginx 이미지에 새 태그 부여

 

docker image tag nginx nayeo0n/webserver:1.0 명령을 통해 Nginx 이미지에 nayeo0n/webserver:1.0 태그 부여

 

docker image ls 명령을 통해 이미지에 태그가 잘 부여되었는지 확인

 

docker login -u nayeo0n 명령을 통해 도커 허브에 이미지 업로드하기 위해 로그인

 

 

ls .docker/ 명령을 통해 docker 디렉터리 내 파일 및 디렉터리 목록 확인

 

cat ./docker/config.json 명령을 통해 docker 디렉터리 내에 있는 config.json 파일 내용 확인

 

 

# Docker Hub에 이미지 업로드

 

docker image push nayeo0n/webserver:1.0 명령을 통해

 

Docker Hub에 nayeo0n/webserver:1.0 태그를 부여한 이미지 업로드

 

 

Docker Hub에 이미지 업로드된 것 확인

 

 

docker logout 명령을 통해 docker에서 로그아웃

 

 

이미지를 얼마나 다운로드 받을 수 있는지 등의 데이터 조회

 

 

계정 기반 데이터 조회

 

 

# Busybox 이미지 다운로드

 

docker image pull busybox 명령을 통해 Busybox 이미지 다운로드 받은 뒤,

 

이미지를 다운로드 할수록 다운로드 가능 횟수가 줄어드는 것 확인

 

 

docker container ls -a 명령을 통해 컨테이너 목록 확인

 

 

# webserver 컨테이너 생성

 

docker container create --name webserver nginx 명령을 통해

 

Nginx 이미지 사용하여 webserver 컨테이너 생성

 

docker container ls -a 명령을 통해 컨테이너가 잘 생성되었는지 확인

 

 

cal 명령을 통해 현재 날짜의 달력 확인

 

 

# test1 컨테이너 생성 및 실행

 

docker container run --name test1 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test1 컨테이너 생성 및 실행

 

/bin/cal 옵션을 통해 달력 출력하도록 설정

 

docker container ls -a 명령을 통해 컨테이너가 잘 생성되었는지 확인

 

 

# test2 컨테이너 생성 및 실행

 

docker container run --name test2 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test2 컨테이너 생성 및 실행

 

-i /bin/bash 옵션을 통해 test2 컨테이너에 대화형 모드 제공

 

uname -a 명령을 통해 운영체제 및 커널 정보 출력

 

docker container ls -a 명령을 통해 컨테이너가 잘 생성되었는지 확인

 

 

# test2 컨테이너 삭제

 

docker container rm -f 9e 명령을 통해 test2 컨테이너 삭제

 

docker container ls -a 명령을 통해 컨테이너가 잘 삭제되었는지 확인

 

 

# test2 컨테이너 생성 및 실행

 

docker container run test2 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test2 컨테이너 생성 및 실행

 

-t /bin/bash 옵션을 통해 test2 컨테이너에 터미널 모드 bash 쉘 제공

 

uname -a 명령을 통해 운영체제 및 커널 정보 출력

 

 

# 컨테이너 생성 및 실행

 

docker container run centos:8 명령을 통해 CentOS:8 이미지 사용하여 컨테이너 생성 및 실행

 

--rm 옵션을 통해 실행이 끝나면 자동으로 컨테이너가 샂게되도록 설정

 

-d 옵션을 통해 생성된 컨테이너를 백그라운드로 구동

 

/bin/ping localhost 옵션을 통해 명령 실행하도록 설정

 

docker container ls -a 명령을 통해 컨테이너가 잘 생성되었는지 확인

 

docker container logs fe 명령을 통해 생성된 컨테이너의 로그 확인

 

 

# test1 컨테이너 생성 및 실행

 

docker container run --name test1 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test1 컨테이너 생성 및 실행

 

 

# test2 컨테이너 생성 및 실행

 

docker container run --name test2 centos:8 명령을 통해 CentOS:8 이미지 사용하 test2 컨테이너 생성 및 실행

 

 

# test3 컨테이너 생성 및 실행

 

docker container run --name test3 centos:8 명령을 통해 CentOS:8 이미지 사용하 test3 컨테이너 생성 및 실행

 

docker container ls -a 명령을 통해 컨테이너가 잘 생성되었는지 확인

 

docker container ls -aq 명령을 통해 Docker 컨테이너 ID 목록만 출력

 

echo date 명령을 통해 date를 단순 문자열로 인식해 date 문자열 화면에 출력

 

echo $(date) 명령을 통해 현재 날짜 출력

 

 

# test1, test2, test3 컨테이너 삭제

 

docker container rm -f $(docker container ls -aq) 명령을 통해

 

출력되는 Docker 컨테이너 ID 목록의 컨테이너 모두 삭제

 

docker container ls -a 명령을 통해 컨테이너가 잘 삭제되었는지 확인

 

 

vi .bashrc 명령을 통해 vi 편집기 사용하여 .bashrc 파일에 단축 명령어 저장

 

 

source .bashrc 명령을 통해 변경된 .bashrc 파일의 내용 적용

 

 

# test1 컨테이너 생성 및 실행

 

docker container run --name test1 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test1 컨테이너 생성 및 실행

 

 

# test2 컨테이너 생성 및 실행

 

docker container run --name test2 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test2 컨테이너 생성 및 실행

 

 

# test3 컨테이너 생성 및 실행

 

docker container run --name test3 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test3 컨테이너 생성 및 실행

 

cls 명령을 통해 컨테이너가 잘 생성되었는지 확인

 

 

# test1, test2, test3 컨테이너 삭제

 

crm 명령을 통해 컨테이너 모두 삭제

 

cls 명령을 통해 컨테이너가 잘 삭제되었는지 확인

 

docker image ls 명령을 통해 이미지 목록 확인

 

 

# 이미지 삭제

 

irm 명령을 통해 이미지 목록 모두 삭제

 

docker image ls 명령을 통해 이미지가 잘 삭제되었는지 확인

 

 

docker 2에서 vi .bashrc 명령을 통해 vi 편집기 사용하여 .bashrc 파일에 단축 명령어 저장

 

cat .bashrc 명령을 통해 .basrc 파일의 내용 확인

 

source .bashrc 명령을 통해 변경된 .bashrc 파일의 내용 적용

 

cls 명령을 통해 컨테이너 목록 확인

 

 

# 컨테이너 삭제

 

crm 명령을 통해 컨테이너 삭제

 

 

# 이미지 삭제

 

irm 명령을 통해 이미지 모두 삭제

 

 

# testweb 컨테이너 생성

 

docker container create --name testweb nginx 명령을 통해 Nginx 이미지 사용하여 testweb 컨테이너 생성

 

cls 명령을 통해 컨테이너가 잘 생성되었는지 확인

 

 

# testweb 컨테이너 구동

 

docker container start testweb 명령을 통해 testweb 컨테이너 구동

 

cls 명령을 통해 컨테이너가 잘 구동 중인지 확인

 

 

# testweb 컨테이너 재구동

 

docker container restart testweb 명령을 통해 testweb 컨테이너 재구동

 

cls 명령을 통해 컨테이너가 재구동되었는지 확인

 

 

# testweb 컨테이너 재구동

 

docker container restart testweb 명령을 통해 testweb 컨테이너 재구동

 

cls 명령을 통해 컨테이너가 재구동되었는지 확인

 

 

# testweb 컨테이너 정지

 

docker container stop testweb 명령을 통해 testweb 컨테이너 정지

 

cls 명령을 통해 컨테이너가 잘 중지되었는지 확인

 

 

# testweb 컨테이너 종료

 

docker container kill testweb 명령을 통해 testweb 컨테이너 종료

 

cls 명령을 통해 컨테이너가 잘 종료되었는지 확인

 

kill -l 명령을 통해 kill 명령어의 옵션 확인


Ⅲ. test1, test2, test3, test4 컨테이너 생성 및 구동

 

# test1 컨테이너 생성 및 실행

 

docker container run --name test1 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test1 컨테이너 생성 및 실행

 

--rm 옵션을 통해 실행이 끝나면 test1 컨테이너가 자동으로 삭제되도록 설정

 

cat /os-release 옵션을 통해 쉘이 실행된 터미널 환경에서 /etc/os-release 파일 내용 확인

 

 

# test2 컨테이너 생성 및 실행

 

docker container run --name test2 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test2 컨테이너 생성 및 실행

 

--rm 옵션을 통해 실행이 끝나면 test2 컨테이너가 자동으로 삭제되도록 설정

 

cat /os-release 옵션을 통해 쉘이 실행된 터미널 환경에서 /etc/os-release 파일 내용 확인

 

exit 명령을 통해 test2 컨테이너 내부에서 나옴

 

cls 명령을 통해 컨테이너가 잘 삭제되었는지 확인

 

 

# test3 컨테이너 생성 및 실행

 

docker container run --name test3 centos:8 명령을 통해 CentOS:8 이미지 사용하여 test3 컨테이너 생성 및 실행

 

--rm 옵션을 통해 실행이 끝나면 test3 컨테이너가 자동으로 삭제되도록 설정

 

cat /os-release 옵션을 통해 쉘이 실행된 터미널 환경에서 /etc/os-release 파일 내용 확인

 

exit 명령을 통해 test3 컨테이너 내부에서 나옴

 

cls 명령을 통해 컨테이너가 잘 삭제되었는지 확인

 

 

# test4 컨테이너 생성 및 실행

 

docker container run --name test4 nginx 명령을 통해 Nginx 이미지 사용하여 test4 컨테이너 생성 및 실행

 

--rm 옵션을 통해 실행이 종료되면 자동으로 test4 컨테이너가 삭제되도록 설정

 

-d 옵션을 통해 test4 컨테이너를 백그라운드로 구동

 

-p 80:80 옵션을 통해 호스트의 80번 포트와 컨테이너의 80번 포트 매핑

 

cls 명령을 통해 컨테이너 생성 목록 확인

 

 

# test4 컨테이너 종료

 

docker container stop test4 명령을 통해 test4 컨테이너 종료

 

cls 명령을 통해 컨테이너가 잘 종료되었는지 확인