20220727 Docker

Doodung·2022년 7월 27일
0

WEB

목록 보기
13/15

Docker

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

다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있음.

컨테이너(Container)

docker container
컨테이너는 격리된 공간에서 프로세스가 동작하는 기술. 가상화 기술의 하나지만 기존방식과는 차이가 있다.

기존의 가상화 방식은 주로 OS를 가상화함.

우리에게 익숙한 VMware나 VirtualBox같은 가상머신은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식. 이 방식은 여러가지 OS를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었음

이러한 상황을 개선하기 위해 CPU의 가상화 기술(HVM)을 이용한 KVMKernel-based Virtual Machine과 반가상화 Paravirtualization방식의 Xen이 등장함. 이러한 방식은 게스트 OS가 필요하긴 하지만 전체 OS를 가상화하는 방식이 아니였기 때문에, 호스트형 가상화 방식에 비해 성능이 향상되었음. 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 됨

추가적인 OS를 설치하여 가상화하는 방법은 성능문제가 있었고, 이를 개선하기 위해 프로세스를 격리 하는 방식이 등장

리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없음

하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VMVirtual Machine을 사용하는 느낌을 줌. 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고 apt-get이나 yum으로 패키지를 설치할 수 있으며, 사용자도 추가하고 여러개의 프로세스를 백그라운드로 실행할 수도 있음. CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수도 있음.

이미지(Image)

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

말그대로 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없음. 이제 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 된다. 한 서버에 여러개의 컨테이너를 실행할 수 있고, 수십, 수백, 수천대의 서버도 문제없다.

레이어 저장 방식

도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 용량이 수백mb에 이름. 이런 문제를 해결하기 위해 레이어라는 개넘을 사용하고, 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해줌.

이미지는 여러개의 읽기전용 read only 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성됨.

webapp 이미지를 nginx 이미지 기반으로 만들었다면 예상대로 A + B + C + nginx + source 레이어로 구성된다. webapp 소스를 수정하면 A, B, C, nginx 레이어를 제외한 새로운 source(v2) 레이어만 다운받으면 되기 때문에 굉장히 효율적으로 이미지를 관리할 수 있음

컨테이너를 생성할 때도 레이어 방식을 사용하는데, 기존의 이미지 레이어 위에 읽기/쓰기read-write 레이어를 추가. 이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용함.

이미지 경로

이미지는 url 방식으로 관리하며 태그를 붙일 수 있음. 이러한 방식은 이해하기 쉽고 편리하게 사용할 수 있으며 태그 기능을 잘 이용하면 테스트나 롤백도 쉽게 할 수 있다.

Dockerfile

도커는 이미지를 만들기 위해 Dockerfile이라는 파일에 자체 DSLDomain-specific language언어를 이용하여 이미지 생성 과정을 적음.

컨테이너 실행하기

run명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드(pull)를 한 후 컨테이너를 생성(create)하고 시작(start) 함.

도커에서 앱을 실행하기 위해서 필요한 건 다음의 세 가지다.

  1. 포트 설정
  2. 작업 디렉토리 설정
  3. 환경 변수 설정

포트 설정은 docker run의 -p 옵션을 통해서 줄 수 있다. 보통은 앱에서 사용할 포트를 지정할 때, 환경 변수를 통해 설정하는 경우가 많은데, 환경 변수는 마찬가지로 docker run의 -e 옵션을 통해 설정한다. 작업 디렉토리같은 경우 --volume 옵션을 통해 설정할 수 있다.


https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html

profile
반가워요!

0개의 댓글