본문 바로가기

기록하기

Docker

  • Docker?
    • 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고, 배포하고 실행할 수 있도록 설계된 도구이며 컨테이너 기반의 오픈소스 가상화 플랫폼
    • 어플리케이션 환경에 구애 받지 않고 손쉽게 배포 관리를 할 수 있게 해줌
    • 컨테이너 기반 배포 방식은 구글을 비롯해 대부분 서비스 회사가 컨테이너로 서비스 운영 중
    • AWS, Azure, Google, Cloud등 어디서든 실행 가능

  • 굳이 도커?
    • 도커는 서버마다 동일한 환경을 구성해주기 때문
    • 동일한 환경을 구성하기 때문에 auto scaling에 유리 -> 서버를 자동으로 늘리고, 줄이고~

  • 도커와 기존 가상화 기술(VM) 차이
    • 한대의 서버에서 하나의 어플리케이션만 운영하는 전통적인 방식에서 하이퍼바이저 기반 가상화 등장
    • 하이퍼 바이저는 호스트 시스템(윈도우, 리눅스 등)에서 다수의 게스트OS(가상머신)을 구동할 수 있게 하는 소프트웨어
    • 각 VM 독립적으로 동작
    • 도커는 하이퍼 바이저 구조를 토대로 등장, VM보다 훨씬 가볍게 동작하기 때문에 성능에 유리


  • 도커의 컨테이너와 이미지
    • 이미지란 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용프로그램을 실행 하는데 필요한 모든 것을 포함하는 패키지
    • 이미지는 Github와 유사한 서비스인 dockerhub를 통해 버전 관리
    • 컨테이너란 도커 이미지를 독립된 공간에서 실행할 수 있게 해주는 기술

  • 도커 이미지 : 프로그램을 실행하는데 필요한 설정이나 종속성들을 가지고 있음
  • 도커 컨테이너 : 이미지 인스턴스이며, 프로그램을 실행

// Dockerfile 예시

FROM openjdk:11
ARG JAR_FILE=build/libs/app,jar
COPY ${JAR_FILE} ./app.jar
COPY pharmacy.csv ./
ENV TZ=Asia/Seoul
ENTRYPOINT ["java","-jar","./app.jar"]

 

  • Dockerfile이란 도커 이미지를 구성하기 위해 있어야 할 패키지, 의존성, 소스코드 등을 하나의 File로 기록하여 이미지화 시킬 명령 파일
  • 즉, 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 새로운 서버가 추가되면 의존성 파일을 컴파일하고 이것 저것 설치할 필요 X

// 도커파일 주요 명령어

FROM
- 새로운 이미지를 생성할 때 기반으로 사용할 이미지를 지정 (이미지 이름:태그)
- ex) jdk11이 있는 컨테이너 사용
- FORM 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"]

  • Docker Compose?
    • 멀티 컨테이너 도커 어플리케이션을 정의하고 실행하는 도구
    • Application, Database, Redis, Nginx 등 각 독립적인 컨테이너로 관리한다고 가정
    • 여러개의 도커 컨테이너로 부터 이루어진 서비스를 구축 및 네트워크 연결, 실행 순서를 자동으로 관리
    • docker-compose.yml 파일을 작성하여 1회 실행하는 것으로 모든 컨테이너를 실행

'기록하기' 카테고리의 다른 글

Day + 42  (0) 2023.11.26
Day + 39  (1) 2023.11.23
Day + 37  (0) 2023.11.21
Day + 36  (0) 2023.11.20
Day + 35  (0) 2023.11.19