Loading...
본문 바로가기
👥
총 방문자
📖
0
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

🏫 인프라/서버

[AWS] Docker을 사용한 서버 배포

by tmi-t 2025. 5. 8.

 

서버에 배포를 하는 방법이 여러개 있겠지만

이번에는 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