Time does not change us. It just unfolds us.

Web/Spring Boot

[Spring Boot]Docker 이미지 빌드

소젬 2021. 10. 27. 14:28

이번 진행했었던 과제에 maven 플러그인을 사용하여 Spring Boot 애플리케이션을 Docker 이미지로 배포하는 내용이 포함되어 있었는데,

소스를 조금 이해하고자 빌드 환경을 공부하려 한다.

그 전에 Docker를 왜 쓰는지 와닿지 않아서 찾아봤는데 인프런에 잘 설명해준 영상이 있어 함께 포스팅한다.

정말 너~무 너무 잘 나와있어서 감사하다. 

제목도 딱 내가 하고 싶던 질문(왜 굳이 도커를 써야하나요?)ㅋㅋㅋㅋㅋㅋ

시간되면 강의도 들어봐야지.

 

https://youtu.be/3FcFL2C3ME8

https://www.44bits.io/ko/post/why-should-i-use-docker-container#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0-%EC%99%9C-%EB%8F%84%EC%BB%A4docker%EB%A5%BC-%EC%8D%A8%EC%95%BC%ED%95%98%EB%82%98%EC%9A%94

 

왜 굳이 도커(컨테이너)를 써야 하나요? - 컨테이너를 사용해야 하는 이유

컨테이너는 서버 애플리케이션을 배포하고 서버를 운영하는 표준적인 기술이 되어가고 있습니다. 하지만 처음 사용해본다면 그 장점이 잘 와닿지 않을 수도 있습니다. 왜 굳이 도커 컨테이너를

www.44bits.io

 

도커 파일 == 서버 운영 기록
도커 이미지 == 도커 파일 + 실행 시점
도커 컨테이너 == 도커 이미지 + 환경 변수
  • 도커 파일이 서버 운영 기록이라면, 도커 이미지는 운영 기록을 실행할 시점이다.
  • 서버 간 구성 차이로 인한 문제 해결하기 위해 버의 운영 기록을 코드화시킴 (=도커파일)
  • 실행 시점에 상관 없이 구성 시점을 고정할 수 있다.
  • 도커 이미지로는 언제든지 똑같은 형태의 서버를 실행(=도커 컨테이너)할 수 있다.
  • 서버 코드화 장점 정리
      1. 서버 제작 과정에 견고함과 유연성을 더할 뿐 아니라
      2. 다른 이가 만든 서버를 소프트웨어 사용하듯 가져다 쓸 수 있고
      3. 여러 대에 배포할 수 있는 확장성

우리 솔루션은 무엇보다도 여러 대의 IPC에 배포해야 하고, 여러 앱을 개발하는 사람들이 협업하는 환경이여서 도커 사용이 매우 효율적인 것 같다.

 

1) Dockerfile 작성

ARG             application_name=

...

ENTRYPOINT      ["java", "-Djava.net.preferIPv4Stack=true", "-Dfile.encoding=UTF-8", "-Xms512m", "-Xmx512m", "-jar","--spring.config.location=optional:./conf/application.yml"]

 

Dockerfile을 스프링 부트의 기본 디렉토리에 저장한 후 명령어를 통해 Docker Image build

docker build -t springio/gs-spring-boot-docker

docker build [OPTION] <Dockerfile 이 있는 PATH> -> 해보지 않음

 

Dockerfile은 나만의 도커 이미지를 만들기 위해 사용되는 파일로, 이미지화를 위해 프로젝트 정보를 명시하고 이미지를 어떻게 만들건지 정의된다.

Dockerfile 내부는 이미지를 만들기 위해 사용되는 명령어들로 구성되어 있고 순서대로 실행되어 이미지를 만들게 된다.

Dockerfile은 프로젝트 최상단 path에 생성한다.

(해석을 위한 명령어들은 아래 링크 참조)

 

2) pom.xml 수정

<dependency>
	<groupId>com.github.docker-java</groupId>
    <artifactId>docker-java</artifactId>
    <version>3.2.11</version>
</dependency>

 

 

3) DockerClient 작성

    @Bean
    public DockerClient dockerClient() {
    
        DefaultDockerClientConfig conf = DefaultDockerClientConfig.createDefaultConfigBuilder()
                                                                    .withDockerHost(System.getProperty("os.name").startsWith("Windows") ? "tcp://localhost:1010" : "unix:///var/run/docker.sock")
                                                                    .build();
        return DockerClientBuilder.getInstance(conf).build();
    }

 

 

더 나아가 시간이 될 때 Java의 Docker API Client와 그 함수들에 대한 내용을 살펴보자

https://www.baeldung.com/docker-java-api

 

A Docker Guide for Java | Baeldung

A quick and practical guide to Docker Client for Java.

www.baeldung.com

 

그 외 참조

https://sarc.io/index.php/cloud/1856-spring-boot-docker

 

Spring Boot 애플리케이션 Docker 이미지 빌드하기

[{"id":"16","listid":"1","parentid":"0","videosource":"youtube","videoid":"KiwjxNKXfxY","imageurl":"https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/default.jpg,120,90;https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/mqdefault.jpg,320,180;https:\/\/i.ytimg.com\/vi\/KiwjxNKX

sarc.io

https://velog.io/@skygl/Docker-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EA%B0%80%EC%9D%B4%EB%93%9C%EC%9D%98-Docker-%EC%97%B0%EB%8F%99%ED%95%98%EB%8A%94-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

[Docker] 스프링 부트 사이트 가이드의 Dockerfile과 이미지 빌드 명령어 이해하기

스프링 부트의 공식 사이트 가이드에서 스프링 부트와 Docker 를 연동하기 위해 다음과 같은 Dockerfile 포맷을 올려놓았습니다. https://spring.io/guides/gs/spring-boot-docker/ 위의 Dockerfile을 스프링 부트의

velog.io

https://taes-k.github.io/2020/09/13/docker-2/

 

Docker로 Spring 서비스를 운영 해보자 (Docker-2)

Docker image 만들기 Docker로 서비스를 운영하기 전, 가장먼저 해야 할 일은 Docker image를 만드는 것 입니다. 이번 포스팅에서는 Docker 운영배포를 위한 예제로써, Spring boot MVC로 구성한 간단한 User API

taes-k.github.io

 

'Web > Spring Boot' 카테고리의 다른 글

[SpringBoot]Logging과 Log Level  (0) 2021.11.25
[Spring]@Autowired  (0) 2021.11.24
[SpringBoot]banner.txt만들기  (0) 2021.11.22
[Spring Boot]Docker-compose  (0) 2021.10.27