[Docker] Dockerfile로 이미지 생성 및 배포하기

예원·2022년 11월 14일
0

Docker

목록 보기
1/5

간단한 spring boot 프로젝트를 만든 뒤, 도커 이미지를 생성해서 배포해 볼 것이다.

docker Desktop 다운로드

먼저 docker 홈페이지에서 Desktop을 다운로드 받아 실행해준다.

docker 홈페이지

만약 아래와 같은 오류가 발생한다면 이 사이트를 참고하면 된다.

Spring Boot 프로젝트 만들기

요청이 왔을 때 hello 를 리턴해주는 간단한 프로젝트를 만들어보자.

@RestController
public class HelloController {

    @GetMapping("/")
    public String hello(){
        return "hello docker!";
    }
}

추가로 포트를 80으로 변경해주었다.

server.port=80

그 후 build 하여 jar 파일을 생성한다.

Dockerfile

Dockerfile 은 어떤 이미지를 만들건지, 우리 프로젝트에 어떤 것들이 필요한지를 명시하는 것이다.

프로젝트 최상위 루트에 Dockerfile을 생성한다.

그 후 다음과 같이 작성해준다.

FROM openjdk:11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Dockerfile에 정의한 순서대로 읽어서 Docker 데몬에 해당 명령어를 실행한다.

  • 처음에는 항상 FROM baseImage 로 시작해야 한다.
    docker 이미지를 만들때 처음부터 모든 걸 다 우리가 만드는 것이 아닌 baseImage 를 가지고 간다.
  • ARG 키워드는 Argument로 JAR_FILE_PATH라는 변수명에 jar 파일 경로를 담았다.
  • COPY 키워드는 경로에 있는 것을 app.jar 로 복사해온다.
  • ENTRYPOINT 를 통해 java를 실행하는 파라미터를 담았다.

Dockerfile에서 COPY하고 생성하는 것들은 Layer 시스템으로 구성되어 있기 때문에, 빈번히 변경되는 파일 일수록 마지막에 작성하는 것이 좋다.

자세한 내용은 여기서 확인할 수 있다.

docker 이미지 생성

docker build 명령어를 통해 docker 이미지를 생성할 수 있다.

> docker build -f Dockerfile -t yewonnoh/docker-test:0.0.1 .
  • -f 옵션은 어떤 도커 파일을 사용할 것인지 명시해준다.
  • -t 옵션을 통해 도커 이미지의 이름을 지정할 수 있다. tag를 붙일 경우 [이름]:[tag] 로 하면 된다.
  • 마지막의 . 은 build context 라고 불린다. 도커에서 필요한 파일의 위치를 알려주며, 최상위 루트에 있으므로 . 으로 작성해준다.

생성한 이미지는 docker images 명령어를 통해 확인 할 수 있다.

> docker images

docker 컨테이너 실행

생성한 이미지를 이용해 docker 컨테이너를 실행할 수 있다.

> docker run [-d] -p 80:80 yewonnoh/docker-test:0.0.1 
  • -d 옵션은 컨테이너가 백그라운드에서 실행되도록 해준다.
  • -p 옵션을 통해 포트를 지정해준다.

잘 실행되는 것을 확인할 수 있다.

docker ps 명령어를 통해 실행되고 있는 컨테이너를 확인할 수 있다.

> docker ps

docker 이미지 배포

docker 이미지를 배포하기 위해서는, 먼저 docker 사이트에 회원 가입 및 레파지토리를 생성해줘야 한다.

이미지를 배포하기 위해서는 docker hub에 생성한 레파지토리랑 매칭이 되어야한다.

Docker commands 부분을 확인하면 된다.
이름이 yewonnoh/docket-test 이여야 한다.

만약 이미지 이름이 다른 경우 아래와 같이 이름을 수정해준다.

> docker images                          
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
test-docker   latest    b510eb569dc2   5 minutes ago   672MB

> docker tag test-docker:latest yewonnoh/docker-test:0.0.1 

> docker images                                            
REPOSITORY             TAG       IMAGE ID       CREATED         SIZE
test-docker            latest    b510eb569dc2   6 minutes ago   672MB
yewonnoh/docker-test   0.0.1    b510eb569dc2   6 minutes ago   672MB

지정한 이름으로 이미지가 생성된 것을 볼 수 있다. 위에서 사용한 명령어는 이름을 그냥 수정해주는 것이 아니라 복사하면서 이미지 이름을 새로 생성한 것이기 때문이다.

이제 진짜 이미지를 배포하기 위해 docker 로그인을 해준다.

> docker login

이미지를 push 해준다.

> docker push yewonnoh/docker-test:0.0.1

Docker hub에 올라간 것을 확인할 수 있다.


reference

드림코딩 영상
Spring Boot, Dockerfile로 이미지 생성, 배포하기
[Docker] 스프링부트를 docker 이미지를 통해서 AWS EC2에 배포하기(DockerHub)

0개의 댓글