Docker 실습

남예준·2025년 11월 9일
  • 2개의 스프링 컨테이너를 생성하고 사용자가 service-a 컨테이너의 컨트롤러를 호출하면, service-b 컨테이너를 호출 합니다.
  • 최종 사용자에게 노출 되는 메시지는 아래와 같습니다.
    ”service-a: hi ###### service-b: hello”
  • 메시지 “service-b: hello” 는 service-b 컨테이너의 메시지입니다.

일단 그냥 모듈로 해서 띄워봤다.

그 다음 도커 컨테이너로 띄웠다

service-a, service-b

FROM openjdk:21

VOLUME /tmp

ARG JAR_FILE=build/libs/*.jar

COPY ${JAR_FILE} app.jar

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

이미지 생성 및 컨테이너 실행

# In service-b's directory
./gradlew clean bootJar

docker build -t img-service-b .

docker network create my-network

docker run -d --name service-b \
	 --network my-network \
	 -p 18081:8080 \
	 img-service-b

# In service-b's directory

./gradlew clean bootJar
 
docker build -t img-service-a .

docker run -d --name service-a \
	--network my-network \
	-p 18080:8080 \
	-e SERVICE_B_URL=http://service-b:8080 \
	img-service-a

그 다음은 docker-compose.yml을 써서 띄워봤다.

services:
  service-a:
    image: img-service-a
    ports:
      - "18080:8080"
    environment:
      - SERVICE_B_URL=http://service-b:8080
    depends_on:
      - service-b

  service-b:
    image: img-service-b
    ports:
      - "18081:8080"

networks:
  default:
    driver: bridge

💡

Docker Compose는 네트워크를 설정해주지 않았다!

Docker Compose는 자동으로 네트워크를 생성하며, 이 네트워크는 docker-compose.yml 파일이 있는 디렉토리의 이름을 기반으로 합니다. 네트워크의 이름은 다음과 같은 형식으로 생성됩니다

“directoryname_default”

0개의 댓글