728x90

Build

기존에 다른 사용자의 저장소에서 이미지를 다운로드하여 쓰는 방법을 사용할 수도 있지만

본인이 직접 이미지를 생성하여 저장소에 올릴 수도 있다.

 

이를 위해서는 도커의 설치와 이미지 소스, 허브의 저장소가 필요하다.

(빌드만 할 거라면 저장소는 필요 없다.)

 

Dockerfile 작성

이미지 생성에 사용할 간단한 스프링 부트 프로젝트를 만든 후에

빌드 작업을 수행하여 jar 파일을 추출하거나

기존에 만들어둔 jar 파일 등을 이용한다.

 

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

프로젝트의 최상위 디렉터리에 Dockerfile이라는 이름의 파일을 생성한 후에

위의 스크립트를 작성해 준다.

(반드시 최상위 디렉터리일 필요는 없다. jar 파일의 경로만 잘 지정해주면 된다.)

 

여러 가지 명령들을 사용할 수 있지만 간단한 빌드는 위 옵션만으로도 충분하다.

FROM 베이스이미지

우선 FROM을 통해 컨테이너의 베이스 이미지를 지정하여 실행환경을 설정할 수 있다.

ARG 변수명=값
// ${변수명} 형태로 사용가능

ARG를 통해 변수를 선언하여 빌드에 사용할 jar파일의 경로를 저장해 준다.

값을 필요한 곳에 적어줄 것이라면 생략할 수도 있다.

COPY [복사할 파일 명] [복사될 파일 명]
COPY build/libs/*.jar app.jar

로컬 저장소의 파일명과 컨테이너에 복사될 파일명을 지정하여 복사해 준다.

ENTRYPOINT [컨테이너 시작 시 실행할 명령]

컨테이너 시작(run | start) 시에 자동으로 실행할 명령을 지정해 준다.

 

위와 같이 Dockerfile을 작성 후 빌드를 하면 된다.

 

주로 아래와 같은 명령들을 많이 사용한다.

  • FROM <base_image>
    • 빌드할 이미지의 기반이 되는 도커 이미지를 선택
  • LABEL <key>=<value>
    • 이미지에 메타데이터를 추가 (빌드 버전, 제작자, 설명 등)
  • RUN <command>
    • 컨테이너 내에서 실행할 명령어를 지정
    • 패키지 설치, 의존성 관리, 빌드 등에 사용
  • COPY <source> <destination>
    • 로컬 파일 시스템에서 파일 또는 디렉터리를 이미지에 복사
  • ADD <source> <destination>
    • COPY와 유사
    • 원격 파일 다운로드, 압축 파일 해제 등에 사용
  • WORKDIR <directory>
    • 작업 디렉터리를 지정
    • 이후에 사용하는 명령어는 해당 디렉터리에서 실행
  • ENV <key>=<value>
    • 환경 변수를 설정
    • 이 변수들은 이미지 내에서 사용가능
  • EXPOSE <port>
    • 컨테이너가 외부에 노출할 포트를 지정
    • 컨테이너 외부에서 해당 포트로 액세스 가능
  • CMD <command>
    • 컨테이너가 시작 시 실행될 기본 명령어를 지정
    • 하나의 CMD만 사용가능
    • Dockerfile에 여러 번 나타날 경우 마지막 명령어가 실행

 

빌드

$ docker build -t 사용자명/허브저장소명:태그 .
$ docker build -t da9dac/da9dac-test:0.1 .

위의 명령어를 사용하면 Dockerfile을 사용해 이미지를 생성할 수 있다.

(태그는 필수는 아니다.)

$ docker tag [바꾸고자 하는 기존 이미지명] [어떻게 바꿀지 새로운 이미지명 및 태그 입력]
$ docker tag da9dac/da9dac-test:0.1 da9dac/da9dac-new:0.2

기존 이미지명과 태그를 tag 명령어를 사용하여 바꿀 수도 있다.

 

'Web' 카테고리의 다른 글

[Kubernetes] 컨테이너 오케스트레이션  (0) 2023.07.21
[Kubernetes] 기능  (0) 2023.07.20
[Docker] 이미지  (0) 2023.07.19
[Docker] Docker Hub  (0) 2023.07.19
[Docker] 도커와 컨테이너  (0) 2023.07.19

+ Recent posts