DOCKER CONTAINER & IMAGE
[ DOCKER ]
- 프로그램 + 설정 + 필요한 도구들 전부를 하나의 이미지 패키징 한 후, container 형태로 실행
- 실행 환경이 OS와 무관해짐 (플랫폼 독립적 실행 가능)
- Docker Container
- 이미지를 메모리에 올려 실행한 가상 실행 환경의 실체
- 메모리, 네트워크, 파일 시스템 등이 격리된 프로세스 단위의 가상환경
- 서로 다른 Container는 독립적으로 동작
- Docker Image
- 애플리케이션 실행에 필요한 모든 것을 포함한 실행 패키지 (코드, 라이브러리, 설정 등)
- 변경 불가능한 읽기 전용 구조
[ DOCKER 구성 요소 ]
- Doker Clinet
- Container 운영 CLI
- Doker Server
- Clinet 명령을 수행하는 System / Service
- Image, Container, Volume, Network 등을 관리하는 Service 수행
- Clinet 명령을 수행하는 System / Service
- Image
- Container를 생성 및 구동하기 위한 읽기 전용 템플릿, 파일과 설정 파일
- Container
- Image를 독립적으로 실행하는 단위, 실행되는 Process
- Volume
- Server의 저장소
- Network
- 같은 Network 환경에서 Container 간 통신 제공 기능
- Registry
- Container Image 저장소
[ hostname 설정 ]
(100, 200, 250 사용)
# hostnamectl set-hostname docker1.cldm.com
# hostnamectl set-hostname docker2.cldm.com
# hostnamectl set-hostname docker3.cldm.com
[ /etc/hosts 파일 수정 / 추가 ]
# vi /etc/hosts

[ Docker 관련 패키지 설치 ]
# dnf -y install yum-utils-4.3.0-16.el9.noarch
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
[ Docker 설치 ]
# dnf -y install epel-release
# dnf -y install git-core
|
[ 서비스 실행 ]
# systemctl restart docker
|
[ Docker 버전 확인 ]
# docker version
|
Client & Server 버전 확인
|
[ Docker 홈 디렉터리 ]
- 설치 후 디렉터리 생성 여부 확인
# cd /var/lib/docker
|

[ 시스템 정보 확인 ]
# docker system info
|
설치 정보, OS, 드라이버 등
|
# docker system df
|
이미지/볼륨/컨테이너 디스크 사용량
|
[ 구동 TEST ]
- Dokcer가 제대로 설치되어 있고, 정상 작동하는지 확인
- 다운로드 : pull / 업로드 : push
# docker (container) run [서비스]
|
Image를 찾고 있으면 실행, 없으면 자동 다운로드 후 실행
|
< 'hello-world' 이미지 이용 TEST >
# docker container run hello-world

< Ubuntu 이미지를 다운로드 받아서 'Hello Docker'문자열 출력 TEST >
# docker container run ubuntu /bin/echo 'Hello Docker'

[ CONTAINER & IMAGE ]
IMAGE
|
CONTAINER
|
설계도 (정적)
|
실행된 인스턴스 (동적)
|
Image로부터 Container가 만들어짐
|
[ IMAGE 확인 ]
# docker image ls -a = docker images
|
전체 Image 출력
|
# docker image ls = docker images
|
실행 중인 Image 출력
|

[ CONTAINER 확인 ]
# docker container ls -a = docker ps -a
|
전체 Container 출력
|
# docker container ls = docker ps
|
실행 중인 Container 출력
|

상태 UP:실행중 / EXITED:종료

[ CONTAINER 삭제 ]
# docker (container) rm [Container ID]
|
ID로 삭제
|
# docker (container) rm [Container NAME]
|
Name으로 삭제
|
# docker container rm b1

# docker container rm beautiful_antonelli

[ CONTAINER 종료 ]
# docker container stop [Container ID]
|
ID로 종료
|
# docker container stop [Container NAME]
|
Name으로 종료
|
# docker container stop 9e

[ IMAGE 삭제 ]
# docker image rm [Image ID] = docker rmi [ID]
|
ID로 삭제
|
# docker image rm [Image Repository] = docker rmi [Repo]
|
Repository로 삭제
|
# docker image rm a0

# docker image rm hello-world

[ 모든 COMTAINER 강제 삭제 ]
- 실행 중인 Container도 강제로 종료하고 삭제함
- Image는 삭제되지 않고 남아있음
- -f : force
# docker container rm -f $(docker ps -aq)
|
[ 모든 IMAGE 강제 삭제 ]
- Container가 먼저 삭제되어야 Image 강제 삭제 가능
# docker image rm -f $(docker images -aq)
|
[ CONTAINER & IMAGE 삭제 순서 ]
- 올바른 삭제 순서
- Container 종료 → Container 삭제 → Image 삭제

- Container가 실행 중(UP) 일 때, Container & Image 삭제 불가
- Image 삭제 → Container 삭제 불가 (순서)
- Docker에서 Container는 Image 기반으로 생성되기 때문에, 삭제되지 않은 Container가 있다면 해당 Image는 사용 중으로 간주됨
- 즉 Container가 비활성화(Exited) 상태라도, 사용 중으로 보기 때문에 Image 삭제 불가
< Docker에서 NGINX(웹 서버) 띄움 >
# docker container run -d -p 80:80 nginx


Container 실행중(UP)일때 Container/Image 삭제 불가

컨테이너 종료 → 컨테이너 삭제 → 이미지 삭제 : 정상적으로 삭제됨
[ DOCKER HUB 이미지 검색 ]
- hub.docker.com 접속 없이 터미널에서 바로 Image를 확인할 수 있음
- 서비와 관련된 Docker 이미지 중에서, 어떤 걸 다운받아서 실행할지 고르기 위한 정보를 확인
- 서비스 : nginx, httpd, mysql, ubuntu, vsftpd, fedora, node, rocky, owncloud, wordpress, centos ...
# docker search [서비스]
|



[ DOCKER LOGIN ]
# docker login
|

계정 입력

Comfirm


Login Succeeded
[ 인증 정보 복호화 ]
# echo -n [암호화된 문자열] | base64 --deode
|
Login하면 .docker 파일 생성됨
# vi ~/.docker/config.json
(config.json : CLI에서 로그인했을 때 자동으로 생성되는 인증 정보 파일)
config.json 파일 안에 암호화된 문자열 확인할 수 있음
("auth":~)

암호화 문자열 확인

복호화
비밀번호가 다르게 나오는 이유?
패스워드 대신 Access Token을 사용하기 때문!
[ DOCKER IMAGE 관리 주요 명령어 ]
# docker image [명령어]
help
|
Docker에서 쓸 수 있는 명령어 목록 출력
|
search
|
Docker Hub에서 Image 검색
|
pull
|
원격 Registry(Docker Hub)에서 Image를 받아옴
|
push
|
로컬에 있는 Image를 Docker Hub로 업로드 (login 된 상태)
|
ls
|
로컬에 있는 모든 Image를 리스트로 출력
|
inspect
|
Image에 대한 상세 정보를 json 형식으로 출력
|
tag
|
Image에 새로운 태그를 붙임
|
rm
|
로컬에 저장된 Image를 삭제 (실행 중인 Container가 있으면 삭제 불가)
|
login
|
Docker Hub 계정으로 로그인
|
logout
|
로그인된 Docker 계정을 로그아웃
|
[ Stars 기준 필터링 ]
- Stars = 일종의 좋아요 기능
- 신뢰도와 활용도를 위하여 사용
# docker search -f stars=N [서비스]
|
별점 기준 필터링 (상위 N개 image 출력)
|
# docker search --limit N [서비스]
|
최대 출력 개수 제한 (start N개 이상 image 출력)
|
# docker search -f stars=1000 mysql
mysql에서 별점이 1000개 이상인 image 출력
# docker search --limit 10 nginx
nginx에서 별점이 높은 순서대로 상위 10개 출력


< create 명령어로도 Container 생성 가능 >
Container는 Image가 있어야 생성 가능
로컬에 Image가 없다면 Docker Hub에서 자동으로 다운로드(Pull) 한 다음 Container를 생성
# docker container creater --name DamiWeb nginx

NGINX Image 다운로드 후 지정한 이름(DamiWeb)으로 Container 생성됨
'IT 엔지니어 > CLOUD' 카테고리의 다른 글
Docker DB (2) | 2025.05.09 |
---|---|
Docker volume/bind mount (0) | 2025.05.07 |
Docker 1 (0) | 2025.05.05 |
Vsphere (0) | 2025.05.05 |
가상화 VMWARE (0) | 2025.05.05 |