> docker pull nginx
FROM openjdk:17-alpine
EXPOSE 8080
ARG JAR_FILE=exam-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} exam.jar
ENTRYPOINT ["java","-jar","/exam.jar"]
> docker build -t api1.0 .
nginx의 설정파일인 /etc/nginx/nginx.conf 수정하기
> vi nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream api { # api는 arbitrary.
server web01:8080; # docker-compose.yml에서 올라가는 컨테이너명으로 작성.
server api01:8080;
keepalive 1024;
}
server {
listen 80; # nginx를 통해 외부로 노출되는 port.
location / {
proxy_pass http://api/; # arbitrary한 upstream명
}
}
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
docker-compose.yml 작성 후 실행하기
> vi docker-compose.yml
version: '3'
services:
nginx:
container_name: nginx
image: "nginx"
ports:
- "80:80/tcp"
volumes:
#docker-compose.yml과 같은 레벨에 둔 nginx.conf를 mount.
- ./nginx.conf:/etc/nginx/nginx.conf
networks:
- backend
depends_on:
- web01
- api02
api01:
container_name: web01
image: "api1.0"
ports:
- "8080:8080"
networks:
- backend
api02:
container_name: api01
image: "api0.1"
ports:
- "8081:8080"
networks:
- backend
networks: # 가장 기본적인 bridge 네트워크
backend:
driver: bridge
> docker-compose up
반땅이라는 사이드 프로젝트를 진행하면서 EC2에 docker 환경으로 한 개의 서버만 운영하는 상태였는데 로드밸런싱과 무중단 배포를 위해 nginx를 적용하는 것을 정리하였습니다. 지금은 기본적인 동작만을 위한 설장만 되어있지만 기타 설정들이 더 많이 있는데 이것은 추후 학습을 통해 이어가도록 하겠습니다.