Docker가 뭐길래! - 1. 도커 구성 요소 및 기본 명령어

Dawon Seo·2024년 7월 23일

docker

목록 보기
1/1
post-thumbnail

이제는 공고 자격 요건 및 우대 사항에 필수적으로 들어가는 도커
그게 대체 뭐길래!

직접 공부해서 알아보겠다!

도커?

  • 다양한 개발 환경에서 컨테이너를 이용해 소프트웨어를 편하게 배포할 수 있게 해 주는 도구

가상화

  • 컴퓨터에서 활용하는 리소스를 추상화하는 개념
  • 단일 컴퓨팅 자원을 여러 개의 논리적인 자원으로 나누어 동작시킬 수 있음

도커 구성 요소

  • 도커 클라이언트 (Docker Client)
    • docker-cli라고 부름
    • 터미널이라고 생각하면 됨
    • dockered API를 활용해 build, pull, run과 같은 명령을 내리며 도커 데몬과 통신한다
  • 도커 데몬 (Docker Daemon)
    • dockered라고 부름
    • 백그라운드에서 실행되는 데몬 프로세스에 해당
    • 도커 API 요청을 수신하고 도커 이미지, 컨테이너 등과 같은 도커와 관련된 객체를 관리
  • containerd
    • 컨테이너 실행과 관리에 필요한 기능을 수행하는 오픈소스 컨테이너 런타임
    • 컨테이너의 생명주기를 모두 관리
    • 컨테이너 실행만 담당하는 runc와는 다른 역할을 하며 고수준 컨테이너 런타임(High-Level Container runtime)에 해당
  • runc
    • 컨테이너 실행과 관련된 작업을 수행하는 저수준 컨테이너 런타임(Low-Level Container runtime)
  • containered-shim
    • containered와 runc 사이에서 작동하는 중간 프로세스에 해당
    • 컨테이너 실행을 조정하는 역할

도커 작동 방식

  • 도커 클라이언트, 도커 호스트, 도커 레지스트리로 구성되어 작동
    • 도커 클라이언트: 도커에 명령을 내릴 수 있는 CLI 도구
    • 도커 호스트: 도커를 설치한 서버 호는 가상머신, 물리 서버가 될 수도 있고 가상 서버가 될 수도 있다
    • 도커 레지스트리: 도커 이미지를 저장하거나 배포하는 시스템, 공개와 개인 레지스트리로 나눌 수 있다

도커 사용 방법

도커 이미지

  • 컨테이너 형태로 소프트웨어를 배포하기 위해 필요한 모든 요소(코드, 라이브러리, 설정 등)를 실행할 수 있는 포맷으로 컴파일 및 빌드한 패키지
  • 독립적, 경량화
  • 특정 시점의 도커 컨테이너 상태를 담은 스냅숏이라고 할 수 있음
  • 여러 개의 레이어로 구성되어 있으며 도커 허브와 같은 중앙 저장소에 저장된다

도커 컨테이너

  • 도커 이미지를 실행할 수 있는 인스턴스를 의미
  • 자체적으로 파일 시스템을 가지고 있으며, 각 컨테이너는 독립적으로 실행, 그러므로 자체 파일 시스템을 포함
  • 내부에 운영체제 전체를 포함하지는 않기 때문에 가벼우며, 도커 엔진과 운영체제를 공유
  • 즉, 프로그램 실행에 최소한으로 필요한 바이너리, 라이브러리와 같은 구성 요소로 이루어져 있음

도커 실행 과정 시 어떤 일들이 일어나는가?


docker run hello-world를 입력하면 위와 같은 출력값을 확인해 볼 수 있다.

Unable to find image 'hello-world:latest' locally

-> 로컬에서 'hello-world:latest'라는 이미지를 찾을 수 없다는 뜻

latest: Pulling from library/hello-world

-> library/hello-world에서 'hello-world:latest'라는 이미지를 pull 받겠다는 의미
pull이란 도커 이미지를 원격 저장소에서 다운로드 하는 것을 말한다

9c704ecd0c69: Pull complete

-> pull 완료

Digest: sha256:2e863c44b718727c860746568e1d54afd13b2fa71b160f5cd9058fc436217b30

-> 도커 이미지들은 식별값으로 해시값을 갖게 되는데, Digest란 해시 함수를 거쳐 나온 후의 데이터이다

Status: Downloaded newer image for ubuntu:latest

-> 도커 이미지 다운로ㅓ드가 완료되었다

도커 기초 명령어

도커 이미지 다운로드

docker image pull {이미지 이름:태그 이름}

위 명령어를 입력하면, 도커 데몬은 도커 호스트에 해당 이미지가 있는지 확인하고 없을 경우 도커 레지스트리에서 해당 이미지를 다운로드한다

도커 이미지 목록 확인

docker image ls

다운로드한 이미지 목록을 확인할 수 있다.
REPOSITORY는 이미지 이름을 의미하며 TAG는 이미지 태그를 의미한다.

도커 컨테이너 실행

docker container run [이미지명]

도커 호스트 데몬이 실행 명령을 요청받고 도커 호스트에 있는 이미지를 컨테이너 형태로 실행한다.

도커 컨테이너 목록 확인

docker container ls

아무런 컨테이너가 출력되지 않았다. 왜일까?
별다른 옵션을 주지 않고 기본 형태로 입력하면 실행 중인 컨테이너만 보여주기 때문이다.

docker container ls -a

위 명령어를 통해 실행 중인 컨테이너와 정지 상태인 컨테이너 모두를 확인할 수 있다.

각 컨테이너는 CONTAINER ID를 가진다. 이는 하나의 이미지로 다수의 컨테이너를 생성할 수 있으므로 각 컨테이너를 구분하기 ㅇ위함이다.

컨테이너 내부 접속

컨테이너를 실행하며 -it 옵션을 활용하면 실행 중인 컨테이너 내부에 접속이 가능하다.

docker container run -it ubuntu

컨테이너 종료

  1. 내부에 접속한 상태에서 exit 명령어를 이용해 컨테이너 밖으로 나간다.
  2. 외부에서 docker container stop [컨테이너 ID]를 사용하여 실행 중인 컨테이너를 종료시킨다.

docker container stop과 비슷한 docker container kill이 있는데, docker container stop을 입력하면 약 10초 후에 컨테이너가 종료되고, kill을 입력하면 즉시 종료된다.

stop이 안정성 면에서 효율적이므로 stop을 권장한다고 한다.

컨테이너 삭제

docker container rm [컨테이너 ID]

다수의 컨테이너를 한번에 삭제하고 싶다면, 컨테이너 ID를 연속으로 여러개 입력한다.

도커 이미지 삭제

docker image rm [이미지 이름]

도커 이미지 변경

docker container commit [CONTAINER ID][새로운 이미지 이름]
ex) docker container commit 67f64db65b10 my-ubuntu:0.1

0개의 댓글