Chapter 03. 컨테이너 서비스를 위한 도커 활용
3.1 컨테이너 서비스
3.1.1 컨테이너 서비스란?
- ‘컨테이너’는 어떤 사물을 격리할 수 있는 공간이다.
- 즉 IT 용어에서의 컨테이너는 애플리케이션 코드와 프로세스를 격리시키는 것을 의미한다.
- 대부분의 개발자가 가변적 인프라 환경으로 인한 일관성 없는 환경 때문에 개발, 테스트, 배포, 운영으로 인한 시행 착오를 겪었다.
- 컨테이너 서비스는 애플리케이션 실행에 필요한 바이너리, 라이브러리 및 구성 파일을 패키지로 묶어 배포하는 논리적 패키징 매커니즘을 제공한다.
- 이러한 패키징을 운영체제 레벨 가상화라고 부른다.
- 하드웨어 레벨 가상화: 하이퍼바이저 등을 이용한 가상 머신 방식
- 운영체제 레벨 가상화: 컨테이너 기반 애플리케이션 서비스 방식
3.1.2 왜 도커 컨테이너 서비스일까?
도커 도입이 갖는 의미를 알기 위해선 컨테이너 서비스 개발이 이루어지는 일반적인 과정을 이해할 필요가 있다.
- 애플리케이션 코드 개발
- 서비스 구동을 위한 코드 및 웹 화면 구성 등
- 베이스 이미지를 이용한 Dockerfile 작성
- 개발에 필요한 인프라 구성 요소를 Dockerfile에 작성
- 도커 허브를 통해 베이스 이미지를 다운로드하고 다양한 구동 명령어(
RUN
, CMD
, ENDPOINT
, ENV
, ADD
등)와 작성한 코드, 라이브러리, 여러 도구를 포함시킨다.
- Dockerfile build를 통한 새로운 이미지 생성
docker build
명령으로 Dockerfile을 실행
- 각 단계 별로 실행 로그를 확인하여 오류 내용도 알 수 있다.
4-1. 생성된 이미지를 이용한 컨테이너 실행
- 도커 명령어
docker images
를 통해 생성된 이미지를 확인하고 컨테이너를 구동(docker run
)한다.
4-2. 도커 컴포즈를 이용한 다중 컨테이너 실행
- 도커 실행 옵션을 미리 작성한
docker-compose.yml
을 통해 컨테이너 간 실행 순서, 네트워크, 의존성 등을 통합 관리할 수 있다.
5-1. 컨테이너 애플리케이션 서비스 테스트
- IP와 포트 번호를 이용하여 웹 브라우저를 이용한 페이지 연결을 확인 가능
5-2. 마이크로서비스 테스트
- 5-1과 마찬가지로 해당 서비스에 대한 테스트 진행
- 로컬 및 원격 저장소에 이미지 저장
- 로컬 및 원격에 있는 이미지 저장소에 생성한 이미지를 저장하여 팀 간 공유 및 지속적 이미지 관리를 수행한다.
- 깃허브 등을 활용한 Dockerfile 관리
- Dockerfile 코드를 깃허브에서 관리할 수 있다.
- 도커 허브 사이트와 연동하면 자동화된 빌드 기능을 이용한 이미지 생성도 가능
- 동일 환경에서의 지속적 애플리케이션 개발 수행
- 1 ~ 7 과정을 통해 업무용 애플리케이션 이미지를 지속 개발, 운영 및 관리할 수 있다.
컨테이너 동작에 필요한 모든 내용을 사전에 코드로 작성하여 자동화하게 되면 애플리케이션 및 서버 환경을 적은 비용으로 빠르게 개발, 배포, 확장할 수 있다. 이러한 개념을 IaC(Infastructure as Code, 코드로서의 인프라)라고 한다.