Docker

1. 도커 간단한 개념

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

기존 하이퍼바이저를 통한 os 가상화가 아닌

os위에 도커엔진을 두어서 리눅스 컨테이너로 프로세스를 격리시켜 돍집적으로 실행되는 형태

게스트 os을 설치하는 등의 overhead가 발생하지않아서 생성 속도가 매우 빠르다.

도커를 이요하면 환경에 구애받지않고 애플리케이션을 신속하게 배포 및 확장할수 있다.

 

도커의 핵심 개념

1. 컨테이너

앞서 설명한 부분으로 이미지를 보면 vm을 통해서 가상화를 진행하게 되면 게스트 os을 설치하는등 overhead가 발생하게 된다. 이러한 추가적인 os설치는 성능문제가 발생하게 된다. 이와 달리 도커는 리눅스 컨테이너를 통해서 프로세스를 격리하는 방식을 사용하게 된다.

 

2. 이미지

컨테이너 실행에 필요한 파일과 설정값등을 포함하는 잇는 것으로 상태값을 가지지않고 변하지 않는다는 특징을 가진다. 같은이미지에 여러개의 컨테이너를 생성할 수 있습니다.

 

도커 이미지는 위와 같이 도커 layer라는 개념을 사용하는데 간단하게 이해하자면 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있어서 용량이 매우큰데 이미지에 하나의 파일을 추가했다고해서 전부를 다시 다운받는다면 매우 비효울적이기 때문에 유니온파일 시스템을 이용해서 여러개의 레이어를 하나의 파일시스템으로 사용할수 있게하여 추가되거나 변경된 지점에 대해서만 다운받게 해준다.

 

3. Dockerfile

도커 이미지를 만들기 위해서 작성해야하는 파일로 DSL언어를 이용해서 이미지 생성 과정을 적는다. 아래의 예를 보면

# 1. 우분투 설치
FROM ubuntu:18.04

# 2. 메타데이터 표시
LABEL "purpose"="practice"

# 3. 업데이트 및 아파치 설치
RUN apt-get update
RUN apt-get install apache2 -y

# 4. 호스트에 있는 파일을 추가
ADD test.html /var/www/html

# 5. 작업공간 이동(=cd)
WORKDIR /var/www/html

# 6. 거기서 test2.html 파일생성
RUN ["/bin/bash", "-c", "echo hello > test2.html"]

# 7. 포트 80번 노출 지정
EXPOSE 80

# 8. 컨테이너 생성시 시작명령어
CMD apachectl -DFOREGROUND
  • FROM : 생성할 이미지의 베이스가 될 이미지를 뜻합니다. 반드시 한번 이상 입력해야 합니다.
  • LABEL : 이미지에 메타데이터를 추가합니다. (나중에 원하는 조건의 컨테이너, 이미지 등을 쉽게 찾을 수 있도록 도와주기 때문에 기억해두는게 좋습니다)
  • RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행합니다. (여기서 주의할 점은 설치과정에서 별도의 입력이 불가능하기 때문에 apache2를 설치할 때 뒤에 -y를 붙여줘야 합니다.
  • ADD : 파일을 이미지에 추가합니다. 여기서는 Dockerfile이 위치한 폴더에 test.html 파일을 가져와서 이미지의 /var/www/html 디렉터리에 추가합니다.
  • WORKDIR : 명령어를 실행할 디렉토리. 배시 셸에서의 cd 명령어와 동일한 기능을 합니다.
  • EXPOSE: 이미지에서 노출할 포트를 설정합니다.
  • CMD : 컨테이너가 시작될 때마다 실행할 명령어. Dockerfile에서 한번만 사용할 수 있습니다.

 

4. 도커 허브

앞서 설명했든 도커 이미지의 용량은 매우 큰데 이를 서버에 저장하고 관리하기 어렵다. 이를 도커는 도커 허브를 통해서 공개 이미지를 무료로 관리해준다. 이덕분에 내가 만든 이미지를 도커허브에 올리고 원할때 원하는 위치에 이미지를 내려받아 실행할 수 있다. 또한 각종 오픈소스 (Jenkins, ngrinder 등)이 도커 허브에 이미지를 누구나 사용할 수 있게 되어있어서 굉장히 편리하게 사용할 수 있다. 

(개인적으로 큰 장점이라고 생각하는 부분으로 docer run을 통해서 다양한 이미지를 간편하게 실행할 수 있다. - 통일된 명령어)

 

다음 글에서는 도커설치와 각종 명령어에 대해서 포스팅 하겠습니다.ㅎ

'Docker' 카테고리의 다른 글

3. 스프링부트 -> 도커 이미지 -> 도커허브  (0) 2021.04.06
2. 도커 설치와 각종 명령어  (0) 2021.04.05