6. .dockerignore file
Docker CLI가 context를 docker daemon에 전송하기 전에, context의 ROOT 디렉토리에서 .dockerignore 이름의 파일을 찾아본다.
만일 파일이 존재한다면 CLI는 그 안에 작성된 패턴과 일치하는 파일과 디렉토리를 제외하여 context를 변경한다.
이렇게하면 크거나 민감한 파일과 디렉토리를 불필요하게 데몬에 보내지 않고 ADD 또는 COPY를 사용하여 이미지에 추가 할 수 있다.
CLI는 .dockerignore 파일을 유닉스 쉘의 glob을 줄바꿈하여 분리한 목록으로 해석한다. context의 ROOT는 작업 디렉토리와 ROOT 디렉토리로 간주한다.
예를 들어 /foo/bar
그리고 foo/bar
패턴은 모두 foo의 서브 디렉토리 또는 서브 모듈 중 bar라는 파일 또는 디렉토리를 제외한다.
만일 .dockerignore 파일의 첫 행이 #으로 시작하면, 이 행은 주석으로 간주되고 CLI에 의해 해석되기 전에 무시된다.
# comment
*/temp*
*/*/temp*
temp?
이 파일로 야기되는 상황을 추측해보자.
Rule | Behavior |
---|---|
1 line | 주석이기 때문에 무시된다. |
2 line | ROOT의 모든 하위 디렉토리에서 temp로 시작하는 파일 및 디렉토리를 제외한다. |
3 line | ROOT의 두 레벨 아래에 있는 서브 디렉토리에서 temp로 시작하는 파일 및 디렉토리를 제외한다. |
4 line | ROOT 디렉토리에서 이름이 temp로 시작하고 뒤에 임의의 한 문자가 추가된 파일 및 디렉토리를 제외한다. |
glob (programming)
컴퓨터 프로그래밍에서, 특히 unix 같은 환경에서 glob 패턴은 와일드카드 문자로된 파일 이름을 구체화한다.
예를 들어 unix 명령어mv *.txt textfiles/
는 현재 디렉토리에서 끝이 .txt로 끝나는 파일을 textfiles 디렉토리로 이동시켜준다.
여기서 *는 모든 문자를 뜻하는 와일드카드이고 *.txt는 glob 패턴이다. 다른 와일드카드 문자로는 하나의 문자를 뜻하는 물음표(?)가 있다.
매칭은 Go의 filepath.Match 규칙을 사용하여 행해진다. 앞과 뒤 공백을 제거하는 전처리 과정이 있으며, . 그리고 .. 요소들은 Go의 filepath.Clean 규칙을 사용한다. 사전 처리 후 비어있는 행은 무시된다.
Docker는 임의의 수의 디렉토리와 일치하는 특수 와일드카드 문자열 *도 지원한다. 예를 들어 **/.go는 build context의 ROOT를 포함하여 모든 디렉토리에서 발견되는 .go로 끝나는 모든 파일을 제외시킨다.
느낌표(!)로 시작하는 행은 제외에 대한 예외를 생성하는데 사용할 수 있다.
*.md
!README.md
README.md 파일을 제외한 모든 마크다운 파일을 context로 부터 제외시킨다.
느낌표(!)의 배치는 .dockerignore의 마지막 행에 해당하는 파일 또는 디렉토리가 제외 될것인지 포함될 것인지를 결정한다.
*.md
!README*.md
README-secret.md
README-secret.md를 제외한 README 파일들을 제외하고 context에서 모든 마크다운 파일들이 제외된다.
*.md
README-secret.md
!README*.md
모든 README 파일들이 포함된다. 나중에 작성된 행이 README-secret.md와도 매칭되기 때문에 가운데 행은 아무런 영향을 미치지 못한다.
7. FROM
FROM <image>
또는
FROM <image>:<tag>
또는
FROM <image>@<digest>
FROM 명령어는 기본 이미지를 설정해준다. Dockerfile의 첫 번째 명령어는 FROM 이어야만 한다. 유효한 모든 이미지가 기본 이미지가 될 수 있다. 특히 퍼블릭 저장소에서 이미지를 가져 와서 시작하는 것이 쉽다.
- FROM은 주석이 아닌 첫 번째 명령어야만 한다.
- FROM은 여러 개의 이미지를 만들려면 여러 번 작성될 수 있다.
- TAG 또는 digest 값은 선택이다. 기입하지 않았다면 가장 최근 이미지가 선택된다.
8. MAINTAINER
MAINTAINER <name>
MAINTAINER 명령어는 생성된 이미지에 Author 필드를 설정할 수 있게 해준다.
9. RUN
RUN 명령어는 두 가지 형식이 있다.
RUN <command> : shell 형식, 기본적으로 Linux에서는
/bin/sh -c이고 Windows에서는
cmd /S /C```` 이다.RUN ["executable", "param1", "param2"]
: exec 형식
RUN 명령어는 현재 이미지위에 새로운 레이어에서 모든 명령을 실행하고 그 결과를 커밋한다. 커밋된 이미지는 Dockerfile의 다음 단계에 사용된다.
Known issues
- Issue 783는 파일 권한 문제에 대한 것이다. AUFS 파일 시스템을 사용할 때 발생할 수 있다. 예를 들어 파일을 rm 하려 시도하는 동안에 최신 AUFS 시스템의 경우 dockerperm1 옵션을 사용해서 레이어를 마운트해 docker가 자동으로 rm을 하지 못하도록 한다. dirperm1 옵션에 관련한 더욱 자세한 내용은 AUFS 메뉴얼 페이지에서 찾아볼 수 있다.
10. CMD
11. LABEL
12. EXPOSE
13. ENV
14. ADD
15. COPY
16. ENTRYPOINT
17. VOLUME
위 글은 Docker 공식사이트에서 제공하는 문서기준으로 작성되었습니다.
comments powered by Disqus