IT/DevOps

[Docker] Docker Compose [2] (feat. network)

알 수 없는 사용자 2023. 11. 5. 17:22
반응형

Docker Compose

도커로 springBoot API 서버, mysql 서버를 같은 네트워크로 묶어서 띄운 후 호스트 PC에서 호출하는 예제


테스트 프로젝트

ex08.zip
0.15MB

springBoot server Dockerfile 😄

FROM openjdk:11-jdk-slim

WORKDIR /app

#현재 경로의 모든 파일 복사
COPY . .

# 개행문자 오류 해결 [unix와 window 시스템 차이], 이건 예제 소스 그대로 가져옴
RUN sed -i 's/\r$//' gradlew

# gradlew파일 파일 실행 권한 부여
RUN chmod +x ./gradlew
# gradlew 빌드 실행
RUN ./gradlew clean build

#환경변수 세팅
ENV JAR_PATH=/app/build/libs

#파일명 변경
RUN mv ${JAR_PATH}/*.jar /app/app.jar

#기본 명령어
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "app.jar"]

mysql Dockerfile 🤗

FROM mysql:8.0

#초기 데이터 세팅 위한 sql 복사
COPY init.sql /docker-entrypoint-initdb.d

#환경변수 세팅
ENV MYSQL_ROOT_PASSWORD=1234
ENV MYSQL_DATABASE=testdb
ENV MYSQL_HOST=%

#캐릭터셋 설정
CMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]

init.sql 😆

CREATE TABLE user_tb (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO user_tb (name) VALUES ('John');
INSERT INTO user_tb (name) VALUES ('Jane');

docker-compose.yml 🙂

version: '3'
services: 
  #mysql db 서비스명	
  db:
  	#빌드 옵션, 컨텍스트 패쓰, 도커파일명
    build: 
      context: ./docker-test-db
      dockerfile: Dockerfile
    #호스트에서 3306~3308포트 사용 중이라 포트포워딩 함  
    ports:
      - 3309:3306
    #데이터 저장하기 위해 호스트PC의 폴더와 볼륨 연결  
    volumes:
      - ./docker-test-db/store:/var/lib/mysql
    #네트워크명 설정ㄹ  
    networks:
      - network
      
  #스프링부트 서버	      
  server:
    build: 
      context: ./docker-test-server
      dockerfile: Dockerfile
    #종료 시 자동 재시작  
    restart: always
    #역시 포트포워딩
    ports:
      - 9797:8080
    #db가 먼저 올라와야 웹서버가 제대로 뜨니까 db 먼저 올라오고 나서 시작  
    depends_on:
      - db
    environment:
      #아래 URL의 //db이건 위의 mysql 서비스명을 참조하도록 설정 		
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/testdb?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_DRIVER: com.mysql.cj.jdbc.Driver
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: 1234
    #mysql 서비스와 같은 네트워크명  
    networks:
      - network
      
#네트워크 설정
networks:
  network:

개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

틀린 점 있을 경우 댓글 부탁드립니다.

reference: https://www.youtube.com/watch?v=uCRaB5ER3zI

반응형