도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문 서적의 내용을 통해로 정리
컨테이너형 가상화 기술을 구현하기 위한 상주 애플리케이션과 이 애플리케이션을 조작하기 위한 명령행 도구로 구성되는 프로덕트.
애플리케이션 배포에 특화되어 있기 때문에 애플리케이션 개발 및 운영을 컨테이너 중심으로 할 수 있다.
ex) 기존에 웹 애플리케이션 개발을 위해 로컬에 아파치나 엔진엑스 등 웹서버 구축을 하는 경우
가상환경에 운영환경과 같은 운영체제 설치, 문서를 참고하여 패키지 설치, 필요 요소 환경 구축 작업 진행 등 많은 작업을 필요로 한다.
-> 도커를 사용하면 명령어 몇 줄 만으로 필요한 애플리케이션이나 미들웨어가 갖춰진 가상환경(도커 컨테이너)을 빠르게 구축 가능하다.
Q) 가상머신과 비교했을 때 어떤 점이 나은가?
A) 도커는 경량 컨테이너
라는 점 때문에 기존 가상화 소프트웨어 보다 더 가볍게 동작하며, 그렇기에 테스트 환경 뿐만 아니라 운영 환경에서도 사용할 수 있다. 또한 이식성이 뛰어나서 개발환경과 운영환경의 거의 동등한 재현이 가능하다.
그렇지 않다.
도커 컨테이너의 내부는 리눅스 계열 운영 체제와 같은 구성을 취하는 것이 대다수. 컨테이너는 운영 체제의 동작 자체를 완전히 재현하는 것은 불가능하기 때문에 비리눅스 환경이 필요하거나 또는 더 엄밀한 리눅스 계열 운영체제의 동작이 요구되는 상황이라면 적합하지 않을 수도 있다. (도커는 애플리케이션 배포 목적에 더 특화되어있다라고 생각하면 간단)
(사진 추가 필요)
호스트OS 위에 가상화 소프트웨어, 그 위에 GuestOS들과 App으로 운영되는 호스트 운영체제형 가상화와 비교했을 때, 컨테이너형 가상화는 구조적으로 오버헤드 자체가 적으며 컨테이너를 쉽게 만들고 사용 및 폐기가 가능하다는 장점이 있다.
도커는 컨테이너 정보를 Dockerfile
코드로 관리할 수 있다.
이 코드를 기반으로 복제 및 배포가 이루어지며 재현성이 높다.
Dockerfile
이나 애플리케이션 실행 파일을 사용해서 도커 컨테이너의 원형이 될 이미지를 만드는 과정을 도커 이미지 빌드라고 한다.
Dockerfile
에서,
COPY
절은 대상 파일을 설정 경로에 복사하는 내용을 의미하며,
RUN
절은 특정 명령을 수행하기 위한 내용이다.
CMD
절은 완성된 이미지를 도커 컨테이너로 실행하기 전 수행할 명령이다.
빌드를 마치면 docker container run
명령으로 실행하는 것이 기본 사용법이다.
- 변화하지 않는 실행환경으로 멱등성(Idempotency) 확보
- 코드를 통한 실행 환경 구축 및 애플리케이션 구성
- 실행 환경과 애플리케이션의 일체화로 이식성 향상
- 시스템을 구성하는 애플리케이션 및 미들웨어의 관리 용이성
도커 컨테이너는 애플리케이션과 인프라를 함께 담은 상자. 규모가 큰 시스템들은 여러개의 애플리케이션과 미들웨어가 조합되는 형태일 것이다.
즉, 이 상자들을 조합하지 않으면 시스템 구성이 불가능 -> 시스템 전체에 대한 적절한 구성관리가 필요.
도커는 필요한 컨테이너를 각각 실행하는 방법으로 이러한 시스템을 구성한다. 배포 작업이 쉬워지기는 했지만, 컨테이너의 의존 관계나 실행 순서가 어긋나면 제대로 동작하지 않는 등의 문제가 생길 것이다.
도커에서는 이런 문제가 이미 해결됐으며, 여러 컨테이너를 사용하는 애플리케이션을 쉽게 관리할 수 있도록 도커 컴포즈(Docker Compose) 라는 도구를 제공한다. 도커 컴포즈는 yaml
포맷으로 작성된 설정 파일로 컨테이너를 정의하거나 컨테이너 간의 의존 관계를 정의해 시작 순서를 제어할 수 있다.
도커가 설치된 서버(도커 노드)를 여러 대 갖추고 이 노드 그룹에 필요한 만큼의 애플리케이션 컨테이너를 배포하는 경우(ex. 대규모 트래픽 처리) 처럼 도커 컴포즈가 단일 서버를 넘어 여러 서버에 걸쳐 있는 여러 컨테이너를 관리할 수 있도록 한 도구가 도커 스웜(Docker Swarm) 이다.
도커 컴포즈는 여러 컨테이너를 관리하는 것만을 목표로 함. 도커 스웜은 컨테이너 증가/감소는 물론 노드의 리소스 효율적 활용을 위한 컨테이너 배치 및 로드 밸런싱 기능 등 더욱 실용적인 기능을 갖추고 있음. 운영 면에서 장점이 더 많음 이러한 식으로 여러 서버에 걸쳐있는 여러컨테이너를 관리하는 기법 자체는 컨테이너 오케스트레이션(Container Ochestration) 이라고 함.
컨테이너 오케스트레이션 분야에서 사실상 표준으로 자리 잡은 것이 바로 쿠버네티스(Kubernates) 이다. 구글에서 만들었으며 도커 스웜에 비해 기능이 충실하며 확장성이 높다.
FROM
: 도커 이미지의 바탕이 될 베이스 이미지를 지정 (받아오는 도커 이미지는 기본적으로 도커 허브 레지스트리를 참조)
RUN
: 도커 이미지를 실행할 때 컨테이너 안에서 실행할 명령을 정의
COPY
: 호스트 머신의 파일이나 디렉터리를 도커 컨테이너 안으로 복사
CMD
: 도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정 (RUN은 애플리케이션 업데이트 및 배치에, CMD는 애플리케이션 자체를 실행하는 명령)
-
실행
docker container run 이미지명:태그명
-
백그라운드 실행
docker container run -d 이미지명:태그명
-
포트포워딩
docker container run -d -p 9000:8080 이미지명:태그명