2026. 6. 12. 22:18ㆍDocker
Ⅰ. 컨테이너를 이용하여 이미지 생성
| 컨테이너 이용하여 이미지 생성 |
구분 | 설명 |
| 기본 개념 | 도커 허브에서 공식 이미지를 다운로드 -> 컨테이너 생성 -> 환경 구성 -> 새로운 이미지 생성 | |
| 활용 목적 | 컨테이너 내 설정 (패키지, 환경변수, 소스코드 등)을 그대로 이미지로 저장 | |
| 배포용, 백업용, 테스트용 이미지 제작 | ||
| 추가 방식 | 컨테이너 기반 생성 (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 명령을 통해 도커 시스템에서 사용되지 않은 여러 객체 한 번에 삭제
'Docker' 카테고리의 다른 글
| Dockerfille 명령어 이해 (0) | 2026.06.12 |
|---|---|
| Docker 파일 이미지 빌드 (0) | 2026.06.12 |
| Docker 리소스 제한 및 모니터링 (0) | 2026.06.12 |
| Docker 컨테이너 운용 (0) | 2026.06.12 |
| Docker 컨테이너 네트워크 관리 & Docker 네트워크 관리 (0) | 2026.06.12 |