1. Dockerfile이 있는데 빌드 서버가 필요할까?
- 여러 개발자가 협업하는 경우 한 개발자가 파일을 하나 빼고 푸시한다면 빌드 서버에서 빌드가 실패할 것이다.
- 대부분의 프로그래밍 언어는 프로젝트 빌드를 위해 다양한 도구를 필요로 한다.
- 이 과정에서 유지 보수를 위한 큰 오버헤드가 발생한다.
- 도커를 이용해 빌드 툴체인을 한 번에 패키징해 공유할 수 있다.
- 툴체인 : 소스 코드를 타깃 장치에서 실행할 수 있는 실행 파일. 컴파일러, 링커 등을 포함하는 컴파일 도구의 집합
- 개발에 필요한 모든 도구를 배포하는 Dockerfile 스크립트를 작성해 이미지로 만든다.
- 애플리케이션 패키징을 위한 Dockerfile 스크립트에서 이 이미지를 이용해 소스 코드를 컴파일해 애플리케이션을 패키징한다.
2. 자바 애플리케이션을 빌드하는 Dockerfile 생성
- Test.java 파일을 생성한다.
public class Test {
public static void main(String[] args) {
System.out.println("Hello Docker!");
}
}
- 이미지 빌드에 필요한 Dockerfile을 생성한다.
- Dockerfile은 확장자가 없고, 항상 Dockerfile 이름이어야 한다.
- 만약 다른 이름을 사용하고 싶다면 -f 옵션을 사용한다.
FROM openjdk:8-jdk
COPY Test.java .
RUN javac Test.java
CMD ["java", "Test"]
- FROM : 도커 이미지의 바탕이 될 베이스 이미지를 지정한다.
- COPY : 호스트 머신에 있는 Test.java가 컨테이너 안의 디렉터리로 복사횐다.
- RUN : javac 명령어를 사용하여 Test.java를 컴파일 한다.
- CMD : java 명령어를 사용하여 컴파일 된 Test.class 파일을 실행한다.
- 현재 디렉토리의 경로를 Dockerfile이 존재하는 디렉토리의 경로로 옮긴다.
- Test.java 파일과 Dockerfile의 위치를 같게 했다.
- docker build -t hello_docker . 명령어로 hello_docker 라는 이미지 이름으로 현재 디렉토리에 있는 Dockerfile을 찾아 이미지를 생성한다.
- docker run hello_docker 명령어로 이미지를 실행시키면 자바 코드가 실행된다.
2. Maven을 사용해 자바 애플리케이션을 빌드하는 Dockerfile 생성
2번의 제목은 원래 'Maven을 사용해 자바 애플리케이션을 빌드하는 Dockerfile 생성'이었다.
'Maven을 사용해' 이 부분이 1번 목차의 내용에 의해 코드가 아닌 주변 환경들의 세팅을 이미지로 생성하고자 한 것 같다.
교재의 예제를 따라 실행해봤다.
https://github.com/sixeyed/diamol/tree/master/ch04/exercises/image-of-the-day
위 링크에서 해당 폴더만 클론했다.
그리고 위에서 한 것 처럼 해당 경로로 이동하여 이미지를 생성했다.
컨테이너 간 통신에 사용되는 도커 네트워크를 생성했다.
maven 이미지로 컨테이너를 생성하고, 80번 포트를 호스트 컴퓨터를 통해 연결한 뒤, nat 네트워크에 컨테이너를 접속했다.
http://localhost:8080/image에 접속하면 NASA에서 제공하는 오늘의 사진에 대한 정보를 JSON 포맷으로 보여준다.
'Backend > Docker' 카테고리의 다른 글
Te Docker (3) - 레지스트리에 이미지 공유 (0) | 2024.01.25 |
---|---|
Te Docker (3) - 멀티 스테이지 Dockerfile 스크립트 (0) | 2024.01.25 |
Te Docker (2) - 컨테이너 생성 심화 (2) | 2024.01.24 |
Te Docker (2) - 컨테이너 통신 (1) | 2024.01.24 |
Te Docker (2) - 컨테이너 생성, 실행, 정지, 삭제 (0) | 2024.01.23 |