k8s & Docker

DockerHub를 사용해 Container로 어플리케이션 실행

stophyeon 2024. 2. 2. 13:23
728x90

Docker Container에서 실행하는 이유

개발한 Application을 로컬 환경에서 실행하는 것으로 비즈니스 로직의 검증을 했다면 프론트 개발자에게 백엔드 서버를 제공하기 위해서 컨테이너에서 Applicaiton을 동작시켜야 합니다. 컨테이너 환경의 이점은 운영체제와 같이 다른 환경에서도 Application이 동작될 수 있다는 것입니다.
단, 실제 배포가 아니기 때문에 서버를 사용하기 위해서는 사용자가 Docker Hub에서 배포된 이미지를 다운 받아서 직접 컨테이너를 실행해야 합니다.

 

컨테이너 생성

컨테이너를 생성하기 위해서 개발한 Application을 실행할 수 있는 .jar파일을 만들어야 합니다.
gradle을 기준으로 설명하겠습니다.
컨테이너 생성 단계는 아래와 같습니다.
1. Jar파일 생성
2. Dockerfile작성
3. Dockerfile을 사용해 Docker Image 빌드
4. 빌드한 이미지로 Container 생성

bootJar을 실행해서 jar파일을 생성할 수 있습니다. 이 때 멀티 모듈구조로 개발을 하셨다면 
build.gradle에 bootJar.enable=false로 되어있으신 분들이 있을 것입니다.
이때는 jar을 실행해서 jar파일을 생성할 수 있지만 이렇게 생성한 jar파일에는 dependency와 같은
설정들이 포함되어있지 않습니다. 개발자가 직접 dependency를 넣어줘야 합니다.

bootJar을 실행했다면 위 처럼 build/libs경로에 jar파일이 생성됩니다.
이 때 Jar을 실행해서 .jar파일을 생성했다면 파일의 이름 끝에 plain이 들어갑니다.

 

이제 Dockerfile을 작성해야 합니다. Dockerfile의 작성법은 여기에 있습니다.
 

Docker - Container생성

Docker를 배우는 이유 Docker는 Container를 빌드, 배포, 실행, 업데이트와 같은 관리하는 기능을 합니다. k8s의 기본 단위인 PoD는 Container로 구성되어있기 때문에 Docker를 배우고 난 뒤에 k8s를 배워야 하

stophyeon.tistory.com

 

작성한 Dockerfile로 이미지를 빌드하면 위와 같이 DockerHub UI에 이미지들이 표시됩니다.
이미지를 빌드하는 명령어는 아래와 같습니다

 

docker build -t <이미지 이름>:<Tag> <Dockerfile의 상대경로>

여기서 이미지이름은 사용자의 마음대로 해도되지만 만약 DockerHub 레포지터리에 이미지를 push할것이라면
이미지의 이름을 레포지터리 이름과 같게 해야합니다.

MSA구조로 Application을 개발했다면 각 서비스나 모듈마다 이미지를 빌드하고 컨테이너를
각각 실행 시켜야 합니다. 하지만 docker-compose 파일을 사용하면 여러 컨테이너들을 하나의 파일로
관리할 수 있습니다.
docker-compose.yml파일의 속성값들은 docker run 명령어의 option들과 같습니다

 

version yaml파일 포맷의 버전을 선언합니다
services 생성할 container들의 설정값을 선언합니다.
services.[container 이름] 생성할 container의 이름을 선언합니다.
services.[container 이름].image container를 생성할 이미지를 선언합니다.
services.[container 이름].networks 컨테이너가 속할 네트워크를 선언합니다
services.[container 이름].ports: <외부포트>:<내부포트> 컨테이너의 포트매핑을 선언합니다
services.[container 이름].depends_on 해당 컨테이너의 의존관계를 선언합니다.
선언되 컨테이너들이 생성된 뒤에 컨테이너를 생성합니다.
위의 속성값들외에도 많은 속성값들이 있습니다.

docker compose파일을 작성했다면
docker compose up으로 컨테이너들을 실행 시킬 수 있습니다.
만약 docker compose 파일을 수정하고 적용 시키려면 docker compose up -d 를 통해
업데이트를 해서 컨테이너들을 실행시킬 수 있습니다.

'k8s & Docker' 카테고리의 다른 글

k8s에서 Object  (0) 2024.01.19
Docker - Container생성  (1) 2024.01.18
Worker Node & PoD생성 과정  (0) 2024.01.17
Kubernetes Cluster 구성 요소 - Master Node  (0) 2024.01.14
컨테이너 인프라 환경의 구성 요소  (0) 2024.01.11