새벽의 블로그

< docker > image 다운로드, 생성 후 container 실행하기 본문

DevOps

< docker > image 다운로드, 생성 후 container 실행하기

dxwny 2024. 11. 21. 18:22

현재 진행하는 프로젝트 내용 기록입니다.

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

  1. Dockerfile 작성
  2. Spring Boot 컨테이너의 Dockerfile은 프로젝트 루트 디렉토리에 작성하는 것이 일반적
  3. 명령어 실행
 docker build -t {image 이름} .

--------------------------------

{docker build} : build 명령어 
{-t} : 이미지 이름(태그 포함) 설정 옵션
{.} : 빌드 컨텍스트 지정, 현재 경로에서 Dockerfile에 필요한 파일 읽어와 빌드 
  • 이미지 이름: 해당 이미지의 이름.
  • 태그(tag): 이미지를 버전별로 구분하기 위한 추가 식별자. (ex | mysql:8.4, mysql:latest)

2. db container ( = mysql container)

  1. 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 네트워크를 생성하고 각 컨테이너를 같은 네트워크에 연결.
    1. 네트워크 생성:
    2. MySQL 컨테이너 실행:
    3. Spring Boot 컨테이너 실행:
    4. Spring Boot 애플리케이션에서 MySQL 컨테이너 접근:

방법 2: Docker Compose

  • Docker Compose는 여러 컨테이너를 한 번에 관리할 수 있는 도구입니다.
  • 컨테이너 간 네트워크, 환경 변수 설정을 YAML 파일로 정의.
    1. docker-compose.yml 파일 작성
    2. compose 명령어 실행

 

 

다음 포스팅에는 팀 공유 DB에 대해서 논의 후,

컴포즈까지 해보도록 하겠습니다.