Spring boot + nginx + docker

nayoon·2021년 3월 3일
0

Spring

목록 보기
3/4

맨날 까먹어가지고 찾아보고 찾아보느라 시간을 너무 많이 써서 한번에 정리해버리려고 한다..!

ec2 인스턴스 생성

Amazon Linux 2 AMI를 선택한다.

프리티어 적용 가능한 t.micro를 선택한다.

기존에 사용하던 키가 있으면 선택하면 되고 없으면 하나 만들면 된다.

Java 설치

방금 만든 인스턴스에 java를 설치한다.
설치 가능한 java 버전을 확인한다.

> sudo yum list java*jdk-devel
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Available Packages
java-1.7.0-openjdk-devel.x86_64                                          1:1.7.0.261-2.6.22.2.amzn2.0.1                                          amzn2-core
java-1.8.0-openjdk-devel.x86_64                                          1:1.8.0.272.b10-1.amzn2.0.1                                  

java-1.8.0-openjdk-devel.x86_64를 설치하기로 하고 아래와 같이 입력한다.

> sudo yum install java-1.8.0-openjdk-devel.x86_64

설치가 완료되었으면 아래와 같이 입력해서 제대로 출력이 나오면 설치가 완료된 것이다.

> java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)

docker & docker-compose 설치

전에 보안봇을 만들면서 도커를 설치했었는데, 그 때는 우분투였고 지금은 아마존 리눅스다.

도커를 설치한다.

> sudo yum install docker

잘 설치되었는지 확인한다.

> sudo docker --version
Docker version 19.03.13-ce, build 4484c46

도커 컴포즈를 설치한다.

> sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
> sudo chmod +x /usr/local/bin/docker-compose
> sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

도커 컴포즈가 잘 설치되었는지 확인한다.

> docker-compose version
docker-compose version 1.28.2, build 67630359
docker-py version: 4.4.1
CPython version: 3.7.9
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

Dockerfile 작성

Dockerfile은 아래와 같이 작성했다.

FROM openjdk:8-jdk-alpine

ARG JAR_FILE=build/libs/*.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]

build/libs 디렉토리에 있는 jar 파일을 컨테이너에 복사해서 실행하는 것이다.

docker-compose.yml 작성

docker-compose.yml은 아래와 같이 작성했다. nginx와 spring-boot만 있다.

version: "3"
services:
  web:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - spring
  spring:
    build: .
    ports:
      - 8080:8080

nginx 설정

docker-compose.yml 파일을 보면 다음과 같은 부분이 있다.

    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d

nginx/conf.d 디렉토리를 복사해서 컨테이너의 /etc/nginx/conf.d에 붙여넣기하는 것이다.
따라서 nginx/conf.d 디렉토리를 만들어줘야하고 nginx 설정 파일도 작성해야한다.

> mkdir nginx
> mkdir nginx/conf.d
> sudo vim app.conf

# app.conf
server {
    listen 80;
    access_log off;

    location / {
        proxy_pass http://spring:8080;
            proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

위의 설정 파일은 80 포트로 들어온 요청을 8080으로 보내겠다는 것인데, proxy_pass http://spring:8080 에서 spring은 docker-compose.yml에서 만든 spring container입니다.

gradlew 권한

build를 하면 Permission denied가 뜬다.

> ./gradlew build
-bash: ./gradlew: Permission denied

gradlew의 권한을 풀어주고 다시 build하면 잘된다.

> sudo chmod +x gradlew
> ./gradlew build

docker 실행

먼저 도커를 실행한다.

> sudo systemctl start docker

앞에 루트 권한을 준 이유는 다음과 같은 에러가 나와서였다.

Failed to start docker.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files
See system logs and 'systemctl status docker.service' for details.

안 나오면 안 붙여줘도 된다.

도커가 잘 실행되었는지 확인한다.

> systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-03-03 11:40:46 UTC; 6s ago
     Docs: https://docs.docker.com
  Process: 3886 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
  Process: 3874 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
 Main PID: 3893 (dockerd)
    Tasks: 8
   Memory: 89.8M
   CGroup: /system.slice/docker.service
           └─3893 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=1024:4096
> sudo docker-compose up --build
profile
뚜벅뚜벅 열심히 공부하는 개발자

0개의 댓글