새벽의 블로그
< docker > image 다운로드, 생성 후 container 실행하기 본문
현재 진행하는 프로젝트 내용 기록입니다.
Spring boot로 Back-end 서버를 구성하고, 이를 Mysql 컨테이너와 연결하는 과정을 docker로 설정 중
Dockerfile 작성하기
필수 포함 요소
**FROM {컨테이너의 기본 이미지(베이스 이미지)를 지정}
COPY {호스트(로컬 시스템)의 파일 또는 디렉토리를 Docker 컨테이너로 복사}
ENTRYPOINT {docker 컨테이너가 시작될 때 실행할 기본 명령 = 실행 파일 작동 명령}
FROM openjdk:17-jdk
COPY build/libs/scentra-api-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]**
→ Spring Boot 애플리케이션은 실행 가능한 JAR 파일로 빌드되고, 이를 컨테이너 내부에 복사하여 (COPY) 컨테이너가 해당 프로그램을 실행시킬 수 있도록 한다.
도커로 컨테이너 구성하기
1. spring boot container
- Dockerfile 작성
- → Spring Boot 컨테이너의 Dockerfile은 프로젝트 루트 디렉토리에 작성하는 것이 일반적
- 명령어 실행
docker build -t {image 이름} .
--------------------------------
{docker build} : build 명령어
{-t} : 이미지 이름(태그 포함) 설정 옵션
{.} : 빌드 컨텍스트 지정, 현재 경로에서 Dockerfile에 필요한 파일 읽어와 빌드
- 이미지 이름: 해당 이미지의 이름.
- 태그(tag): 이미지를 버전별로 구분하기 위한 추가 식별자. (ex | mysql:8.4, mysql:latest)
2. db container ( = mysql container)
- Docker hub에서 image 다운로드(pull)
docker pull mysql:8.4
→ 이미 공식적으로 최적화된 이미지가 MySQL에서 제공되기 때문에, Dockerfile을 작성할 필요 없이 다운로드 후 바로 실행 가능합니다.
docker images
// 이미지 설치 확인
도커로 컨테이너 실행하기
1. 단일 컨테이너 실행 명령
예시
docker run -p 8080:8080 {실행 이미지 이름}
> docker run
- 새로운 컨테이너를 생성하고 실행하는 명령어
> -p 8080:8080
- 컨테이너와 호스트 간의 포트를 매핑
- 앞의 8080: 호스트(로컬 머신)의 포트 번호.
- 뒤의 8080: Docker 컨테이너 내부에서 애플리케이션이 사용하는 포트 번호.
- 결과적으로, 호스트의 8080 포트로 들어오는 요청은 컨테이너 내부의 8080 포트로 전달
> springboot-app
- 실행할 Docker 이미지의 이름
2. 다중 컨테이너 동시 실행 명령
여러 컨테이너로 구성되었을 때는, 이 컨테이너들을 함께 실행시켜 어플리케이션을 작동할 수 있도록 작업해야한다.
⇒ 여기에는 docker network, docker compose 방식이 있다.
방법 1: Docker Network
- 여러 컨테이너 간 통신을 위해 Docker 네트워크를 생성하고 각 컨테이너를 같은 네트워크에 연결.
- 네트워크 생성:
- MySQL 컨테이너 실행:
- Spring Boot 컨테이너 실행:
- Spring Boot 애플리케이션에서 MySQL 컨테이너 접근:
방법 2: Docker Compose
- Docker Compose는 여러 컨테이너를 한 번에 관리할 수 있는 도구입니다.
- 컨테이너 간 네트워크, 환경 변수 설정을 YAML 파일로 정의.
- docker-compose.yml 파일 작성
- compose 명령어 실행
다음 포스팅에는 팀 공유 DB에 대해서 논의 후,
컴포즈까지 해보도록 하겠습니다.