1 분 소요

Docker

리눅스 컨테이너에서 애플리케이션을 쉽게 포장하고, 컨테이너 방식으로 실행할 수 있게 하는 것. 실행 환경에 구애받지 않고 애플리케이션을 실행할 수 있다.

컨테이너 방식의 장점

  • 의존성 충돌 문제를 해결해준다.
    • 프로세스, 네트워크, 파일 시스템을 격리하고, 독립적으로 소유
  • 개발과 배포 환경을 일치시킨다.
  • 수평 확장을 쉽게 해준다.
  • 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다.

핵심 키워드

  • 컨테이너: 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자
  • 이미지: 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿. 이미지를 이용해 여러 개의 컨테이너를 생성할 수 있고, 변경 사항을 추가/커밋해서 또 다른 이미지를 만들 수 있다.
  • 레지스트리: 이미지를 저장하고 배포, 공유하는데 사용하는 장소.

참고자료: Docker docs

  • 사용법: Docker CLI, Docker-Compose CLI, API Reference
  • 환경 및 빌드 파일 구성: DockerFile, Docker-Compose File

도커 구성

레지스트리 계졍/레포지토리 이름:태그 docker

  • 레포지토리
    • 도커 이미지를 관리하는 공간
    • 특별히 다른 것을 지정하지 않는다면, 도커 허브(Docker Hub)를 기본 레지스트리로 설정한다.
    • 레지스트리는 Docker Hub, Private Docker Hub, 회사 내부용 레지스트리 등으로 나뉠 수 있다.
  • 레포지토리
    • 레지스트리 내에 도커 이미지가 저장되는 공간
    • 이미지 이름이 사용되기도 한다.
    • GitHub의 레포지토리와 유사
  • 태그
    • 같은 이미지라고 할지라도 버전 별로 안의 내용이 조금은 다를 수 있다.
    • 해당 이미지를 설명하는 버전 정보를 주로 입력한다.
    • 특별히 다른 것을 지정하지 않는다면 latest 태그를 붙인 이미지를 가져온다.

Docker 명령어

ex) docker/whalesay:latest

  • docker image pull docker/whalesay:latest : 해당 도커의 최신 이미지 받아온다
  • docker image ls : 이미지 리스트 출력
  • docker comtainer run --name whalesay docker/whalesay:latest cowsay boo : 해댱 컨테이너 실행
    • --name: 컨테이너 이름 할당
    • cowsay: command로 초기 컨테이너 실행 시 수행되는 명령어 중 하나
    • boo: command cowsay에 넘겨질 파라미터
  • docker container ps : 현재 실행중인 컨테이너 리스트 출력
  • docker container ps -a : 모든 컨테이너 리스트 출력
  • docker container rm [컨테이너 이름] : 해당 컨테이너 삭제
  • docker rm [컨테이너1] [컨테이너2].. : 컨테이너 여러개 삭제
  • docker rm -f [컨테이너] : 실행중인 컨테이너 강제 종료 & 삭제
  • docker iamge rm docker/whalesay : 해당 이미지 삭제
  • docker rm `docker ps -a -q`: 컨테이너 모두 삭제

컨테이너 & 가상머신(VM)

둘 다 프로세스, 네트워크, 파일 시스템을 격리할 수 있다. 하지만 작동원리는 많이 다르다.

  • VM은 많은 컴퓨팅 자원을 필요로 하는 반면, 도커는 한 호스트 컴퓨터에 여려개의 컨테이너를 띄워도 컴퓨터에 무리가 가지 않는다.
  • 도커 이미지는 보통 애플리케이션 단위로 만들어져 있다. 반면 VM을 사용하기 위해서는 VM 위에 운영체제를 설치해야 한다.