Docker 설치

1. 서론.

1-1. 가상화 사용 이전.

  • 가상화 사용 이전에는 서비스를 운영하려면 필요한 모든 패지키들을 시스템에 설치해야 했습니다.
  • 잘 설치되면 좋은데 패키지의 버전, 패키지들 간의 의존성 문제 때문에 한번에 성공하기 힘들었죠.
  • 간혹 환경설정 중 패키지들끼리 충돌하거나 설정이 꼬여 복구가 불가능해지면 성공할 때까지 [ 시스템 포맷 - OS 재설치 - 패키지 재설치 ]를 반복하기도 했습니다.
  • 물론 쉘 스크립트로 자동화 시켜두면 재설치 시에 투입되는 시간과 노력을 많이 줄일 수 있습니다.

1-2. OS 가상화 사용.

  • 시스템에 설치된 OS 안의 가상환경에서 추가 OS를 실행할 수 있게 되면서 시스템을 포맷하는 일이 획기적으로 줄었습니다.
  • 가상환경의 OS는 디스크 이미지 파일로 저장되어 백업이 가능하니 패키지 설치가 오류 없이 완료되면 디스크 이미지를 백업해 두고, 서비스를 운영하다가 업그레이드로 인해 패키지 의존성이 꼬이는 등 오류가 발생하면 간단하게 롤백이 가능해졌죠. 디스크 이미지는 파일로 공유도 가능하고요.
  • 여러 가상환경 중 유료는 VMWare가, 무료는 VirtualBox가 주로 사용되었고, 현재는 QEmu가 많이 사용됩니다.
  • 그리고 가상화 관리 툴인 Vagrant를 이용함으로써 운영이 훨씬 쉬워졌습니다.

1-3. 컨테이너.

  • 컨테이너 기술은 OS 가상화와는 다르게 추가 OS를 설치할 필요 없이 시스템에 설치된 호스트 OS의 커널을 공유하며 격리된 환경을 제공합니다.
  • 격리된 컨테이너에는 어플리케이션을 구동하는 데에 필요한 패키지, 실행파일, 설정파일, 기타 파일들만 존재하므로 용량이 작고, 호스트 OS의 커널을 공유하므로 시스템 자원을 쉽게 사용할 수 있으며, 컨테이너 엔진에서 손실되는 자원 이외 성능 손실이 거의 없어 OS 가상화에 비해 장점이 많습니다.
  • 기반 기술에 대한 설명은 리눅스 네임스페이스(Linux Namespace)란?을 참고해 보세요.
  • 리눅스에서부터 시작된게 아니지만, 현재 보편적으로 사용되는 기반 OS가 리눅스입니다.
  • 리눅스는 리누스 토발즈가 개발해 현재까지 관리하고 있고, kernel base는 하나이며, 세부 Git 저장소는 https://git.kernel.org 에서 확인 가능합니다.
  • 리눅스 커널이 업데이트 되면 해당 커널을 기반으로 각 배포판들이 커널 수정 및 패키지 등을 추가해 업데이트를 진행합니다.
  • 이것의 장점은 시스템에 어느 리눅스 배포판을 설치하더라도 Alpine, Ubuntu, Red Hat 등 원하는 배포판을 컨테이너로 사용할 수 있습니다.
  • 현재 보편적으로 사용되는 컨테이너 엔진은 Docker이고, 오케스트레이션 도구는 Kubernetes입니다.
  • Docker는 2013년에 발표되었으며, 개인적으로는 2015년부터 관심을 가졌고, 초기에 이재홍의 언제나 최신 Docker(이전: 가장 빨리 만나는 Docker)를 많이 참고했습니다.
  • 이후 현재까지 Docker 컨테이너 환경에서 개인 서비스들을 운영하면서 정리해 두었던 환경설정을 공유하기 위해 글을 시작했습니다.

1-4. Alpine linux.

  • Alpine linuxdocker hub에서 공유되는 컨테이너 이미지들을 통해 알게 되었는데 용량이 정말 작습니다.
  • 동일 서비스 기준으로 Ubuntu 기반 컨테이너는 수백MB인데 반해 Alpine linux는 수십MB로, 배포 시 유리합니다.
  • 시스템에도 설치가 가능해 Ubuntu가 설치되어 있던 제 홈서버들을 모두 Alpine linux로 재설치 했고, 서비스들을 도커 컨테이너로 실행시켜 두었죠.
  • 필요한 패키지들만 설치되어 Ubuntu에 비해 관리가 쉽고 OS 업그레이드 시에도 별 문제를 일으키지 않네요.

 

2. Docker 설치.

  • 설치 방법이 지속적으로 업데이트 되고 있어서 현재 기준으로 정리해 놓아도 쓸모 없어질 가능성이 있기에 문서 링크로 대체합니다.
  • Docker docs: https://docs.docker.com
  • Docker engine 설치: https://docs.docker.com/engine/install
  • Ubuntu에 설치: https://docs.docker.com/engine/install/ubuntu
  • Alpine linux에 설치: https://wiki.alpinelinux.org/wiki/Docker
0
Subscribe to my newsletter

Read articles from Albert Hongseok Gu directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Albert Hongseok Gu
Albert Hongseok Gu