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 |