이번 진행했었던 과제에 maven 플러그인을 사용하여 Spring Boot 애플리케이션을 Docker 이미지로 배포하는 내용이 포함되어 있었는데,
소스를 조금 이해하고자 빌드 환경을 공부하려 한다.
그 전에 Docker를 왜 쓰는지 와닿지 않아서 찾아봤는데 인프런에 잘 설명해준 영상이 있어 함께 포스팅한다.
정말 너~무 너무 잘 나와있어서 감사하다.
제목도 딱 내가 하고 싶던 질문(왜 굳이 도커를 써야하나요?)ㅋㅋㅋㅋㅋㅋ
시간되면 강의도 들어봐야지.
도커 파일 == 서버 운영 기록 도커 이미지 == 도커 파일 + 실행 시점 도커 컨테이너 == 도커 이미지 + 환경 변수 |
- 도커 파일이 서버 운영 기록이라면, 도커 이미지는 운영 기록을 실행할 시점이다.
- 서버 간 구성 차이로 인한 문제 해결하기 위해 서버의 운영 기록을 코드화시킴 (=도커파일)
- 실행 시점에 상관 없이 구성 시점을 고정할 수 있다.
- 도커 이미지로는 언제든지 똑같은 형태의 서버를 실행(=도커 컨테이너)할 수 있다.
- 서버 코드화 장점 정리
-
- 서버 제작 과정에 견고함과 유연성을 더할 뿐 아니라
- 다른 이가 만든 서버를 소프트웨어 사용하듯 가져다 쓸 수 있고
- 여러 대에 배포할 수 있는 확장성
-
우리 솔루션은 무엇보다도 여러 대의 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
그 외 참조
https://sarc.io/index.php/cloud/1856-spring-boot-docker
https://taes-k.github.io/2020/09/13/docker-2/
'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 |