Docker 를 사용하여 Service 분리해보기(2) - 도커 설치 및 서비스 실행

홍현기·2025년 3월 31일
0

앞서

전 게시물에선 도커에 개념에 대해 알아봤다. 이번엔 window에 도커를 사용할 수 있도록 설정 작업을 진행하고, 도커 설치 및 애플리케이션 서비스 띄우는 작업까지 해보도록 하겠다.

시나리오

  • 작성자는 두 개의 JAR 파일인 app1.jar와 app2.jar를 각각 다른 컨테이너에서 실행하고 관리하고자 한다. 이를 통해 각 애플리케이션을 독립적으로 운영할 수 있으며, 각 컨테이너의 설정이나 환경을 별도로 구성하여 관리할 수 있다.
  • 포트 설정:
    • app1.jar는 컨테이너 내부에선 8080 포트에서 실행되며, 외부에서는 80 포트로 접근
    • app2.jar는 컨테이너 내부에선 8081 포트에서 실행되며, 외부에서는 81 포트로 접근

Window 환경에서 docker 설치

  • 아래 블로그를 보고 따라하면 된다.

https://mz-moonzoo.tistory.com/40

출처: https://mz-moonzoo.tistory.com

도커 컨테이너 생성

1. jar 파일이 위치할 디렉토리 생성 및 jar 파일 위치 이동

> cd ~
> mkdir app1
> mkdir app2
> mv <app1.jar 위치>/app1.jar ~/app1
> mv <app2.jar 위치>/app1.jar ~/app2

2. Dockerfile 준비

각 애플리케이션을 도커화하기 위해 Dockerfile을 준비해야 한다. 도커로 컨테이너를 생성할때 도커는 기본적으로 dockerfile 이라는 명에 파일을 참조하길 기대하기 때문에 파일명은 dockerfile로 꼭 생성하여야 한다.

> cp <app1 디렉토리 위치>
> vim dockerfile

[dockerfile]
# app1/Dockerfile
FROM openjdk:17-jdk-slim
WORKDIR /app1
COPY app1.jar .  # JAR 파일을 복사
EXPOSE 80
CMD ["java", "-jar", "app1.jar"]
-----------------------------------------------------------------------
> cp <app2 디렉토리 위치>
> vim dockerfile

[dockerfile]
# app2/Dockerfile
FROM openjdk:17-jdk-slim
WORKDIR /app2
COPY app2.jar .  # JAR 파일을 복사
EXPOSE 81
CMD ["java", "-jar", "app2.jar"]
  • FROM openjdk:17-jdk-slim: OpenJDK 17 버전의 최소 크기 이미지를 기반으로 하여 Java 애플리케이션을 실행할 수 있는 환경을 설정
  • WORKDIR /app1: 컨테이너 내부에 app1 디렉토리를 만들어 그 안에 app1.jar를 위치시킨다.
  • COPY app1.jar: app1.jar 를 참조한다.
  • EXPOSE 80: 컨테이너 내부에 80포트로 띄운다.
  • CMD ["java", "-jar", "app1.jar"]: 컨테이너를 띄울때 app1.jar를 실행시키는 명령어다

3. Dockerfile 이미지 빌드

# app1 디렉토리로 이동 후
> cd app1
> docker build -t app1-image .

# app2 디렉토리로 이동 후
> cd ../app2
> docker build -t app2-image .

4. Dockerfile 컨테이너 실행

# app1 컨테이너 실행 (80 포트)
> docker run -d -p 80:8081 --name app1-container app1-image

# app2 컨테이너 실행 (81 포트)
> docker run -d -p 81:8082 --name app2-container app2-image

5. Dockerfile 컨테이너 확인

> docker ps -a

  • a 명령어는 모든 컨테이너를 표시해준다. 뺴게되면 현재 실행중인 컨테이너만 표시해준다.

6. Dockerfile 컨테이너 접속

> docker exec -it <app1 컨테이너 > /bin/bash
  • 접속 후 실행중인 포트 확인해보면 컨테이너 내부엔 8080으로 띄워져 있다.

  • 컨테이너를 나와서 (exit 치면 나옴) 포트 확인해보면 80으로 띄워져 있다.

API 호출

  • 해당 jar 파일은 내가 만들어 놓은 서비스 이다. (spring-security + JWT 이용 로그인: https://korean-hong.tistory.com/12)
  • 80포트로 호출했을때 API가 잘 호출되는것을 확인 할 수 있다. (기본포트가 80이므로 생략가능)

마치며

이렇게 도커를 설치하고 또 두개의 서비스를 각각 컨테이너에 띄워보았다. 아마 더 다양한 옵션과 기능들을 제공하겠지만, 이번엔 가장 기본적인 기능만 구현해봤다.

0개의 댓글