Docker 이미지 생성

2026. 6. 12. 22:18Docker


Ⅰ. 컨테이너를 이용하여 이미지 생성

컨테이너 

이용하여 

이미지 생성
구분 설명
기본 개념 도커 허브에서 공식 이미지를 다운로드 -> 컨테이너 생성 -> 환경 구성 -> 새로운 이미지 생성
활용 목적 컨테이너 내 설정 (패키지, 환경변수, 소스코드 등)을 그대로 이미지로 저장
배포용, 백업용, 테스트용 이미지 제작
추가 방식 컨테이너 기반 생성 (docker container commit)
tar 파일 기반 생성 (docker export, docker import)
주요 장점 환경 재설정 없이 동일한 상태 재현 가능
서비스 버전 관리 및 배포 자동화 용이

 

Ⅰ - Ⅰ. 컨테이너 이미지 생성 및 관리 명령어

이미지 관련

명령어
명령어 설명 비고
docker container commit 컨테이너의 현재 상태를 그대로 새로운 이미지로 생성 실행 중인 컨테이너 기반
docker container export 컨테이너의 파일 시스템을 .tar 파일로 내보냄 실행 이력 제외
순수 파일 구조만 저장
docker image import .tar 파일을 이용하여 새 이미지 생성 export한 파일을 이미지로 복원
docker image save 이미지를 .tar 파일로 저장 (백업용) 여러 이미지 동시 저장 가능
docker image load 저장된 .tar 이미지 파일을 다시 로드 다른 서버나 환경으로 이미지 

이동 시 사용
docker system prune 사용하지 않는 이미지, 컨테이너,

네트워크, 캐시 일괄 삭제
디스크 공간 정리 시 유용

 

● 명령어별 동작 요약

구분 동작 주체 생성 결과 특징
commit 실행 중인 컨테이너 새 이미지 생성 현재 상태 그대로 이미지화
export 컨테이너 tar 파일 생성 실행 로그와 메타 데이터 제외
import tar 파일 새 이미지 생성 단순 파일 기반 복원
save 이미지 tar 파일 생성 이미지 백업용
load tar 파일 이미지 복원 save와 짝꿍 명령
prune 시스템 불필요 리소스 정리 -a 옵션 시 전부 삭제

 

 

 

# httpd 이미지 다운로드

 

docker image pull httpd 명령을 통해 httpd 이미지 다운로드

 

docker image ls 명령을 통해 httpd 이미지가 잘 다운로드되었는지 확인

 

 

# testweb1 컨테이너 생성

 

docker container create --name testweb1 httpd 명령을 통해  HTTPD 이미지 사용하여 testweb1 컨테이너 생성

 

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

 

 

#testweb2 컨테이너 생성 및 실행

 

docker container run --name testweb2 httpd 명령을 통해 HTTPD 이미지 사용해 testweb2 컨테이너 생성 및 실행

 

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

 

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

 

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

 

 

docker container commit —help 명령을 통해 docker container commit 명령어의 상세 옵션 확인

 

 

# 새로운 이미지 생성

 

docker container commit 명령을 통해 실행 중인 컨테이너의 현재 상태를 새로운 이미지로 저장

 

-a “yoon na yeon” 옵션을 통해 이미지 생성자 정보 추가

 

-m “testweb1-img” 옵션을 통해 이미지의 변경 이력을 파악하는 데 유용한 커밋 메시지 추가

 

testweb1 옵션을 통해 새로운 이미지로 만들 원본 컨테이너 지정

 

nayeo0n/testweb1:1.0 옵션을 통해 사용자 이름 or 저장소 이름/이미지 이름 : 버전 태그 지정

 

 

# 새로운 이미지 생성

 

docker container commit 명령을 통해 실행 중인 컨테이너의 현재 상태를 새로운 이미지로 저장

 

-a “yoon na yeon” 옵션을 통해 이미지 생성자 정보 추가

 

-m “testweb2-img” 옵션을 통해 이미지의 변경 이력을 파악하는 데 유용한 커밋 메시지 추가

 

testweb2 옵션을 통해 새로운 이미지로 만들 원본 컨테이너 지정

 

nayeo0n/testweb2:1.0 옵션을 통해 사용자 이름 or 저장소 이름/이미지 이름 : 버전 태그 지정

 

docker image ls 명령을 통해 새로 생성된 이미지 확인

 

 

docker image inspect nayeo0n/testweb1:1.0 명령을 통해 nayeo0n/testweb1:1.0 이미지 상세 정보 확인

 

 

docker image inspect nayeo0n/tesetweb2:1.0 명령을 통해 nayeo0n/testweb2:1.0 이미지 상세 정보 확인

 

 

# test3 컨테이너 생성 및 실행

 

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

 

-it /bin/bash 옵션을 통해 test3 컨테이너 내부에 직접 접근할 수 있는 bash 쉘 실행하도록 설정

 

apt update 명령을 통해 패키지 목록 업데이트

 

 

ping 명령을 통해 Ubuntu 이미지에 ping 패키지가 기본적으로 포함되어 있지 않다는 것 확인

 

apt-get –y install iputils-ping 명령을 통해 ping 패키지 설치

 

 

ping -c 3 8.8.8.8 명령을 통해 ping 패키지 잘 설치되었는지 확인

 

ps –ef 명령을 통해 컨테이너 내부에 실행 중인 프로세스 목록 확인

 

 

nslookup 명령을 통해 Ubuntu 이미지에 nslookup 패키지가 기본적으로 포함되어 있지 않다는 것 확인

 

apt-get –y install bind9-dnsutils 명령을 통해 nslookup 관련 패키지 설치

 

 

nslookup www.google.com  명령을 통해 잘 nslookup 패키지가 잘 설치되었는지 확인

 

 

ip address 명령을 통해 Ubuntu 이미지에 ip address 패키지가 기본적으로 포함되어 있지 않다는 것 확인

 

apt -y install route2 명령을 통해 route 관련 패키지 설치

 

ip route 명령을 통해 잘 설치되었는지 확인

 

 

htop 명령을 통해 Ubuntu 이미지에 htop 패키지가 기본적으로 포함되어 있지 않다는 것 확인

 

apt-get –y install htop 명령을 통해 htop 관련 패키지 설치

 

 

echo “12324” > testfile.txt 명령을 통해 빈 파일인 testfile.txt 파일을 생성하고, 파일 안에 “1234”라는 텍스트 저장

 

ls 명령을 통해 testfile.txt 파일이 잘 생성되었는지 확인

 

cat testfile.txt 명령을 통해 testfile.txt 파일에 내용이 잘 저장되었는지 확인

 

ctrl+p+q를 통해 컨테이너 내부 bash 쉘에서 나옴

 

 

docker container ls –a 명령을 통해 Ubuntu 이미지를 사용하는 컨테이너가 잘 생성되었는지 확인

 

 

# 컨테이너 이름 testweb3으로 재설정

 

docker container rename test3 testweb3 명령을 통해 test3 컨테이너의 이름을 testweb3으로 변경

 

docker container ls –a 명령을 통해 컨테이너의 이름이 잘 변경되었는지 확인

 

 

# 새로운 이미지 생성

 

docker container commit 명령을 통해 실행 중인 컨테이너의 현재 상태를 새로운 이미지로 저장

 

-a “yoon na yeon” 옵션을 통해 이미지 생성자 정보 추가

 

-m “testweb3-img” 옵션을 통해 이미지의 변경 이력을 파악하는 데 유용한 커밋 메시지 추가

 

testweb3 옵션을 통해 새로운 이미지로 만들 원본 컨테이너 지정

 

nayeo0n/testweb3:1.0 옵션을 통해 사용자 이름 or 저장소 이름/이미지 이름 : 버전 태그 지정

 

docker image ls 명령을 통해 새로 생성된 이미지 확인

 

 

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

 

 

docker image inspect nayeo0n/testweb3:1.0 명령을 통해 nayeo0n/testweb3:1.0 이미지의 상세 정보 확인 후,

 

ubuntu:latest 이미지의 상세 정보 중 RootFS 부분과

 

nayeo0n/testweb3:1.0 이미지의 상세 정보 중 RootFS 부분 비교

 

 

# testweb4 컨테이너 생성 및 실행

 

docker container run --name testweb4 nayeo0n/testweb3:1.0 명령을 통해

 

nayeo0n/testweb3:1.0 이미지 사용하여 testweb4 컨테이너 생성 및 실행

 

-it /bin/bash 옵션을 통해 testweb4 컨테이너에 직접 접근할 수 있는 bash 쉘 실행하도록 설정

 

apt-get update 명령을 통해 패키지 목록을 최신 상태로 업데이트

 

 

ping –c 8.8.8.8 명령을 통해 ping 테스트 잘 되는지 확인

 

nslookup www.google.com 명령을 통해 nslookup 명령이 잘 실행되는지 확인

 

ip route 명령을 통해 route 명령이 잘 실행되는지 확인

 

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

 

cat testfile.txt 명령을 통해 testfile.txt 파일의 내용 확인

 

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

 

 

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

 

 

# testweb1, testweb2, testweb3, testweb4 컨테이너 삭제

 

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

 

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

 

 

pwd 명령을 통해 현재 위치한 디렉터리 확인

 

vi .bashrc 명령을 통해 vi 편집기 사용하여 .bashrc 파일 내용 수정

 

cat .bashrc 명령을 통해 .bashrc 파일의 내용이 잘 수정되었는지 확인

 

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

 

 

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

 

 

# 컨테이너 생성 및 실행

 

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

 

-it 옵션을 통해 컨테이너에 직접 접근할 수 있는 쉘 실행하도록 설정

 

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

 

ls / 명령을 통해 컨테이너 내부 쉘의 루트 디렉터리에 있는 파일 및 디렉터리 목록 확인

 

exit 명령을 통해 컨테이너 내부 쉘 종료

 

 

mkdir test 명령을 통해 test 디렉터리 생성

 

cd test 명령을 통해 홈 디렉터리에서 test 디렉터리로 이동

 

mkdir dir1 명령을 통해 test 디렉터리 안에 dir1 디렉터리 생성

 

 cp /etc/services file1 명령을 통해 /etc/services 파일의 내용을 복사하여 file1 파일 생성

 

cp /etc/services file2 명령을 통해 /etc/services 파일의 내용을 복사하여 file2 파일 생성

 

cp /etc/services file3 명령을 통해 /etc/services 파일의 내용을 복사하여 file3 파일 생성

 

cp /etc/services file4 명령을 통해 /etc/services 파일의 내용을 복사하여 file4 파일 생성

 

ls –l 명령을 통해 디렉터리와 파일이 잘 생성되었는지 확인

 

 

cp file* dir1 명령을 통해 file로 시작하는 모든 파일을 dir1 디렉터리로 복사

 

tree 명령을 통해 잘 복사되었는지 트리 구조로 확인

 

cp –r dir1 dir2 명령을 통해 dir1 디렉터리의 내용을 새로 생성한 dir2 디렉터리로 복사

 

cp –r dir1 dir3 명령을 통해 dir1 디렉터리의 내용을 새로 생성한 dir3 디렉터리로 복사

 

cp –r dir1 dir4 명령을 통해 dir1 디렉터리의 내용을 새로 생성한 dir4 디렉터리로 복사

 

tree 명령을 통해 잘 복사되었는지, 잘 생성되었는지 트리 구조로 확인

 

 

tar cf test.tar * 통해 현재 디렉터리의 모든 파일과 디렉터리를 하나로 묶는 test.tar 아카이브 파일 생성

 

ls –l 명령을 통해 아카이브 파일이 잘 생성되었는지 확인

 

file test.tar 명령을 통해 test.tar 파일의 종류 식별

 

 

ls 명령을 통해 현재 디렉터리의 파일 및 디렉터리의 목록 확인

 

rm –rf dir* file* 명령을 통해 dir로 시작하는 모든 디렉터리와 file로 시작하는 모든 파일 재귀적으로 삭제

 

ls 명령을 통해 잘 삭제되었는지 확인

 

tar tf test.tar 명령을 통해 test.tar 아카이브 파일의 내용 확인

 

 

tar xf test.tar 명령을 통해 test.tar 아카이브 파일에 포함된 모든 파일과 디렉터리를 현재 디렉터리에 복원

 

ls 명령을 통해 잘 복원되었는지 확인

 

cd 명령을 통해 test 디렉터리에서 홈 디렉터리로 이동

 

rm –rf test 명령을 통해 test 디렉터리 삭제

 

ls 명령을 통해 잘 삭제되었는지 확인

 

 

# 컨테이너 생성 및 실행

 

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

 

-it 옵션을 통해 컨테이너에 직접 접근할 수 있는 쉘 실행하도록 설정

 

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

 

ls / 명령을 통해 컨테이너 내부 쉘의 루트 디렉터리에 있는 파일 및 디렉터리 목록 확인

 

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

 

 

# testweb1 컨테이너 생성

 

docker container create --name testweb1 httpd 명령을 통해 HTTPD 이미지 사용하여 testweb1 컨테이너 생성

 

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

 

 

# testweb2 컨테이너 생성

 

docker container create --name testweb2 httpd 명령을 통해 HTTPD 이미지 사용하여 testweb2 컨테이너 생성

 

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

 

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

 

 

mkdir /test 명령을 통해 /test 디렉터리 생성

 

cd /test 명령을 통해 홈 디렉터리에서 /test 디렉터리로 이동

 

 

# testweb1 컨테이너의 파일 시스템 export

 

docker container export testweb1 명령을 통해 testweb1 컨테이너의 파일 시스템을 .tar 아카이브로 내보냄

 

-o testweb1.tar 옵션을 통해 결과로 생성될 아카이브 파일의 이름을 testweb1.tar로 지정

 

file testweb1.tar 명령을 통해 testweb1.tar 파일이 종류 식별

 

tar tf testweb1.tar | more 명령을 통해 testweb1.tar 아카이브 파일에 포함된 파일 및 디렉터리 목록 출력하고,

 

출력 내용이 화면을 넘길 때, 한 화면씩 끊어서 보여주도록 설정

 

 

# testweb1 컨테이너의 파일 시스템 export

 

docker container export testweb1 명령을 통해  testweb1 컨테이너의 파일 시스템을 .tar 아카이브로 내보냄

 

-o testweb1.tar 옵션을 통해 결과로 생성될 아카이브 파일의 이름을 testweb1.tar로 지정

 

mkdir –p /app/httpd1 명령을 통해 app 디렉터리 안에 httpd1 디렉터리 생성

 

(-p 옵션으로 인해 상위 디렉터리 존재하지 않을 경우, 함께 생성)

 

tar xf testweb1.tar –C /app/httpd1/ 명령을 통해

 

testweb1,tar 아카이브 파일의 내용을  /app/httpd1 디렉터리 안으로 압축 해제

 

ls /app/httpd1/ 명령을 통해 /app/httpd1 디렉터리의 파일 목록을 루트 디렉터리 구조 그대로 출력

 

 

# testweb2 컨테이너의 파일 시스템 export

 

docker container export testweb2 명령을 통해 testweb2 컨테이너를 testweb2.tar로 내보내도록 함

 

tar xf testweb2.tar –C /app/httpd2 명령을 통해 testweb2.tar 아카이브 파일을 /app/httpd2 디렉터리로 압축 해제

 

mkdir –p /app/httpd2 명령을 통해 app 디렉터리 안에 httpd2 디렉터리 생성

 

(-p 옵션으로 인해 상위 디렉터리 존재하지 않을 경우, 함께 생성)

 

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

 

ls /app/httpd2 명령을 통해 /app/httpd2 디렉터리 내의 파일 목록을 루트 디렉터리 구조 그대로 출력

 

 

ls 명령을 통해 현재 디렉터리인 /test 디렉터리 내에 있는 파일 목록 확인

 

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

 

cat testweb1.tar | docker image import – nayeo0n/testweb4:1.0 명령을 통해 testweb1.tar 파일의 내용을 읽고,

 

새로운 도커 이미지인 nayeo0n/testweb4:1.0으로 변환

 

docker image ls 명령을 통해 새로운 이미지가 잘 생성되었는지 확인

 

 

docker image save –o image.tar ubuntu 명령을 통해 저장할 이미지의 이름을 Ubuntu로 지정하고,

 

image.tar이라는 이름으로 .tar 아카이브 파일 저장

 

ls 명령을 통해 새로운 파일이 잘 생성되었는지 확인

 

 

tar tf image.tar 명령을 통해 image.tar 아카이브 파일의 내용 목록 확인

 

 

# Ubuntu 이미지 삭제

 

docker image rm ubuntu 명령을 통해 Ubuntu 이미지 삭제

 

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

 

docker image load –i image.tar 명령을 통해 저장된 image.tar 아카이브 파일을 도커 이미지로 불러오도록 함

 

docker image ls 명령을 통해 이미지를 잘 불러왔는지 확인

 

 

docker system prune 명령을 통해 도커 시스템에서 사용되지 않은 여러 객체 한 번에 삭제