본문 바로가기

IT 엔지니어/CLOUD

Docker

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 수행
  • 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

[ 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