Skip to main content

Command Palette

Search for a command to run...

Docker 설치

Published
2 min readView as Markdown

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

More from this blog

크로스/멀티 플랫폼 앱 개발의 진화

서론 최근 몇 년간 크로스/멀티 플랫폼을 지원하는 앱 개발 프로젝트들이 빠르게 확산되고 있습니다. 이제 개발자들은 단일 코드베이스로 여러 플랫폼에서 동작하는 앱을 만들 수 있는 다양한 도구와 프레임워크를 활용할 수 있게 되었습니다.   과거의 크로스 플랫폼 개발 도구들 과거에도 크로스 플랫폼 앱 개발을 시도한 많은 프로젝트들이 있었습니다. 그러나 그중 다수는 성능과 안정성 문제로 인해 큰 인기를 끌지 못했습니다. 그 결과, 많은 개발자들이 오히...

Oct 10, 20242 min read

ESPHome dashboard - 보드 연결

1. 서론. ESPHome dashboard는 웹 기반의 인터페이스로, ESP8266 및 ESP32 칩을 사용하는 디바이스들을 손쉽게 설정하고 USB 연결, OTA 등으로 관리할 수 있는 도구입니다. 이 글에서는 별도 서비스로 실행되는 dashboard에, OTA로 보드를 연결하는 방법을 정리합니다.   2. 보드에 OTA 펌웨어 업로드. OTA로 연결하려면 보드에 OTA 펌웨어를 업로드 해야 합니다. ESP32-C3 Super mini를...

Sep 22, 20243 min read

ESPHome - ESP32 사용해보기

1. ESP32 보드. ESP32 보드 중 작은 ESP32-C3 Super Mini입니다.   2. ESP32-C3 Super Mini 연결. 처음 PC USB에 연결하면 연결되었다가 끊겼다가를 계속 반복하며 업로드가 되지 않습니다. 다운로드 모드로 진입해야 정상 연결되며 업로드가 됩니다. 진입 방법은 아래 두가지입니다. 보드의 Boot 버튼을 누른 채로 USB에 연결. USB에 연결 후 Boot 버튼을 누른 채로 Reset 버튼을 눌렀...

Sep 21, 20242 min read

ESPHome 설치

1. 서론. ESP 보드 펌웨어 개발 환경은 여러가지가 있습니다. 프레임워크를 사용하지 않고 개발해도 되고, Arduino, PlatformIO, ESPHome 같은 프레임워크를 이용할 수도 있죠. ESPHome은 Arduino와 PlatformIO 프레임워크를 사용하기 쉽게 한번 더 패키징 한 것이고, 소스코드를 작성할 필요 없이 yaml 형식으로 간단하게 정의해서 사용합니다.   2. ESPHome 설치. 문서. 최상위 문서: http...

Sep 21, 20241 min read

Albert Hongseok Gu's blog

18 posts