개발 일기

Docker 기본 개념 ? 본문

컨테이너/Docker

Docker 기본 개념 ?

이건욱

도커가 필요한 이유?

 - 변화하지 않는 실행 환경 확보

 - 코드를 통한 실행 환경 구축

 - 실행 환경과 애플리케이션의 일체화

 - 시스템을 구성하는 애플리케이션 및 미들웨어의 관리 

 

도커는 애플리케이션 배포에 대해서 특화가 되어있고 컨테이너형 가상화 기술을 사용하여 호스트 운영 체제 가상화 보다 오버헤드가 더 적습니다!

 

컨테이너 가상화 기술은 이전부터 존재했던 기술입니다.

도커가 존재하기 전에는 LXC (Linux Containers)을 사용했습니다.

도커도 초기에는 LXC을 이용하여 런타임으로 사용하였으나 이제는 runC을 런타임으로 사용합니다.

 

LXC에서 runC로 바꾼 이유는 LXC는 호스트 운영체제 가상화보다 성능 면에서 유리하다는 장점이 있지만 LXC설정의 차이로 인해 동작하지 않는 문제로 인해서 변경하게 되었습니다. ( 그 외에도 여러가지 있습니다. )

 

도커의 컨테이너 정보는 Dockerfile로 관리합니다.

 

그래서 간단하게는 다음과 같이 작성할수 있습니다.

#!/bin/sh
// 현재는 스크립트로 작성을 하지만 애플리케이션 역할을 합니다.
echo "Docker Test"

 

Dockerfile :)

 

FROM - 컨테이너의 원형 역할을 할 도커 이미지를 정의합니다.

RUN - 도커 컨테이너 안에서 어떤 명령을 수행합니다.

CMD - 완성된 이미지를 도커 컨테이너로 실행하기 전에 먼저 실행할 명령을 정의합니다.

FROM ubuntu:16.04 // 운영체제를 선택합니다.
  
COPY docker_test.sh /usr/local/bin // Docker 컨테이너 안의 /user/local/bin에 복사합니다.
RUN chmod +x /usr/local/bin/docker_test.sh // 실행권한을 부여합니다.

CMD ["docker_test.sh"] // 애플리케이션 실행

 

도커를 통하여 배포는 쉽게 이루어 질수 있지만 컨테이너 간의 실행 순서나 의존 관계로 인해서 제대로 동작을 안하는 문제가 생길수 있습니다.

 

이런문제는 도커 컴포즈(Docker Compose)라는 도구를 제공합니다.

도커 컴포즈는 yaml포맷으로 작성된 설정 파일로 컨테이너간의 의존 관계를 정하거나 시작 순서를 제어할수 있습니다.

 

만약에 단일 서버를 넘어서 여러 서버에 있는 컨테이너를 관리하고 싶으면 그때 부터 도커 스웜(Docker Swarm)을 도입해야 합니다.

 

도커 스웜 도구를 사용하면 컨테이너의 증가 , 감소 , 컨테이너 배치 , 로드 밸런싱 기능 등 다양한 기능을 통해 제어할수 있습니다.

이러한 기법을 도커 컨테이너 오케스트레이션(container orchestration) 이라고 합니다. 

 

이러한 컨테이너 오케스트레이션에 표준이라고 자리잡은것이 쿠버네티스(Kubernetes) 입니다.

'컨테이너 > Docker' 카테고리의 다른 글

도커 컨테이너의 운영 및 관리 ?  (0) 2020.05.05
Docker Container  (0) 2020.04.21
docker image (2)  (0) 2020.04.19
Docker - (1)  (0) 2020.04.19
Docker UI?  (0) 2020.04.18
Comments