Coding/Back - Spring Framework

Docker란? 컨테이너 생성하고 구동하기 #Day21

꿀딴지- 2023. 9. 13. 14:42

Docker : 컨테이너를 관리하는 프로그램

  • Docker가 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징
  • 컨테이너 : 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함될 수 있음
  • 가상화와 차이점
    • 가상머신(VM) : 서버 하드웨어를 가상화(또는 직접 관리할 필요성을 제거)
    • 컨테이너는 서버의 운영 체제를 가상화. Docker는 컨테이너를 위한 운영 체제(또는 런타임). 컨테이너를 실행하려는 각 서버에 Docker Engine이 설치되어 컨테이너를 구축, 시작 또는 중단 등이 가능

→ 컨테이너만 있으면 환경이 그대로 유지됨

→ 컨테이너 통째로 배포(업로드) 가능함 → 내려받아서 그대로 사용가능

여러 곳에 배포가 가능하고, 휴먼에러 방지함(언제든지 동일한 환경 구성)

 

쿠버네티스(컨테이너 관리) : 컨테이너 갯수가 늘어나고, 컨테이너 별 버전관리 등이 필요 시 사용

docker와 쿠버네티스 둘다 컨테이너 관리이지만, 관리 영역이 다르며 두개는 연관관계가 없음

  • 도커 : 컨테이너를 생성하고 실행해주는 컨테이너 관리 툴
  • 쿠버네티스 : n개 서버의 광역의 도커의 컨테이너들을 관리 (컨테이너 자체 관리)

도커 사용하여 컨테이너 생성하기

0. IntelliJ 에서 빌드파일 준비(~.jar)

 

1. 도커 및 도커데스크탑(GUI) 설치

2. docker build를 위한 설정파일 만들기

   1) Docker파일 생성을 위한 property 파일 생성 : Dockerfile (intelliJ에 가장상위에 파일 생성)

# base-image
FROM openjdk:11
# Copy에서 사용될 경로 변수
ARG JAR_FILE=build/libs/*.jar
# jar 빌드 파일을 도커 컨테이너로 복사
COPY ${JAR_FILE} app.jar
# jar 파일 실행
ENTRYPOINT ["java","-jar","/app.jar"]

 

3. Docker 이미지 생성 및 컨테이너 띄우기

  • docker images : 저장소 등에서 다운받아지는 형태
  • docker container : 실제 실행가능한 상태
  • 또한, Docker는 layer형태로 되어 있어 변경된 layer에만 반영됨(형상관리)

   1) docker에서 빌드 하기(Dockerfile이 위치한 경로에서) → docker image로 생성됨 

   2) docker image를 컨테이너화 하기

   3) localhost로 해당 포트 접속하면 컨테이너 정상 구동 확인(혹은 docker desktop에서 container 확인)

docker build -t test:0.0.1 .
docker run -p 8080:8080 [img_id] //내부통신포트:외부통신포트

 

4. Docker 컨테이너 중단 및 삭제

//중지된 ps까지 확인
docker ps -a 
docker stop [img_id]
docker rm [img_id]

//도커 이미지 삭제
docker image rm 

 

5. Docker 원격저장소에 image 올리기

  • 원격저장소는 img의 tag 명 설정으로 가능 : [dockerid/img이름]
//다른 img 가져오기
docker pull [tagname:version or img id]
docker pull tomcat:9.0.80-jre11-temurin-jammy
//img 올리기
docker push jiyoung0/test:0.0.1
//img tag 추가하기
docker tag [img_id] [repositoryName/new_name:version]jiyoung0/test:0.0.1
//현재 이미지 전체 목록보기
docker images -a

 

 

참고1. 컴파일과 빌드

  • 컴파일 : 소스코드를 바이너리 코드로 변환
  • 빌드 : 실행가능한 소프트웨어 산출물로 만들어주는 일련의 과정. 컴파일된 파일을 꾸러미로 패키지 하는 등. 일반적으로 컴파일이 포함됨
  • 실행 : 빌드된 파일을 실행하여 메모리에 올라가는 과정

IntelliJ에서 빌드하고 런까지 해줌.

빌드tool(gradle, maven)을 사용하여 빌드만도 가능

 

참고2. intelliJ에서 build 파일 생성(run 하지 않고)