본문 바로가기
CS/가상화(도커)

[백엔드] 도커 컨테이너 생성 예제 (Window)

by Hoozy 2023. 4. 6.

도커 컨테이너 생성 예제

이 게시글에서는 스프링부트 프로젝트를 도커 이미지로 만들고 도커허브에 푸시해보겠습니다.

도커 설치

  • 설치하기 전 가상화 세팅

  • 도커의 설치를 위해서는 반드시 Hyper-v를 지원하는 OS가 필요하다.

  • Hyper-v 활성화 하는 방법

    1. 윈도우 버튼 + s 클릭 후 window 기능 켜기/끄기 클릭
      • 만약 아래에서 Hyper-v가 안뜬다면 윈도우 Home 버전일 것이다.
      • Home 버전에서 Hyper-v를 활성화 하기 위해서는 아래 게시글을 참고하면 된다.
      • https://forbes.tistory.com/542
    • 위 이미지에서 Hyper-v 에 체크가 안되어 있을 경우 체크하고 확인을 누르면 자동으로 Hyper-v 가 활성화되고, 재부팅 하고 도커를 설치하러 다음 단계로 이동하면 된다.
    1. https://docs.docker.com/desktop/install/windows-install/ 에서 exe 다운로드 후 설치

Gradlew

  • Gradle Wrapper의 약자로, 새로운 환경에서 프로젝트를 설정할 떄 자바나 gradle을 설치하지 않고 바로 빌드할 수 있게 해주는 역할을 한다.

스프링부트 프로젝트 빌드

  • 터미널 창(cmd)를 키고, 프로젝트 폴더로 이동한다.
    • D 드라이브는 cd 없이 'D:' 후에 cd로 이동해야한다.
> cd 폴더경로
  • 이후 프로젝트 빌드 명령어 -> 시간이 좀 걸립니다.
> gradlew build
  • 위의 빌드가 끝난 후 프로젝트 폴더 내에 build/libs 폴더 내부에 '프로젝트명-버전-SNAPSHOT.jar'이 생성되었으면 성공입니다.
  • 위의 jar 파일이 빌드된 파일입니다.
  • 이후 프로젝트 root 폴더에 dockerfile을 생성 후
  • 아래와 같이 작성 후 저장해준다.
FROM openjdk:17-jdk // 현재 프로젝트의 jdk
COPY build/libs/*.jar app.jar // 위의 빌드된 jar 를 app.jar로 복사
ENTRYPOINT ["jave","-jar","app.jar"] // 도커 컨테이너를 실행할 때 명령어

도커 이미지 생성

  • cmd에서 프로젝트 폴더로 이동 후
# 이미지명은 repository 이름과 같게한다.
docker build -t [이미지명] [이미지 저장할 폴더]
docker build -t testimg . // . 은 현재 폴더
  • 생성 후에 도커의 이미지를 보는 법
docker images // 도커의 이미지 목록이 나온다

도커허브에 Repository 생성하기

  • 도커 이미지를 푸시하기 전에 도커허브에 Repository를 생성해야 한다.
  1. hub.docker.com 접속 후 회원가입 후 로그인. -> docker desktop 에도 로그인을 해야 푸시가 된다.

  1. 위 이미지에서 Create Repository 클릭 후 원하는 대로 이름 설정 후 생성.

Repository에 이미지 푸시

  • 프로젝트 폴더로 간 후
docker push \[repository 명\] // repository 명은 닉네임/폴더명 이다. -> 폴더명은 위에서 설정한 이름
docker push 닉네임/폴더
  • 만약 이미지의 로컬(현재 컴퓨터) repository 명과 도커허브의 repository 명이 다르면 이미지가 없다는 오류가 뜬다.

  • 이때는 로컬의 이미지의 repository 명을 도커허브의 repository명과 같게 해주면 해결된다.
docker images //  먼저 도커 이미지의 repository 명을 찾은 후

  • 로컬의 repository와 다른 것을 확인한 후에 아래 명령어로 도커허브의 repository 와 같게 새로 만든다.
  • docker image tag \[이미지명\]:태그명(없으면 안써도됨) \[도커허브 repository명\] docker image tag studyimg 닉네임/폴더

  • 위의 과정 후에 푸시(`docker push 닉네임/폴더')를 재진행하면 이미지가 도커허브에 푸시된다.

도커 컨테이너 실행

docker run -p [호스트의 포트]:[컨테이너 내부의 포트] [도커이미지명]
docker run -p 8005:8005 testimg

// -d 명령어는 detatched 옵션으로, 백그라운드로 띄워서 도커 콘솔을 다시 쓸 수 있게 해준다.
docker run -d -p [호스트의 포트]:[컨테이너 내부의 포트] [도커이미지명]
docker run -d -p 8005:8005 testimg

// 이후에 ps 명령어를 하면 컨테이너를 실행시킬 수 있다.
docker ps

EC2 인스턴스에 도커 설치 후 배포

$ sudo su // 관리자 권한

$ yum install java-17-amazon-corretto // 자바 오픈jdp 17 설치  
$ java -version // 자바 버전 확인

$ yum install docker // 도커 설치

$ systemctl start docker // 도커 실행

$ docker pull 닉네임/폴더 // 도커 이미지 푸시(가져오기)

$ docker run -d -p 8005:8005 [위의 이미지] // 스프링부트 프로젝트 도커 이미지 애플리케이션 배포

참고 자료

https://yooooonnf.tistory.com/5
https://gihyun.com/120

'CS > 가상화(도커)' 카테고리의 다른 글

[백엔드] 가상화 / 컨테이너  (0) 2023.04.05

댓글