본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
app, database, redis 도커파일 각각 작성
FROM openjdk:11
ARG JAR_FILE=build/libs/app.jar
COPY ${JAR_FILE} ./app.jar
ENV TZ=Asia/Seoul
ENTRYPOINT ["java","-jar","./app.jar"]
FROM redis:6
ENV TZ=Asia/Seoul
FROM mariadb:10
ENV TZ=Asia/Seoul
도커를 이용하여 스프링 부트 애플리케이션 싱글 컨테이너 생성
docker run 명령어를 통해 컨테이너 생성 및 시작
docker run application-project-test -p 8080:8080
-p : 컨테이너는 기본적으로 외부와 격리되어 있기 때문에 호스트와 컨테이너 port 포워딩 처리
개발 환경과 운영 환경 profile 분리하기
- Spring Profile는 어플리케이션 설정을 특정 환경에서만 적용되게 하거나 환경 별(local, develop, production)로 다르게 적용할 때 사용 (application-local.yaml, application-prod.yaml) / application-{profile}.yaml
- Spring boot는 어플리케이션이 실행될 때 자동으로 application.properties 또는 application.yaml을 찾는다
- Spring boot 버전 2.4 이전과 이후 설정 방법이 다르므로 주의
도커 컴포즈 파일 작성(docker-compose-local.yaml)
version: #도커 컴포즈 버전
services: #이곳에 실행하려는 컨테이너들을 정의
pharmacy-reccomendation-app: # 서비스명(네트워크 호스트명)/같은 네트워크에 속한 컨테이너끼리 서비스 명으로 접근 가능
container_name: #컨테이너 이름
build: #Dockerfile이 있는 위치
depends_on: #특정 컨테이너에 대한 의존관계
image: #컨테이너 생성할 때, 사용할 도커 이미지 지정
environment: #환경 변수
volumes: #호스트 디렉토리:컨테이너 디렉토리
ports: #접근 포트 설정(컨테이너 외부:컨테이너 내부)/docker run -p 옵션과 같으며 개방할 포트 지정
restart: #컨테이너 실행 실패하는 경우 재시작 여부
- 로컬에서 사용할 DB, Redis 도커파일 작성 후 docker-compose 파일 작성
- docker-compose -f docker-compose-local.yaml up //실행
- docker-compose -f docker-compose-local.yaml down //중지 및 컨테이너 정리
version: "3.8"
services:
pharmacy-reccomendation-app:
container_name: pharmacy-recommendation-redis
build:
dockerfile: Dockerfile
context: ./redis
image: yoonms5319/pharmacy-recommendation-redis
ports:
- "6379:6379"
pharmacy-reccomendation-database:
container_name: pharmacy-recommendation-database
build:
dockerfile: Dockerfile
context: ./database
image: yoonms5319/pharmacy-recommendation-databse
environment:
- MARIADB_DATABASE=pharmacy-recommendation
- MARIADB_ROOT_PASSWORD=${SPRING_DATASOURCE_PASSWORD}
volumes:
- ./database/config:/etc/mysql/conf.d
ports:
- "3306:3306"
docker mariaDB 설정
- 한글 깨짐 현상을 막기 위해 추가 설정이 필요
- docker mariaDB 컨테이너 내에 /etc/mysql/conf.d 경로에 .cnf 설정 파일을 넣어주면 해당 내용을 바탕으로 설정이 초기화
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
[mysqldump]
default-character-set=utf8mb4
DB 및 Redis 설정 추가(application.yaml 로컬 환경)
spring:
config:
activate:
on-profile: local
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/pharmacy-recommendation
username: ${SPRING_DATASOURCE_USERNAME}
password: ${SPRING_DATASOURCE_PASSWORD}
redis:
host: localhost
port: 6379
jpa:
hibernate:
ddl-auto: create
show-sql: true
Docker Compose 환경변수 설정 방법
- Docker compose에서 환경 변수 정보들을 분리하여 별도의 파일로 구성할 때 간편한 방법은 Compose 파일이 위치한 경로에 .env 파일을 구성
- 작성한 .env 파일은 별다른 설정 없이 Docker Compose에 바로 반영
- 비밀정보가 코드에 노출되지 않도록 .gitignore에 .env 파일 추가
docker-compose config //.env 파일 자동 반영
docker-compose up //이미지 없을 때 이미지 빌드 후 컨테이너 실행(이미지 존재하는 경우 해당 이미지 사용)
docker-compose up --build //이미지가 있든 없든 재빌드 하여 컨테이너 실행
// .env 파일(.gitignore에 추가할 것)
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=1234
- 추후 암호화를 통해 더 높은 보안을 제공하는 오픈소스 HashiCorp Vault 고려
'패스트캠퍼스 강의' 카테고리의 다른 글
[29일차] 50일 포트폴리오 챌린지 (0) | 2023.09.05 |
---|---|
[28일차] 50일 포트폴리오 챌린지 (0) | 2023.09.04 |
[26일차] 50일 포트폴리오 챌린지 (0) | 2023.09.02 |
[25일차] 50일 포트폴리오 챌린지 (0) | 2023.09.01 |
[24일차] 50일 포트폴리오 챌린지 (1) | 2023.08.31 |