서버에 배포를 하는 방법이 여러개 있겠지만
이번에는 Docker을 이용해서 서버에 배포하는 방법에 대해서 설명해보려고 합니다.
1. 환경 (사전준비)
Spring+Redis+Mysql 을 이용하여 Docker-compose와 Dockerfile을 작성하였습니다.
*Docker-compose (Resources파일에 위치)
services:
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: {root비밀번호}
MYSQL_DATABASE: {db명}
MYSQL_USER: {user명}
MYSQL_PASSWORD: {비밀번호}
ports:
- "3307:3306"
volumes:
- mysql-data:/var/lib/mysql
networks:
- backend
# 서비스명
redis_container:
# 사용할 이미지
image: redis:latest
# 컨테이너명
container_name: wit-redis
# 접근 포트 설정(컨테이너 외부:컨테이너 내부)
hostname: wit-redis
ports:
- 6380:6379
# 스토리지 마운트(볼륨) 설정
volumes:
- ./redis/data:/data
- ./redis/conf/redis.conf:/usr/local/conf/redis.conf
# 컨테이너에 docker label을 이용해서 메타데이터 추가
labels:
- "name=redis"
- "mode=standalone"
# 컨테이너 종료시 재시작 여부 설정
restart: always
command: redis-server /usr/local/conf/redis.conf
networks:
- backend
spring:
build:
context: ./../../../
dockerfile: Dockerfile
container_name: spring-app
ports:
- "8080:8080"
depends_on:
- mysql
- redis_container
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/{db명}
SPRING_DATASOURCE_USERNAME: {user명}
SPRING_DATASOURCE_PASSWORD: {비밀번호}
SPRING_REDIS_HOST: wit-redis
SPRING_REDIS_PORT: 6379
networks:
- backend
volumes:
mysql-data:
networks:
backend:
> 컨테이너는 크게 Spring,Redis, Mysql을 기준으로 생성하였으며 3가지 컨테이너를 backend라는 네트워크를 통해 묶었습니다.
*DockerFile
# Build Stage
FROM gradle:8.5-jdk17 AS build
WORKDIR /app
COPY gradle/wrapper/gradle-wrapper.properties gradle/wrapper/gradle-wrapper.properties
COPY gradle /app/gradle
COPY build.gradle settings.gradle /app/
RUN #gradle clean build -x test --no-daemon --refresh-dependencies
COPY --chown=gradle:gradle . .
RUN gradle build -x test --no-daemon
# Run Stage
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar" , "app.jar"]
코딩을 완료했으면 이제 Git clone을 통해서 코드를 가져올 수 있습니다!
저는 토큰을 이용한 방식으로 인증을 하였으며 코드는 다음과 같습니다.
git clone https://{사용자명}:{토큰 명}@{repo주소}
2. Docker설치
1.필요한 패키지 설치
sudo apt-get install -y ca-certificates curl gnupg lsb-release
2. Docker GPG키 추가
udo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
3. Docker 저장소 추가
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. Docker 엔진 설치
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5. 설치 확인
docker --version
docker compose version
3. Docker 작동
docker-compose위치로 이동한 뒤에 실행을 시켜주면 됩니다.
제 프로젝트에서 docker-compose파일은 /src/main/resources안에 있기 때문에 먼저 이동을 해줍니다.
cd /src/main/resources
밑에 명령어를 통해 빌드와 실행을 동시에 해줍니다.
docker-compose up --build
'🏫 인프라 > 서버' 카테고리의 다른 글
| [Server] AWS EC2에 Https프로토콜 적용 (0) | 2025.05.23 |
|---|---|
| [Server] 도메인 구매하기(가비아) (0) | 2025.05.20 |
| [AWS] EC2 프리티어 mysql설치 (0) | 2025.05.05 |
| [AWS] Ubuntu서버에 java설치하기 (1) | 2025.05.05 |
| [AWS] EC2 프리티어 사용하기 (0) | 2025.05.01 |