본문 바로가기
야미스터디/Backend

[Etc] Docker 📌

by 의정부핵꿀밤 2022. 10. 11.
728x90

🐳 Docker란?

  • 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다
  • 소프트웨어를 컨테이너라는 표준화 된 유닛으로 패키징한다
  • 컨테이너는 라이브러리, 시스템 도구, 코드 등 소프트웨어 실행에 필요한 모든 것이 포함되어 있다
  • 즉, 도커는 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 도구이다
  • 도커를 통해 애플리케이션을 실행하면 독립적인 환경에서 일관된 결과를 보장한다
  • 도커의 핵심 개념은 이미지와 컨테이너이다

 

 

 

컨테이너

도커(왼쪽)와 가상머신(오른쪽)

  • 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다
  • 기존의 가상화 방식인 OS 가상화가 아닌, 프로세스를 격리하는 방식으로 동작한다
  • 리눅스에서 프로세스를 격리하는 방식을 리눅스 컨테이너라고 한다
  • 단순히 프로세스를 격리하기 때문에 가볍고 빠르다
  • 또한 CPU나 메모리는 프로세스가 필요한 만큼만 추가 사용하여서 성능적으로 거의 손실이 없다

 

 

 

컨테이너의 특징

  • 서버에 여러 컨테이너를 실행하면 독립적으로 실행되어 VM(Virtual Machine)을 사용하는 느낌을 준다
  • 실행 중인 컨테이너에 접속하여 명령어를 입력할 수 있다
  • apt-get 이나 yum 등 운영체제에서 사용하는 패키지 매니저를 통해 설치할 수 있고, 사용자 추가 및 백그라운드에서 프로세스 실행 등도 가능하다
  • CPU나 메모리 사용량을 제한할 수 있다
  • 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용 가능하다
  • 새로운 컨테이너를 만드는데 1~2초로 매우 빠르다

 

 

 

이미지

  • 컨테이너 실행에 필요한 파일과 설정을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다
  • 컨테이너는 이미지를 실행한 상태이다
  • 추가되거나 변하는 값은 컨테이너에 저장된다
  • 같은 이미지에서 여러 개의 컨테이너를 만들 수 있고 컨테이너의 상태가 바뀌거나 삭제되어도 이미지는 변하지 않고 그대로 남아있다
  • 도커 이미지는 Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리할 수 있다

 

 

 

이미지 특징

  • 도커 이미지의 용량은 보통 수백 MB ~ 수 GB이지만, 가상머신에 비하면 작은 용량이다
  • 상태값을 가지지 않고 변하지 않는다
  • 하나의 이미지를 통해 여러 컨테이너를 생성할 수 있고, 컨테이너를 삭제해도 이미지는 변하지 않는다
  • 이미지들은 Docker Hub를 통해 버전 관리 및 배포가 가능하다
  • 도커는 Dockerfile이라는 파일로 이미지를 만든다

 

 

 

Dockerfile

  • 도커 이미지를 만들기 위해 Dockerfile이라는 파일에 DSL(Domain Specific Language) 언어를 이용해 이미지를 생성할 수 있다
  • 단순 텍스트 파일로 일반적으로 소스와 함께 관리한다
  • 서버에서 프로그램을 설치하려고 할 때 Dockerfile을 통하여 관리하면 된다
  • Dockerfile에서 사용할 수 있는 키워드는 20개 정도 있다
  • 여기서 중요한 건 FROM과 RUN으로, 이 키워드로 이미지를 만들 수 있다

 

 

FROM

FROM <image>:<tag>
FROM ubuntu:16.04
  • 베이스 이미지를 지정한다
  • 반드시 이미지를 지정해야 하며 어떠한 이미지도 베이스 이미지가 될 수 있다
  • tag는 버전을 지정하는 것으로 가능하면 구체적인 버전을 지정하는 것이 좋다

 

 

 

RUN

RUN <command>
RUN bundle install
  • 가장 많이 사용하는 구문 중 하나로 말 그대로 명령어를 실행한다
  • 내부적으로 /bin/sh -c 뒤에 명령어를 실행하는 방식

 

 

 

도커 설치하기

도커는 리눅스 컨테이너 기술이라 mac이나 windows에서는 가상머신에 설치가 된다

여기서는 mac이나 window가 아닌 리눅스에서 설치하는 방법을 알아보자

 

 

Linux

curl -fsSL https://get.docker.com/ | sudo sh
  • 리눅스에서는 자동 설치 스크립트를 활용하여 도커를 설치한다

 

 

도커 명령어

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG..]
  • 도커를 실행하는 명령어는 위와 같다

 

 

도커 옵션

  • run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고, 없으면 다운로드 한 후 컨테이너를 생성하고 시작한다

 

 

 

컨테이너 명령어

컨테이너 목록 확인하기 (ps)

docker ps [OPTIONS]
  • 실행중인 컨테이너 목록을 보여준다
  • -a 옵션은 종료된 컨테이너까지 목록으로 보여준다
  • 컨테이너는 종료되어도 삭제되지 않고 남아있다

 

 

컨테이너 중지하기 (stop)

docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • 실행 중인 컨테이너를 중지하는 명령어
  • 실행 중인 컨테이너를 하나 또는 그 이상을 중지할 수 있다 (띄어쓰기로 구분한다)

 

 

컨테이너 제거하기 (rm)

docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • 종료된 컨테이너를 제거하는 명령어
  • 종료된 컨테이너를 하나 또는 여러 개 삭제할 수 있다

 

 

컨테이너 로그 보기 (logs)

docker logs [OPTIONS] CONTAINER
  • 컨테이너가 정상적으로 동작하는지 확인하는 좋은 방법
  • 로그를 확인하는 방법
  • --tail : 마지막 줄 부터 몇 줄을 출력할 지 설정할 수 있다
  • -f : 실시간으로 생성되는 로그를 볼 수 있다

 

 

컨테이너 명령어 실행하기 (exec)

docker exec [OPTIONS] CONTAINER COMMAND [ARG..]
  • 실행 중인 컨테이너에 들어가보거나 컨테이너 파일을 실행하고 싶을 때 사용한다
  • 컨테이너 명령어를 실행하는 방법

 

 

 

이미지 명령어

이미지 목록 확인하기 (images)

docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 도커가 다운로드한 이미지 목록을 보는 명령어

 

 

이미지 다운로드 하기 (pull)

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • 이미지를 다운로드 하는 명령어
  • run 명령어를 입력하면 이미지가 없을 때 자동 다운이 된다
  • pull 명령어는 최신버전 다운로드를 할 경우 사용한다

 

 

이미지 삭제하기 (rmi)

docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 이미지를 삭제하는 방법
  • 컨테이너가 실행중인 이미지는 삭제되지 않는다

 

 


참고)

https://tecoble.techcourse.co.kr/post/2021-08-14-docker/

 

docker 이해하기

tecoble.techcourse.co.kr

728x90

댓글