[원리 공부] Docker란? 도커 동작 원리, 도커 개념

zooju·2022년 9월 30일
0
post-thumbnail

개념

1. 도커란?

도커는 "app을 packaging 할 수 있는 툴" 이다.

컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 도구라고 할 수 있다.

  • 기존의 문제: 서버 pc마다 환경이 다르고(snow flakes), 매번 환경변수, dependencies 설정해주는 것 매우 힘듦. 그렇기에 서버, pc마다 버전 차이 등의 이유로 실행 결과가 달라지는 문제 발생함.

  • 이 문제를 해결하기 위해 App 구성, runtime 환경에서 필요한 요소들을 모아서 Packaging하는 것을 도와주는 것이 docker!


2. VM과 도커의 차이


  • Virtual Machine 동일한 OS에서 hypervisro(vmware..) 가상의 머신을 만들어 구동. 한 운영체제 위에서 application은 각각의 고립된 다른 환경에서 구동함. OS를 포함하고 있기 때문에 되게 무거움..! 또 리소스도 많이 들음
  • Docker Container Engine이 Host OS에 접근해서 필요한 작업을 해줌. Container Engine에서 가장 선호되는 것이 도커! Engine만 설치하면 컨테이너를 만들어서 고립화 할 수 있음. OS를 포함하지 않는다는 것이 큰 차이! vm의 경량화

3. 도커의 3대 구성 요소

  • 컨테이너를 만들기 위해서는 dockerfile 만들기 → build해서 image 만들기 → container 구동하기
  • Dockerfile
    • 컨테이너를 어떻게 만들어야하는지 recipe!
    • 필요한 파일, dependencies, 환경변수, 실행 스크립트 등 포함
    • DSL(Docker Specific Language) 언어를 사용해 이미지를 생성할 수 있음.
  • 이미지
    • Dockerfile을 build해서 이미지 생성.
    • 실행되고 있는 application의 상태를 스냅샷!
    • 변경 불가능
    • 객체지향의 class같은 개념! 붕어빵 틀~
  • 컨테이너
    • 이미지를 고립된 환경에서 프로세스를 실행할 수 있음
    • 이미지를 이용해서 구동(컨테이너 = 이미지를 실행한 상태)
    • 컨테이너에서 개별적 수정 가능. 수정해도 이미지에는 영향을 끼치지 않음.
    • 도커 이미지가 도넛 레시피라면, 도커 컨테이너는 레시피를 이용해 만든 도넛으로 비유 가능!

4. 어떻게 container 공유?


  • git, github같은 개념
📌 local에서 dockerfile 생성, 빌드 → image 생성 → Image container registry에 푸시하기 → Server에서 pull해서 실행

참고로, container repository에는 public, private가 있다.

  • Public: dockerhub, RED HAT, GitHub Packages
  • Private: AWS, GoogleCloud, Microsoft Azure

Reference.

https://www.youtube.com/watch?v=hWPv9LMlme8&t=10s

도커 한방에 정리 🐳 (모든 개발자들이 배워보고 싶어 하는 툴!) + 실습

초보를 위한 도커 안내서 - 도커란 무엇인가?


배포하기

Spring docker로 배포하기

Spring Boot Docker

  1. Dockerfile 생성

    FROM amazoncorretto:11
    WORKDIR /root
    ARG JAR_FILE=build/libs/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    • FROM : 기반 이미지. (Spring 개발한 Java 버전으로 했음)
    • WORKDIR: (= cd) 작업 디렉토리 전환. container안의 어떤 경로에 우리 프로젝트를 실행할 것인지
    • ARG : docker file안에 변수 설정
    • COPY: [복사할 경로][이미지에서 파일이 위치할 경로]
    • ENTRYPOINT: 컨테이너 시작시 컨테이너가 수행하게 될 실행 명령을 정의

  2. gradle 빌드

./gradlew clean build

build/lib에 snapshot jar파일 생성

  1. local에 Docker 설치

Developers - Docker


  1. Docker Hub에 repository 생성하기
  1. docker file → image 빌드하기 (m1 기준 명령어)
docker build --build-arg DEPENDENCY=build/dependency -t gkrry2723/daotool --platform linux/amd64 .

6. 만들어진 도커 이미지 도커 허브에 push하기
docker push gkrry2723/daotool

7. EC2 Server에서 docker 설치 및 실행, image pull하기
sudo yum install docker                  // 도커 설치
sudo systemctl start docker              // 도커 실행
sudo docker pull gkrry2723/daotool       // 이미지 풀

8. docker 이미지를 통해 스프링 부트 어플리케이션 배포
sudo docker run -d -p 8080:8080 gkrry2723/daotool

// run: 이미지 실행
// -d: 백그라운드 실행
// -p: 포트 연결. 왼쪽-외부포트, 오른쪽-내부포트

profile
이것 저것 새로운 분야에 관심이 많은 서버 개발자

1개의 댓글

comment-user-thumbnail
2024년 1월 22일

DSL의 D는 Docker가아니라 Domain 입니다.

답글 달기