티스토리 뷰

스프링부트로 웹서비스 만들기 #4

 

 

 

1. Docker 설치

2편에서 올려뒀던 CentOS Server로 접속합니다.

전 공식문서 중 필요한 부분만 진행하니, 따로 필요한게 있는 분들은 아래링크 확인 해주세요.

https://docs.docker.com/engine/install/centos/

 

Install Docker Engine on CentOS

To get started with Docker Engine on CentOS, make sure you meet the prerequisites, then install Docker. Prerequisites OS requirements To install Docker Engine, you need a maintained version of...

docs.docker.com

 

Docker설치에 앞서 Docker 저장소를 설정해야합니다.

먼저 yum-config-manager를 사용할 수 있게 yum-utils를 설치합니다

yum-config-manager는 yum설정옵션과 저장소를 관리하는 도구입니다.

아래는 yum-utils설치와 yum-config-manager에 Docker Community Edition 저장소를 추가하는 명령어입니다.

sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

 

 

Docker latest version의 설치, 시작, 시작확인 명령어입니다.

이렇게 Docker설치는 완료입니다.

sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker run hello-world

Hello from Docker!

 

 

 

2. Dockerfile

참조 문서

https://docs.docker.com/engine/reference/builder/

 

| Docker Documentation

Dockerfile reference Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on...

docs.docker.com

 

Dockerfile이란 Docker Image build시 이용되는 명령어들로 구성된 문서입니다.

사용자는 Dockerfile을 이용해 여러 줄의 Docker 명령어를 이용할 수 있게 됩니다.

 

우리는 Spring Boot Application을 Docker Image로 build할 것이고 이에 대한 명령어를 작성해 프로젝트 경로에 위치 시키면 됩니다.

 

 

아래처럼 최상위 경로에 Dockerfile을 만들고 코드를 작성합니다.

 

저는 아래처럼 간단히 작성했지만 찾아보면 훨씬 더 많고 강력한 옵션들을 제공합니다.

FROM openjdk:11
VOLUME /tmp
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

[FROM]은 새로운 빌드를 초기화하고 Base Image가 될 Image를 정의합니다. 특정 image를 이용할 수도 있지만 Public Repository에서 끌어 오는것이 가장 쉽습니다.

[VOLUME]은 Docker의 기본 설정은 Container를 삭제하게되면 Container에서 관리하던 Data또한 삭제된다. 이를 방지하기 위해 지정된 이름으로 마운틴 지점을 생성합니다.

[ARG]는 docker build --build-arg <varname>=[value]형태의 빌드 옵션을 Dockerfile에서 사용합니다.

[COPY]는 파일이나 디렉토리를 복사해 컨테이너 위치에 복사합니다.

[ENTRYPOINT]는 컨테이너가 시작됐을때 수행될 명령어를 뜻합니다. 위 코드의 경우 터미널에 

java -jar -Djava.security.egd=file:/dev/./urandom {your Project Name}.jar를 입력해 Project Run을 했다고 생각하면 된다.

 

 

 

이제 DockerFile을 이용해 image를 생성해봅니다.

먼저 Github에 Dockerfile을 Push하고 CentOS서버에 접속합니다.

Dockerfile에서 이용될 Jar가 있어야 하기때문에 Jenkins workspace아래로 이동하고 gradle build.

cd /var/lib/jenkins/workspace/my_project
sudo ./gradlew clean build

 

근데 여기서 문제가 발생했습니다.

EC2 프리티어는 메모리가 작아도 너무너무 작았던 것입니다.🤢

 

아래와 같은 오류가 계속 터지기에 구글링을 좀 해봤고

서버의 메모리를 늘린다던가 JVM의 heapsize를 조정한다던가의 해결법이 있었지만 잘 되지 않았습니다.

그렇게 헤매던중 블로그 하나를 찾아냈습니다.

서버 메모리가 1기가라니

찾아낸 블로그는 아래의 블로그이고

프리티어의 작은 물리적 메모리를 swap memory를 통해 해결하는 방법입니다.

https://saksin.tistory.com/1353

 

AWS 서버 yum install, update 시 메모리 부족 해결하기

아마존 EC2 로 설치하였을 경우, 기본적으로 스왑 메모리를 사용하지 않습니다. 따라서 부족한 메모리로 인한 yum 설치 등에서 오류가 발생하는 경우가 있는데 이때 임시로 스왑 메모리를 사용하도록하여 관련 작..

saksin.tistory.com

 

 

위 블로그를 그대로 따라하고 다시 빌드명령어를 쳤더니 빌드에 성공했습니다.

 

 

위의 메모리작업때문에 1시간 30분을 날렸지만...

이제 최초의 목표였던 Dockerfile을 이용한 image build를 해보겠습니다.

방금 gradle명령을 쳤던 그 위치에 Dockerfile이 있을테니 그 자리에서 진행합니다.

 

 

 

맨뒤에 .은 꼭 찍어줘야합니다! 그래야 build가 진행이 됩니다.

docker build -f Dockerfile -t myspring .

 

빌드가 수행되면 명령어로 image를 확인합니다.

docker images

 

 

 

 

3. Docker Run

 

위에 만들어진 image를 run 명령어를 통해 Container를 시작할건데요.

좀더 많은 옵션들이 있겠지만 이번에는 기초적인 설정만을 통해 실행하겠습니다.

실행 명령어와 Container list확인용 명령어입니다.

docker run -d --name runspring -p 8282:8080 myspring
docker ps

 

-d : 백그라운드로 돌리겠다는 옵션입니다.

--name : Container의 이름입니다. Image의 이름과는 별개입니다.

-p : 포트지정옵션입니다. 스프링부트에는 내장톰캣이 있고 기본 포트는 8080입니다. 그냥 Jar를 실행하게되면 8080포트를 이용하게 될건데 이 포트를 8282로 포워딩하겠다는 옵션입니다.

myspring : 위에서 생성한 image의 이름입니다. 즉, '이 이름의 image를 이용할거야'라는 뜻입니다.

 

 

 

 

이제 EC2의 보안그룹에서 포트를 열어준 후 접속해봅니다

너무 반가운 에러페이지

 

 

아무 코딩도 안해놨기 때문에 위와 같이 스프링부트의 화이트라벨 에러페이지가 뜬다면 정상동작 한겁니다.

 

 

드디어 Docker설정이 끝났습니다!

 

 

저는 굉장히 간단하게 설정만하고 지나쳐온 부분들이 많습니다.

더 많은 기능과 옵션등은 공식문서와 구글링을 통해 찾아보시기 바랍니다.

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함