Dockerfile은 Docker 컨테이너 이미지를 생성하기 위한 설정 파일입니다. 각 Dockerfile은 일련의 명령어와 지시문으로 구성되어 있으며, 이를 통해 어떤 소프트웨어와 설정을 포함한 컨테이너를 만들지 정의합니다.
자신의 프로젝트의 root 디렉토리에 file을 생성하고 file명을 dockerfile로 하면 됩니다.
우선 제가 작성한 기본 dockerfile을 보여드리겠습니다.
Docker 이미지의 기본 이미지를 지정합니다. 모든 Dockerfile은 FROM 지시문으로 시작해야 합니다.
예시: FROM openjdk:17
프로젝트의 jdk 버전에 맞게 작성하면 됩니다.
파일을 호스트 시스템에서 Docker 이미지로 복사합니다. ADD는 파일을 추가할 뿐만 아니라 URL에서 파일을 가져오거나 압축 파일을 추출할 수 있습니다. COPY는 단순히 파일을 복사합니다.
예시: ADD /build/libs/*.jar app.jar 또는 COPY ${JAR_FILE} app.jar
전 ADD를 이용해 /build/libs/하위 경로에 jar를 위치시켰습니다.
app.jar는 프로젝트명.jar를 말합니다.
FROM openjdk:17
ADD /build/libs/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
"-Djava.security.egd=file:/dev/./urandom"
해당 명령어는
작성한 dockerfile을 github에 등록합니다.
등록이 완료되면 ec2에서 프로젝트를 clone하여 dockerfile을 실행할 수 있습니다.
우선 ec2에 docker가 설치됐다고 가정하고 진행하겠습니다.
본인의 ec2에 접속하신 후 관리자 권한으로 변경합니다.
sudo su -
cd~로 루트로 이동한 후
본인의 git repository의 주소를 이용해 프로젝트를 clone 합니다.
git clone "주소"
exit으로 관리자 권한을 해제 하고 ls를 하면
이렇게 본인의 프로젝트가 제대로 pull 됐음을 할 수 있습니다.
우선 dockerfile에 java 설치 명령을 따로 하지 않았기 때문에 직접 설치하겠습니다.
sudo apt update
sudo apt install openjdk-version(본인 프로젝트 버전)-jdk
java 라고 입력했을 때 명령어 목록이 나오면 제대로 설치 된 것입니다.
java를 설치했으면 프로젝트를 build할 차례 입니다.
프로젝트 디렉토리로 접근한 후 gradlew를 테스트합니다.
sh gradlew
(원래는 build 파일이 없습니다.)
정상적이라면 이렇게 표시됩니다.
이제 gradlew를 빌드합니다.
sh gradlew build
build 시간이 좀 걸립니다. build가 완료되면 build 파일이 생성됐음을 확인할 수 있습니다.
이제 build/libs로 이동합니다.
cd build/libs
jar 파일이 잘 생성됐습니다.
jar를 바로 실행해도 되지만 우리는 dockerfile을 실행합시다.
프로젝트 루트에서 다음 명령어 입력
sudo docker build -t 프로젝트명 .
그럼 dockerfile에 있는 명령어들을 읽고 이미지를 만듭니다.
확인해보면
sudo docker images
프로젝트 이미지가 잘 생성됐음을 확인할 수 있습니다.
이제 이미지를 실행합니다.
sudo docker run -p 8080:8080 프로젝트명
그럼 springboot가 docker 내부에서 빌드되는 화면이 나옵니다.
Started 프로젝트가 뜨면 정상적으로 작동한 것입니다.
이제 퍼블릭 주소 :8080으로 접속하시면
프로젝트가 정상적으로 뜨네요.
고생하셨습니다!