🐋 도커

컨테이너 기반의 오픈소스 가상화 플랫폼

Docker 는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다.

Docker 는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징한다.

이 컨테이너에는 라이브러리, 시스템 도구, 런타임 등 SW를 실행하는데 필요한 모든것이 포함되어 있다.

🖼️ 이미지

이미지는 컨테이너 실행에 필요한 파일과 설정 값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다.

컨테이너는 이미지를 실행한 상태라 볼수 있고 변하는 값은 컨테이너에 저장이 된다.

같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 존재한다

예를 들어 ubuntu 이미지는 ubuntu를 실행하기 위한 모든 파일을 갖고 있고, MySQL 이미지는 MySQL를 실행하는데 필요한 파일과 실행 명렁어, 포트 정보등을 가지고 있다.

이미지는 말 그래도 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 부과적인 것들을 설치할 필요가 없다.

🚢 컨테이너

도커가 등장하기 이전에도 있던 기술로, 격리된 공간에서 프로세스가 동작하는 기술이다.

기존의 VMware나 Virtual Box를 이용한 가상화 방식은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식이였다.

이 방식은 여러가지 OS 를 가상화 할 수 있고 비교적 사용법이 간단하지만 무검고 느려서 운영환경에선 사용하기 어려웠다.

이를 개선하기 위해 프로세스를 격리하는 방식이 등장을 하는데, 프로세스를 격리하는 방식은 가볍고 빠르게 동작한다.

⚔️ Containers vs VMs

시작시간

  • 하드웨어 가상화는 CPU, 메모리, 하드 디스크 등의 하드웨어를 가상화하기 있기 때문에 하드웨어나 OS부팅을 해야 하므로 비교적 많은 시간이 소요된다.
  • 컨테이너 방식 가상화는 컨테이너 부팅시 OS는 이미 시작하고 프로세스의 시작만 하므로 부팅시간이 절감된다.

오버헤드

  • OS에서 응용 프로그램을 작동하는 경우, 하드웨어 가상화에서는 가상화된 하드웨어 및 하이퍼바이저를 통해 처리하기 때문에 물리적 시스템보다 처리에 부가적인 시간이 필요 -> 오버헤드
  • 컨테이너 방식 가상화는 커널을 공유하고 개별 프로세스가 작업을 하는 것과 같은 정도의 시간밖에 걸리지 않기때문에 대부분 오버헤드가 없다.
  • 있다하더라고 아주 작기에 실제 실행하는 것과 차이가 거의 없다.

❓ 컨테이너를 사용해야 하는 이유

기존의 서버 운영에서는 애플리케이션을 실행하기 위해 서버 컴퓨터의 상태를 지속적으로 관리해야 했다.

하지만 컨테이너를 사용하면 애플리케이션 별로 독자적인 환경을 준비하고 관리하는 것이 가능하기 때문에 서버 컴퓨터를 관리할 필요가 적어진다.

💾 AWS 에서 도커 설치

repository 인덱스 갱신

리눅스 배포판들은 주요 리눅스 프로그램들을 저장소라는 곳에 한 데 모아 제공한다. 이런 프로그램을 패키지라고 한다.

패키지들은 최신버전이 아닌 경우가 많고, 사용자 리눅스 환경과 맞지 않아 설치가 되지 않는 경우도 있다.

그렇기에 도커를 설치하기 이전에 최신 패키지로 저장소에 패키지들을 업데이트해주기 위해 아래 명령어를 입력한다.

$ sudo apt update

도커 다운을 위한 필요한 패키지 설치

$ sudo apt install apt-transport-https
$ sudo apt install ca-certificates
$ sudo apt install curl
$ sudo apt install software-properties-common
  1. apt-transport-https: 패키지 관리자가 https 를 통해 데이터 및 패키지에 접근할 수 있도록 함
  2. ca-certificates: authority에서 발행되는 디지털 서명. SSL 인증서의 PEM 파일이 포함되어 있어 SSL 기반 앱이 SSL 연결이 되어있는지 확인 가능
  3. curl: 특정 웹사이트에서 데이터를 다운받을 때 사용
  4. software-properties-common: 소스코드를 업로드하면 자동으로 패키지화

curl 명령어로 도커 다운받기

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add

curl 명령어의 옵션

  • f: HTTP 요청 헤더의 contentType 을 multipart/form-data 로 보냄
  • s: 진행 과정이나 에러 정보를 보여주지 않음
  • S: -s와 함께 사용할 경우 실패하면 curl에 오류 메시지 표시
  • L: 서버에서 301, 302 응답이 오면 redirection URL 로 따라감

  • apt-key: apt가 패키지를 인증할때 사용하는 키 리스트 관리

repository에 경로 추가하기

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
$ sudo apt update
  • add-apt-repository: PPA 저장소 추가. apt 리스트에 패키지를 다운 받을 수 있는 경로 추가
  • apt update: 저장소의 패키지 갱신

도커 설치하기

$ apt-cache policy docker-ce
$ sudo apt install docker-ce
  • apt-cache: 소프트웨어나 라이브러리를 터미널에서 검색.
  • policy: 어떤 저장소에 설치했는지 보여줌

확인하기

$ sudo systemctl status docker

댓글남기기