도커란? (ft. Dockerfile, Docker-compose..)
작성일
이번 포스트는 도커와 도커 관련 주요 개념들에 대해 알아보겠다. (도커, 이미지, 컨테이너, 도커 파일, 도커 컴포즈)
도커란?
도커(Docker)
는 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며 컨테이너 기반의 오픈 소스 가상화 플랫폼이다.
애플리케이션 환경에 구애 받지 않고 손쉽게 배포 관리를 할 수 있게 해준다는 장점이 있다.
가상머신 vs 도커
가상머신은 호스트 OS 위에 가상화된 하드웨어 계층을 생성하고, 각 가상 머신은 독립된 운영체제, 커널, 드라이버등을 가진다. 이로 인해 무겁고 높은 자원 소비가 필요하다. (메모리, 디스크 공간 등의 자원 필요)
반면, 도커 컨테이너는 호스트 OS의 커널을 공유하며, 가볍게 격리된 환경을 생성하므로 가상머신보다 더 가벼우며 효율적으로 실행한다. 실행 속도도 매우 빠르다.
도커를 사용하는 이유
환경 일치성
다양한 환경에서 동일한 실행 환경을 보장한다. 개발 환경과 운영 환경의 차이로 인한 문제를 방지하며, 응용 프로그램을 어디서든 실행할 수 있다.
편리한 배포
도커 컨테이너는 이미지로 패키징되어 배포되므로, 어플리케이션 배포가 간단해진다. 이미지를 공유하거나 배포할 때 용이하며 빠른 확장이 가능하다.
격리된 환경
도커는 각 컨테이너를 격리된 환경으로 실행하므로, 하나의 컨테이너에서 발생한 문제가 다른 컨테이너에 영향을 주지 않는다.
자원 효율성
가상 머신과 비교해 더 가볍고 빠르며 호스트 시스템의 리소스를 효율적으로 활용할 수 있다.
스케일링
컨테이너 기반 아키텍처는 쉬운 스케일링이 가능하여 요구에 따라 응용 프로그램을 확장할 수 있다.
도커의 3대 구성요소
도커의 3대 구성요소는 Dockerfile, Image, Container이다.
컨테이너를 만들기 위해선 다음과 같은 단계를 거친다.
Dockerfile
만들기- Dockerfile을 빌드하여
image
만들기 Container
구동하기
Dockerfile 이란?
도커파일(Dockerfile)
이란 도커 이미지를 구성하기 위해 있어야할 패키지, 의존성, 소스코드 등을 하나의 file로 기록하여 이미지화 시킬 명령 파일이다.
즉, 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 새로운 서버가 추가되면 의존성 파일을 컴파일하고 이것 저것 설치할 필요가 없다.
Dockerfile 주요 명령어
FROM openjdk:11
ARG JAR_FILE=build/libs/app.jar
COPY ${JAR_FILE} ./app.jar
ENV TZ=Asia/Seoul
ENTRYPOINT ["java", "-jar", "./app.jar"]
- FROM
- 새로운 이미지를 생성할 때 기반으로 사용할 이미지를 지정 (이미지 이름: 태크)
- jdk 11이 있는 컨테이너 사용
FROM openjdk:11
- ARG
- 이미지 빌드 시점에서 사용할 변수 지정
ARG JAR_FILE=build/libs/app.jar
- COPY
- 호스트에 있는 파일이나 디렉토리를 Docker 이미지의 파일 시스템으로 복사
COPY ${JAR_FILE} ./app.jar
- ENV
- 컨테이너에서 사용할 환경 변수 지정
- TimeZone 환경 변수
ENV TZ=Asia/Seoul
- ENTRYPOINT
- 컨테이너가 실행되었을 때 항상 실행되어야 하는 커멘드 지정
ENTRYPOINT ["java", "-jar", "./app.jar"]
이미지
이미지
란 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용프로그램을 실행하는데 필요한 모든 것을 포함하는 패키지이다. Dockerfile을 build해서 이미지를 생성하며 생성된 이미지는 변경이 불가능하다.
이미지는 Github과 유사한 서비스인 도커 허브(링크)를 통해 버전 관리한다.
컨테이너
컨테이너
란 가상화 기술을 이용하여 애플리케이션과 개발 환경을 격리된 공간에서 실행하는 단위이다.
이미지를 이용해서 컨테이너를 구동한다. (컨테이너 = 이미지를 실행한 상태) 컨테이너에서 개별적 수정이 가능하며 수정해도 이미지에는 영향을 끼치지 않는다.
도커 이미지가 도넛 레시피라면 도커 컨테이너는 레시피를 이용해 만든 도넛으로 비유할 수 있겠다.
도커 컴포즈란?
도커 컴포즈(Docker Compose)
란 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구이다.
도커 컴포즈를 사용하면 여러개의 도커 컨테이너로부터 이루어진 서비스를 구축 및 네트워크 연결, 실행 순서를 자동으로 관리할 수 있게 해준다.
docker-compose.yml 파일을 작성하여 1회 실행하는 것으로 설정된 모든 컨테이너를 실행한다.
이렇게 도커와 도커 관련 주요 개념들에 대해 알아보았다. 다음 포스트는 이 내용을 바탕으로 실제 Spring Boot에서 MariaDB, Redis를 적용한 예제를 작성하려고 한다.