요즘 도커 스터디를 하고 있는데, 도커 스터디에서 받은 숙제를 벨로그에 정리를 해보려 한다.
숙제의 큰 틀은 nginx를 도커로 띄우는 거다.
1. Dockerfile 생성
2. docker로 nginx 실행
3. default.conf proxy_pass 설정
4. 포트포워딩(ping pong 테스트)
- request(ping) -> container -> response(pong)
일단 nginx를 띄우기 위해 프로젝트를 하나 만들었다. 그 후 프로젝트 안에 dockerfile을 만들어서 넣어주었다.
1. Dockerfile 생성
# jdk21 Image Start
FROM openjdk:21
# 작업 디렉토리 설정
WORKDIR /app
# 인자 설정 - JAR_File
ARG JAR_FILE=build/libs/nginx_study-0.0.1-SNAPSHOT.jar
# JAR 파일을 작업 디렉토리로 복사
COPY ${JAR_FILE} /app/mung.jar
# 실행 명령어
ENTRYPOINT ["java", "-jar", "/app/mung.jar"]
2. docker로 nginx 실행
nginx를 실행하기 위해 일단 스프링 프로젝트를 jar로 빌드 후 도커에 띄워줬다.
docker build -t mung .
docker run --name spring -d -p 8081:8080 mung
그 후 nginx 또한 도커로 띄워줬다.
docker run --name nginx -d -p 80:80 nginx
그 다음 둘을 이어주기 위해 nginx-network라는 docker network를 생성하여 두 컨테이너를 이어줬다.
docker network connect nginx-network spring
docker network connect nginx-network nginx
3. default.conf proxy_pass 설정
server {
listen 80;
location / {
proxy_pass http://spring:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
위 설정을 통해 80포트로 오는 요청을 spring:8080으로 요청을 보낼 수 있게 했습니다.
@RestController
public class HealthCheckController {
@GetMapping("/ping")
public String ping() {
return "pong";
}
}
ping - pong 테스트를 위해 위와 같은 코드를 스프링 프로젝트에 작성했습니다.
4. 포트포워딩(ping pong 테스트)
이제 localhost/ping
으로 요청을 보내면 pong이라는 응답을 받는 것을 확인할 수 있습니다.
localhost 80포트로 요청을 보냈는데, localhost 8080의 spring에게 전달되어 ping이라는 응답을 받을 수 있습니다.