본문 바로가기
컨테이너/Docker

docker+ ec2 (java)간단 배포

by chogigang 2023. 3. 21.

docker로 간단한  배포를 진행할 겁니다. hello world 만들어서 배포하기 이런 거 말고 ec2를 활용한  실전 배포를 할 겁니다,

 

저는 인텔리 제이로 들어가서 docker 파일을 만들 겁니다. 이클립스에서 하셔도 상관없습니다.

 

먼저 jar 파일을 만듭시다.

https://cbh2031.tistory.com/84

 

apt-get install docker.io  독 커를 설치하십시오

플러그인도 docker 설치하시면 더 보기도 편합니다.

 

dockerfile를 작성합시다.

 

위치는 최상위 위치에 있어야 합니다.

# 최신 11-jdk 이미지로 부터 시작
FROM openjdk:11-jdk


# jar  파일 경로
ARG JAR_FILE=target/*.jar

# 앞에는 HOST OS의 현재 폴더를 의미
# 뒤에는 컨테이너의 현재 폴더(WORKDIR)를 의미
COPY ${JAR_FILE} app.jar


# 안해도 되지만, 하는게 좋습니다.
# 이 컨테이너는 8080 포트를 사용한다는 의미 입니다.
EXPOSE 8080


# docker run 명령에서 실행항 명령어
ENTRYPOINT ["java","-jar","/app.jar"]

# java 옵션 처리
# ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","/app.jar"]

#타임존 아시아 서울 적용
ENV TZ=Asia/Seoul

 

실행시키면 됩니다. 참고로 jar 파일은 보이기 편하게 위치를 옮겼고 경로도 그렇게 바꿨습니다 원래 target 파일 맨 밑에 생성됩니다. 경로나 파일 위치 옮기지 마시고 그냥 dockerfile 실행시키십시오

 

독거 파일 실행시킬 때도 똑같이 터미널이랑 같은 환경으로 실행시킵니다 혹여나 docker image 생성할 때 오류가 보이면 무조건 그걸 수정하셔야 배포 때 문제가 없습니다.   저는 이걸로 4일을 날려 먹었습니다.  대부분 jar 파일 문제, db 연결과 끊겨서 jpa 가 테이블을 못 만들어서 코드실행이 불가능한 경우가 많습니다.

docker 랑 aws DB 서버통신 문제는 일단 배포까지 완료하고 나서 상태를 봐야 할 경우도 있습니다. 이경우는 좀 귀찮아집니다.

 

db가 문제 시면 https://cbh2031.tistory.com/82

해당 글을 참고하셔서 아마존 RDS랑 프로젝트랑 연결하셔서 jar-> docker image를 만들어야 합니다.

 

컨테이너 밑에 클릭하시면 기존 로컬 작업처럼 컴파일러에 스프링 이모티콘도 나오고 그런 것들이 그대로 나올 겁니다. 그것도 찍으려는 대 갑자기 랙걸려서 안보여주네요 

이렇게 나오고 정상적으로 컴파일러처럼 Started 가 나와야 합니다.

 

 

 

docker hub에서 레포지토리를 만들어야 합니다. docker hub에 들어가셔서 로그인하고 레포지토리 만들기를 누르시고 누 만드시면 화면과 같이 나옵니다.

 

 

 

 

 

잘 만들어지는 걸 확인했으면 다시 터미널에 돌아와서 docker build -t 아이디/레포지토이름 를 칩니다

 

 

독커 허브에 푸시를 를 해서 허브에 집어넣고 다시 AWS로 집어넣어야 합니다

명령어  docker push 아이디/레포지토리이름

 

뒤 태그이름은 빼고 넣으셔도 됩니다

 

 

이제 AWS 인스턴스에 들어가야 합니다 각자 준비한 AWS 인스턴스 리눅스에 들어갑시다 저는 우분투 오라클 리눅스입니다.

 

putity를 사용했으며 그 외 여러 가지 각자의 방법으로 ec2 리눅스로 들어가는 방법이 있습니다. https://cbh2031.tistory.com/78

 

이건 제가 사용하는 방법입니다.  들어와서 root 권한자로 로그인해야 합니다 sudo passwd root를 입력하고 비밀번호를 치

 

신다음 root 계정을 생성합니다.    그리고 su root을 입력하시고 비밀번호를 마저 치시면 다음과 같은 화면이 나옵니다

 

apt-get update   ,  apt-get upgrade   실행시켜 리눅스를 최신버전으로 바꿔 놓습니다.  글자가 많으면 느려지거나

튕길 수도 있으니 clear 쳐줘서 깨끗하게 만든 다음 작업을 합시다.

 

그리고 배포 서버 리눅스에 docker를 설치해야 합니다 apt-get install docker.io 

 

AWS ec2 리눅스 서버에서 docker hub에 담아놨던 배포용 이미지들을 가져와야 합니다

 

docker pull (독커허브아이디/독커허브레포지토리)

 

그리고 이미지로 아이디를 확인해야 실행시킬 수 있으니 docker images 를입력해서 docker image id를 확인합시다

 

 

 

마지막입니다 이제 이미지를 컨테이너 화 시키면서 서버포트 8080을 주입해서 외부에서 jar파일을 실행시킨 서버에 들어올 수 있게 할 수 있습니다.

 

docker run -d -p 80:8080  (이미지 아이디)    -d( 포트로 들어와서)  -p(이쪽 포트로 보내준다)

ex )   docker run -d -p 80:8080 01d56c       뒤쪽 아이디는 5자리만 입력해도 인식을 합니다.

 

docker ps를 사용해 컨테이너가 잘 실행되고 있는지 확인합시다.

 

 

가끔가다가 db나 무슨 문제가 생겨서 10초 실행하다 정지하는 현상이 있습니다. docker ps 한 30초 동안 계속 확인하십시오 만약 ps로 입력하다 없어지면 docker ps -a 을 입력하면 정지한 컨테이너까지 다 확인 가능합니다.

 

 

이제 인스턴스에 받은 주소를  입력하면 배포한 프로젝트 화면이 나옵니다.

 

만약 로컬 에선 오류가 안 걸리지만 배포 중 오류가 걸리면 서버단에서 로그를 봐야 합니다. 대개 웹사이트 로그에서 볼 수 있

 

고 더 정확한 건 서버 배포 리눅스에 들어가서 로그를 확인하는 방법이 있습니다.  저는 docker 컨테이너 로그를 건드려서

 

보는 방법을 선택하긴 합니다. 그걸로 thymeleaf 오류를 잡은 적이 있습니다. 

 

 

 

가장 간단한 배포를 해봤습니다 여기서 더 한발 나아가 로컬 개발 환경에서 이미지 파일을 저장하였다면 이제 배포 시 이미

 

지 파일 경로가 일치하지 않아 이미지가 깨지는 현상도 있을 수 있으니 이점 생각하시면서 개발을 하시고 준비하시기 바랍

 

니다. 여기서 더 다양한 배포 방법이 있습니다 일단 간단한 첫 배포는 이렇게 해보시고 더 복잡한 젠킨스나 기타 다른 배포

 

방법이 적혀있는 블로그가 있다면 추천 부탁드립니다.