간단한 spring boot 프로젝트를 만든 뒤, 도커 이미지를 생성해서 배포해 볼 것이다.
먼저 docker 홈페이지에서 Desktop을 다운로드 받아 실행해준다.
만약 아래와 같은 오류가 발생한다면 이 사이트를 참고하면 된다.
요청이 왔을 때 hello 를 리턴해주는 간단한 프로젝트를 만들어보자.
@RestController
public class HelloController {
@GetMapping("/")
public String hello(){
return "hello docker!";
}
}
추가로 포트를 80으로 변경해주었다.
server.port=80
그 후 build 하여 jar 파일을 생성한다.
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 로 시작해야 한다.ARG
키워드는 Argument로 JAR_FILE_PATH라는 변수명에 jar 파일 경로를 담았다.COPY
키워드는 경로에 있는 것을 app.jar 로 복사해온다.ENTRYPOINT
를 통해 java를 실행하는 파라미터를 담았다.Dockerfile에서 COPY하고 생성하는 것들은 Layer 시스템으로 구성되어 있기 때문에, 빈번히 변경되는 파일 일수록 마지막에 작성하는 것이 좋다.
자세한 내용은 여기서 확인할 수 있다.
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 run [-d] -p 80:80 yewonnoh/docker-test:0.0.1
-d
옵션은 컨테이너가 백그라운드에서 실행되도록 해준다.-p
옵션을 통해 포트를 지정해준다.잘 실행되는 것을 확인할 수 있다.
docker ps
명령어를 통해 실행되고 있는 컨테이너를 확인할 수 있다.
> docker ps
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)