우리가 개발한 프로젝트는 localhost에서 사용한다. 즉, 내 컴퓨터에서만 돌아가기 때문에 외부 사람들이 접근할 수 없다.
다르 사람들이 우리 서비스에 접근해서 이용하게 하기 위해서는 '배포'라는 과정이 필요한 것이다.
클라우드 환경에서 배포를 하면 물리적 서버를 구매하고 관리할 필요없이
필요한 만큼의 컴퓨팅 파워, 스토리지, 서비스 등을 원하는 시점에 즉시 사용할 수 있으며, 더 이상 필요하지 않은 리소스는 즉시 해제 가능하다.
대표적인 클라우드 서비스 제공업체 : AWS(Amazon Web Services), GCP(Google Cloud Platform), Azure(Microsoft Azure)
Azure(Microsoft Azure) : Microsoft 솔루션 특화
GCP(Google Cloud Platform) : Google의 강점인 데이터 분석과 머신러닝 서비스를 강조 → AI와 머신러닝에 대해 특화
AWS(Amazon Web Services) : 가장 오래된 클라우드 제공업체로서 가장 광범위하게 사용, 가장 많은 서비스 제공

도커 파일은 docker 에서 이미지를 생성하기 위한 용도로 작성하는 파일이다.
만들 이미지에 대한 정보를 기술해 둔 템플릿(template) 이라고 보면 된다.
도커 이미지는 도커 파일을 빌드한 형태로, 컨테이너를 생성하기 위한 파일 시스템과 실행할 애플리케이션의 소스 코드, 라이브러리, 환경 설정 등의 모든 것을 포함한다.
이미지는 읽기 전용으로 구성되어 있으며, 도커 컨테이너를 시작할 때 해당 이미지가 기반이 된다.
이미지는 여러 개의 레이어로 구성되어 있는데, 여기서 레이어란 기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드 받는 방법이 아닌 해당 파일을 추가하기 위한 개념이다.
각 레이어는 변경 사항이 있는 파일 또는 설정을 포함하고 있으며, 이들 레이어는 상속 구조를 가지고 쌓여 최종 이미지를 구성한다. 이 레이어 구조로 인해 이미지 간에 공통된 부분을 효율적으로 공유할 수 있다.
도커 컨테이너는 도커 이미지를 실행한 상태로 응용 프로그램의 종속성과 함께 자체를 패키징하거나 캡슐화하여, 각 컨테이너는 독립된 환경에서 실행됨으로써 하나의 컨테이너의 변화나 문제가 다른 컨테이너에 영향을 주지 않는다.
컨테이너는 생성되고 실행되면 컨테이너의 파일 시스템은 읽기/쓰기가 가능한 상태로 변하며, 해당 컨테이너의 애플리케이션을 실행하게 된다. 애플리케이션 실행이 끝나면 컨테이너는 종료되며, 해당 컨테이너에서 발생한 변경 사항은 컨테이너가 삭제되면 사라진다.
Docker Hub는 Docker 이미지의 공식 저장소로, 컨테이너 이미지를 저장하고 공유할 수 있는 플랫폼이다.
Docker Hub에서 제공하는 공식 이미지(Official Image)를 그대로 사용할 때는 Dockerfile 없이 바로 실행할 수 있다.
예) ✔ mysql:latest는 이미 Docker Hub에서 제공하는 완성된 이미지이므로 Dockerfile 없이 실행 가능
하지만 기본 mysql:latest 이미지를 가져오되, 미리 데이터베이스를 생성하거나 설정 파일을 변경해야 하는 경우에는 Dockerfile을 작성해서 COPY나 RUN 명령어로 초기 설정을 추가할 수 있다.
MySQL 같은 경우는 이미 Docker Hub에서 제공하는 이미지가 있지만 (mysql:latest) Spring Boot는 개발자가 직접 개발한 코드이기 때문에, Docker Hub에서 가져올 수 없다.
Spring Boot 애플리케이션을 실행하기 위해서는 Dockerfile을 통해 소스 코드 → 실행 가능한 JAR 파일로 변환해야 한다.
Dockerfile은 Docker 이미지를 만들기 위한 설정 파일로 컨테이너 환경을 정의하고, 애플리케이션을 실행할 수 있도록 설정한다.
# 1. 베이스 이미지 설정 (JDK 환경 제공)
FROM openjdk:17
# 2. 작업 디렉토리 설정
WORKDIR /app
# 3. JAR 파일 복사 (Spring Boot 빌드 결과물)
COPY target/myapp.jar app.jar
# 4. 컨테이너 실행 시 Spring Boot 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "app.jar"]

1️⃣ Docker 이미지 빌드
docker build -t my-spring-app .
✔ my-spring-app 이라는 이름으로 Docker 이미지 생성
2️⃣ 컨테이너 실행
docker run -d -p 8080:8080 my-spring-app
✔ 8080 포트에서 실행되도록 컨테이너 시작
docker-compose는 여러 개의 컨테이너를 함께 실행하고 관리하는 도구이다.
보통 하나의 애플리케이션을 실행할 때, 데이터베이스, 캐시 서버, 메시지 큐 등과 함께 실행해야 할 경우 사용한다.
✔ 여러 개의 컨테이너를 한 번의 명령어로 실행 가능
✔ 컨테이너 간 네트워크 자동 설정 (서로 연결 가능)
✔ 환경 변수 및 설정값을 쉽게 관리 가능
✔ YAML 파일(docker-compose.yml)을 사용하여 설정
version: "3.8" # 사용 버전
services: # 실행할 컨테이너 정의
app: # 애플리케이션 서비스
build: . # 현재 디렉토리에서 Dockerfile 빌드
ports:
- "8080:8080" # 호스트와 컨테이너의 포트 매핑
depends_on:
- db # db 서비스가 먼저 실행된 후 app 실행됨
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
db: # 데이터베이스 서비스
image: mysql:latest # MySQL 공식 이미지 사용
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
ports:
- "3306:3306" # 호스트와 컨테이너의 MySQL 포트 매핑
안녕하세요 지금쯤 프로젝트 제작에 들어갈시기인거같은데요 지금까지의 부트캠프만족도와 취업에 큰 조움이 되는 것같은지 등 어떤 프로젝트를 목표로 하는지 궁금합니다! 이번에 2기를 듣게 되어서요