1. 개요
이 사용방법(예제)에서는 Dockerfile 에 어노테이션을 추가하는 방법을 배웁니다 . 또한 어노테이션처럼 보이지만 그렇지 않은 지침 간의 차이점을 강조할 것입니다.
2. Dockerfile에 어노테이션 추가
다음 Dockerfile을 사용합니다.
FROM ubuntu:latest
RUN echo 'This is a Baeldung tutorial'
빨리 이해합시다:
- 첫 번째 줄은 최신 우분투 이미지를 사용한다고 명시합니다.
- 두 번째 줄은 echo 명령 을 쉘의 매개변수로 전달합니다.
이미지 를 구축해 봅시다 .
$ docker build -t baeldungimage .
#4 [1/2] FROM docker.io/library/ubuntu:latest
#5 [2/2] RUN echo 'This is a Baeldung tutorial'
Docker는 성공적으로 실행되는 두 단계를 인쇄합니다. 이제 Dockerfile에 어노테이션을 추가하는 방법을 살펴보겠습니다.
2.1. 한 줄 어노테이션 만들기
줄을 어노테이션 처리하려면 #으로 시작해야 합니다.
한 줄 어노테이션을 추가하기 위해 Dockerfile을 수정하는 방법을 살펴보겠습니다.
# Declare parent image
FROM ubuntu:latest
# Print sentence
RUN echo 'This is a Baeldung tutorial'
수정된 이미지를 빌드해 보겠습니다.
$ docker build -t baeldungimage .
#4 [1/2] FROM docker.io/library/ubuntu:latest
#5 [2/2] RUN echo 'This is a Baeldung tutorial'
예상대로 Docker는 이전과 동일한 두 단계를 성공적으로 실행했습니다.
2.2. 여러 줄 어노테이션
Docker에는 여러 줄 어노테이션을 작성하는 전용 구문이 없습니다. 따라서 여러 줄 어노테이션을 작성하는 유일한 방법은 한 행에 여러 줄 어노테이션을 작성하는 것입니다 .
# This file is a demonstration
# For a Baeldung article
FROM ubuntu:latest
RUN echo 'This is a Baeldung tutorial'
이미지 빌드는 여전히 이전과 동일한 단계를 인쇄합니다.
$ docker build -t baeldungimage .
#4 [1/2] FROM docker.io/library/ubuntu:latest
#5 [2/2] RUN echo 'This is a Baeldung tutorial'
3. 함정 피하기
이 섹션에서는 우리가 알아야 할 몇 가지 함정을 살펴보겠습니다. 어노테이션이 아닌데도 어노테이션처럼 보이는 까다로운 코드 행입니다.
3.1. 설명 또는 명령 인수?
Docker에서는 줄 끝에 어노테이션을 추가하는 것이 불가능합니다. 지침 중 하나의 끝에 한 줄 어노테이션과 같은 형식의 문장을 추가하려고 하면 어떤 일이 발생하는지 살펴보겠습니다.
FROM ubuntu:latest
RUN echo 'This is a Baeldung tutorial' # Print sentence
이제 이미지를 빌드합니다.
$ docker build -t baeldungimage .
#4 [1/2] FROM docker.io/library/ubuntu:latest
#5 [2/2] RUN echo 'This is a Baeldung tutorial' # Print sentence
#5 0.371 This is a Baeldung tutorial
결과가 실제로 이전과 동일하다는 것을 강조하기 위해 echo 명령으로 인쇄된 문장을 포함했습니다 . 여기서 무슨 일이 일어났습니까? Dockerfile의 두 번째 줄 끝에 실제로 어노테이션을 추가했습니까?
실제로 # Print 문장 은 RUN 명령 에 대한 추가 인수로 전달됩니다 . 이 경우 이 명령에서 추가 인수가 무시되었습니다. 확신을 주기 위해 이제 Dockerfile의 첫 번째 줄 끝에 비슷한 문장을 추가해 보겠습니다.
FROM ubuntu:latest # Declare parent image
RUN echo 'This is a Baeldung tutorial'
이 이미지를 빌드해 보겠습니다.
$ docker build -t baeldungimage .
failed to solve with frontend dockerfile.v0: failed to create LLB definition: dockerfile parse error line 1: FROM requires either one or three arguments
여기에서 우리는 확인을 보여주는 매우 명시적인 오류 메시지를 받았습니다.
3.2. 파서 지시문은 어노테이션이 아닙니다.
파서 지시문은 Dockerfile 파서에게 파일 내용을 처리하는 방법을 알려줍니다. 어노테이션과 마찬가지로 파서 지시문은 #으로 시작합니다.
또한 파서 지시문은 Dockerfile의 맨 위에 있어야 합니다. 예를 들어 파일에서 이스케이프 구문 분석기 지시문을 사용합니다. 이 지시문은 파일에 사용된 이스케이프 문자를 변경합니다.
# escape=`
FROM ubuntu:latest
RUN echo 'This is a Baeldung tutorial&' `
&& echo 'Print more stuff'
여기 에서 RUN 명령에 또 다른 반향 명령을 추가 했습니다. 가독성을 높이기 위해 이 명령을 새 줄에 넣었습니다. 기본 줄 구분 기호는 \ 입니다. 그러나 우리는 파서 지시어를 사용했기 때문에 대신 ` 를 사용해야 합니다. 이제 이미지를 빌드하고 어떤 일이 발생하는지 살펴보겠습니다.
$ docker build -t baeldungimage .
#4 [1/2] FROM docker.io/library/ubuntu:latest
#5 [2/2] RUN echo 'This is a Baeldung tutorial&' && echo 'Print more stuff'
#5 0.334 This is a Baeldung tutorial&
#5 0.334 Print more stuff
두 문장이 예상대로 인쇄되었습니다.
4. 결론
이 기사에서는 Dockerfile에 어노테이션을 작성하는 방법을 살펴보았습니다. 어노테이션과 매우 유사하지만 파일에 실제로 영향을 미치는 구문 분석기 지시문이라는 일련의 명령이 있다는 것도 배웠습니다.
항상 그렇듯이 코드는 GitHub 에서 찾을 수 있습니다 .