
모범 사례 Docker 이미지를 구축하는 데 도움이되는 더 똑똑한 dockerfile Linter. Linter는 Dockerfile을 AST로 구문 분석하고 AST 위에 규칙을 수행합니다. 그것은 쉘 체크 어깨에 서서 RUN 지침 내부의 bash 코드를 보라 있습니다.
Hadolint.github.io/hadolint에서 온라인 버전을 확인하십시오 
Dockerfile을 보풀로 보려면 hadolint 로컬로 실행할 수 있습니다.
hadolint < Dockerfile >
hadolint --ignore DL3003 --ignore DL3006 < Dockerfile > # exclude specific rules
hadolint --trusted-registry my-company.com:500 < Dockerfile > # Warn when using untrusted FROM images Docker는 구조에 와서 대부분의 플랫폼에서 hadolint 실행하는 방법을 쉽게 제공합니다. Dockerfile 을 docker run 에 파이프하면됩니다.
docker run --rm -i hadolint/hadolint < Dockerfile
# OR
docker run --rm -i ghcr.io/hadolint/hadolint < Dockerfile또는 Podman 사용 :
podman run --rm -i docker.io/hadolint/hadolint < Dockerfile
# OR
podman run --rm -i ghcr.io/hadolint/hadolint < Dockerfile또는 Windows PowerShell 사용 :
cat .Dockerfile | docker run -- rm - i hadolint / hadolint 최신 릴리스 페이지에서 OSX, Windows 및 Linux 용 미리 빌드 바이너리를 다운로드 할 수 있습니다. 그러나 이것이 효과가 없다면 컨테이너 (Docker), brew 또는 소스 설치로 돌아가십시오.
OSX에서는 Brew를 사용하여 hadolint 설치할 수 있습니다.
brew install hadolint Windows에서는 특종을 사용하여 hadolint 설치할 수 있습니다.
scoop install hadolint nix 가 설치된 분배에서는 hadolint 패키지를 사용하여 임시 쉘을 실행하거나 hadolint 환경에 영구적으로 설치할 수 있습니다.
앞에서 언급했듯이 hadolint 컨테이너 이미지로 제공됩니다.
docker pull hadolint/hadolint
# OR
docker pull ghcr.io/hadolint/hadolint쉘 액세스가 필요한 컨테이너가 필요한 경우 데비안 또는 알파인 변형을 사용하십시오.
docker pull hadolint/hadolint:latest-debian
# OR
docker pull hadolint/hadolint:latest-alpine
# OR
docker pull ghcr.io/hadolint/hadolint:latest-debian
# OR
docker pull ghcr.io/hadolint/hadolint:latest-alpine 당신은 또한 hadolint 로컬로 만들 수 있습니다. 이진을 구축하려면 Haskell과 Cabal 빌드 도구가 필요합니다.
git clone https://github.com/hadolint/hadolint
&& cd hadolint
&& cabal configure
&& cabal build
&& cabal install컨테이너에서 vs code hadolint 확장자를 사용하려면 다음 래퍼 스크립트를 사용할 수 있습니다.
#! /bin/bash
dockerfile= " $1 "
shift
docker run --rm -i hadolint/hadolint hadolint " $@ " - < " $dockerfile " hadolint --help hadolint - Dockerfile Linter written in Haskell
Usage: hadolint [-v|--version] [-c|--config FILENAME] [DOCKERFILE...]
[--file-path-in-report FILEPATHINREPORT] [--no-fail]
[--no-color] [-V|--verbose] [-f|--format ARG] [--error RULECODE]
[--warning RULECODE] [--info RULECODE] [--style RULECODE]
[--ignore RULECODE]
[--trusted-registry REGISTRY (e.g. docker.io)]
[--require-label LABELSCHEMA (e.g. maintainer:text)]
[--strict-labels] [--disable-ignore-pragma]
[-t|--failure-threshold THRESHOLD]
Lint Dockerfile for errors and best practices
Available options:
-h,--help Show this help text
-v,--version Show version
-c,--config FILENAME Path to the configuration file
--file-path-in-report FILEPATHINREPORT
The file path referenced in the generated report.
This only applies for the 'checkstyle' format and is
useful when running Hadolint with Docker to set the
correct file path.
--no-fail Don't exit with a failure status code when any rule
is violated
--no-color Don't colorize output
-V,--verbose Enables verbose logging of hadolint's output to
stderr
-f,--format ARG The output format for the results [tty | json |
checkstyle | codeclimate | gitlab_codeclimate | gnu |
codacy | sonarqube | sarif] (default: tty)
--error RULECODE Make the rule `RULECODE` have the level `error`
--warning RULECODE Make the rule `RULECODE` have the level `warning`
--info RULECODE Make the rule `RULECODE` have the level `info`
--style RULECODE Make the rule `RULECODE` have the level `style`
--ignore RULECODE A rule to ignore. If present, the ignore list in the
config file is ignored
--trusted-registry REGISTRY (e.g. docker.io)
A docker registry to allow to appear in FROM
instructions
--require-label LABELSCHEMA (e.g. maintainer:text)
The option --require-label=label:format makes
Hadolint check that the label `label` conforms to
format requirement `format`
--strict-labels Do not permit labels other than specified in
`label-schema`
--disable-ignore-pragma Disable inline ignore pragmas `# hadolint
ignore=DLxxxx`
-t,--failure-threshold THRESHOLD
Exit with failure code only when rules with a
severity equal to or above THRESHOLD are violated.
Accepted values: [error | warning | info | style |
ignore | none] (default: info)
구성 파일은 전 세계 또는 프로젝트 당 사용할 수 있습니다. HadoLint는 다음 위치 또는 플랫폼 특정 해당 파일의 구성 파일을 찾아 첫 번째 파일을 독점적으로 사용합니다.
$PWD/.hadolint.yaml$XDG_CONFIG_HOME/hadolint.yaml$HOME/.config/hadolint.yaml$HOME/.hadolint/hadolint.yaml or $HOME/hadolint/config.yaml$HOME/.hadolint.yaml Windows에서 %LOCALAPPDATA% 환경 변수는 XDG_CONFIG_HOME 대신 사용됩니다. 구성 파일에는 yaml 또는 yml 확장자가있을 수 있습니다.
hadolint Full yaml 구성 파일 스키마
failure-threshold : string # name of threshold level (error | warning | info | style | ignore | none)
format : string # Output format (tty | json | checkstyle | codeclimate | gitlab_codeclimate | gnu | codacy)
ignored : [string] # list of rules
label-schema : # See Linting Labels below for specific label-schema details
author : string # Your name
contact : string # email address
created : timestamp # rfc3339 datetime
version : string # semver
documentation : string # url
git-revision : string # hash
license : string # spdx
no-color : boolean # true | false
no-fail : boolean # true | false
override :
error : [string] # list of rules
warning : [string] # list of rules
info : [string] # list of rules
style : [string] # list of rules
strict-labels : boolean # true | false
disable-ignore-pragma : boolean # true | false
trustedRegistries : string | [string] # registry or list of registries hadolint 구성 파일을 사용하여 무시 된 규칙을 지정하는 지원을 지원합니다. 구성 파일은 yaml 형식이어야합니다. 예를 들어 유효한 구성 파일 중 하나입니다.
ignored :
- DL3000
- SC1010 또한 hadolint 신뢰할 수없는 리포지토리의 이미지가 Dockerfiles에서 사용될 때 경고 할 수 있습니다. 아래와 같이 trustedRegistries 키를 구성 파일에 추가 할 수 있습니다.
ignored :
- DL3000
- SC1010
trustedRegistries :
- docker.io
- my-company.com:5000
- " *.gcr.io "특정 규칙의 심각성을 무시하려면 다음을 수행 할 수 있습니다.
override :
error :
- DL3001
- DL3002
warning :
- DL3042
- DL3033
info :
- DL3032
style :
- DL3015 임계 값 이상의 심각도가 위반 될 때만 실패 코드가있는 failure-threshold 종료 (v2.6.0+로 제공)
failure-threshold : info
override :
warning :
- DL3042
- DL3033
info :
- DL3032 또한 --config 옵션과 함께 명령 줄에서 사용자 정의 구성 파일을 전달할 수 있습니다.
hadolint --config /path/to/config.yaml Dockerfile컨테이너에 사용자 정의 구성 파일 (상대 또는 절대 경로 사용)을 전달하려면 다음 명령을 사용하십시오.
docker run --rm -i -v /your/path/to/hadolint.yaml:/.config/hadolint.yaml hadolint/hadolint < Dockerfile
# OR
docker run --rm -i -v /your/path/to/hadolint.yaml:/.config/hadolint.yaml ghcr.io/hadolint/hadolint < Dockerfile구성 파일 외에도 Hadolint는 환경 변수로 구성 할 수 있습니다.
NO_COLOR=1 # Set or unset. See https://no-color.org
HADOLINT_NOFAIL=1 # Truthy value e.g. 1, true or yes
HADOLINT_VERBOSE=1 # Truthy value e.g. 1, true or yes
HADOLINT_FORMAT=json # Output format (tty | json | checkstyle | codeclimate | gitlab_codeclimate | gnu | codacy | sarif )
HADOLINT_FAILURE_THRESHOLD=info # threshold level (error | warning | info | style | ignore | none)
HADOLINT_OVERRIDE_ERROR=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_OVERRIDE_WARNING=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_OVERRIDE_INFO=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_OVERRIDE_STYLE=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_IGNORE=DL3010,DL3020 # comma separated list of rule codes
HADOLINT_STRICT_LABELS=1 # Truthy value e.g. 1, true or yes
HADOLINT_DISABLE_IGNORE_PRAGMA=1 # Truthy value e.g. 1, true or yes
HADOLINT_TRUSTED_REGISTRIES=docker.io # comma separated list of registry urls
HADOLINT_REQUIRE_LABELS=maintainer:text # comma separated list of label schema items 비 포스 쉘이있는 기본 이미지를 기본값으로 사용하는 경우 (예 : Windows 기반 이미지) 특수 Pragma hadolint shell 기본 이미지가 사용하는 쉘을 지정할 수 있으므로 Hadolint는 모든 쉘 특정 규칙을 자동으로 무시할 수 있습니다.
FROM mcr.microsoft.com/windows/servercore:ltsc2022
# hadolint shell=powershell
RUN Get-Process notepad | Stop-Process 예외를 만들고 싶은 dockerfile 문 바로 위에 특별한 의견을 추가하여 규칙을 무시할 수도 있습니다. 이러한 의견은 # hadolint ignore=DL3001,SC1081 처럼 보입니다. 예를 들어:
# hadolint ignore=DL3006
FROM ubuntu
# hadolint ignore=DL3003,SC1035
RUN cd /tmp && echo "hello!""인라인 무시"는 다음과 같은 진술에만 적용됩니다.
글로벌 무시 프라그마를 사용하여 파일별로 규칙을 무시할 수도 있습니다. 인라인이 무시하는 것처럼 작동합니다. 다음 줄 대신 전체 파일에 적용된다는 점을 제외하고는 작동합니다.
# hadolint global ignore=DL3003,DL3006,SC1035
FROM ubuntu
RUN cd /tmp && echo "foo" Hadolint는 특정 레이블이 있는지 확인하고 사전 정의 된 레이블 스키마를 준수 할 수 있습니다. 먼저, 라벨 스키마는 명령 줄을 통해 정의되어야합니다.
hadolint --require-label author:text --require-label version:semver Dockerfile또는 구성 파일을 통해 :
label-schema :
author : text
contact : email
created : rfc3339
version : semver
documentation : url
git-revision : hash
license : spdx 레이블의 값은 text , url , semver , hash 또는 rfc3339 일 수 있습니다.
| 개요 | 설명 |
|---|---|
| 텍스트 | 아무것 |
| RFC3339 | RFC 3339에 따라 포맷 된 시간 |
| SEMVER | 시맨틱 버전 |
| URL | RFC 3986에 설명 된 URI |
| 해시시 | 짧거나 긴 git 해시 |
| SPDX | SPDX 라이센스 식별자 |
| 이메일 | RFC 5322를 준수하는 이메일 주소 |
기본적으로 Hadolint는 레이블 스키마에 지정되지 않은 라벨을 무시합니다. 이러한 추가 레이블에 대해 경고하려면 명령 줄을 사용하여 엄격한 레이블을 켜십시오.
hadolint --strict-labels --require-label version:semver Dockerfile또는 구성 파일 :
strict-labels : true 엄격한 레이블이 활성화되어 있지만 레이블 스키마가 지정되지 않은 경우 hadolint 라벨이 있으면 경고합니다.
변수를 사용하여 라벨의 값을 정적으로 사용하지 않고 빌드 시간에 동적으로 수행하는 것이 일반적인 패턴입니다.
FROM debian:buster
ARG VERSION= "du-jour"
LABEL version= "${VERSION}" 이를 허용하려면 레이블 스키마는 해당 레이블의 값으로 text 지정해야합니다.
label-schema :
version : text 대부분의 hadolint 얻으려면 CI의 검사 또는 편집자 또는 사전 커밋 후크로 통합하여 Dockerfile 작성하는 것이 유용합니다. 통합 문서를 참조하십시오.
불완전한 구현 규칙 목록. 더 자세한 정보를 얻으려면 오류 코드를 클릭하십시오.
접두사 DL 있는 규칙은 hadolint 에서 나온 것입니다. 규칙의 구현을 찾으려면 Rules.hs 를 살펴보십시오.
SC 접두사가있는 규칙은 Shellcheck 에서 나온 것입니다 (가장 일반적인 규칙 만 나열되고 수십 개가 많음).
좋은 규칙에 대한 아이디어가 있으면 문제를 만드십시오.
| 규칙 | 기본 심각도 | 설명 |
|---|---|---|
| DL1001 | 무시하다 | 인라인 사용을 자제하지 마십시오. pragmas # hadolint ignore=DLxxxx . |
| DL3000 | 오류 | 절대 작업 디어를 사용하십시오. |
| DL3001 | 정보 | 일부 Bash 명령의 경우 SSH, VIM, Shutdown, Service, PS, Free, Top, Kill, Mount, ifconfig와 같은 Docker 컨테이너에서 실행하는 것은 의미가 없습니다. |
| DL3002 | 경고 | 마지막 사용자는 루트가되어서는 안됩니다. |
| DL3003 | 경고 | WorkDir를 사용하여 디렉토리로 전환하십시오. |
| DL3004 | 오류 | Sudo는 예측할 수없는 행동으로 이어 지므로 Sudo를 사용하지 마십시오. GOSU와 같은 도구를 사용하여 루트를 시행하십시오. |
| DL3006 | 경고 | 항상 이미지의 버전을 명시 적으로 태그하십시오. |
| DL3007 | 경고 | 이미지가 업데이트되면 최신 사용에 오류가 발생하기 쉬운 일입니다. 버전을 릴리스 태그에 명시 적으로 고정하십시오. |
| DL3008 | 경고 | apt-get install 의 핀 버전. |
| DL3009 | 정보 | 무언가를 설치 한 후 apt-get 목록을 삭제하십시오. |
| DL3010 | 정보 | 아카이브를 이미지로 추출하려면 추가하십시오. |
| DL3011 | 오류 | 유효한 UNIX 포트의 범위는 0에서 65535입니다. |
| DL3012 | 오류 | 여러 HEALTHCHECK 지침. |
| DL3013 | 경고 | PIP의 핀 버전. |
| DL3014 | 경고 | -y 스위치를 사용하십시오. |
| DL3015 | 정보 | --no-install-recommends 지정하여 추가 패키지를 피하십시오. |
| DL3016 | 경고 | npm 의 핀 버전. |
| DL3018 | 경고 | apk add 의 핀 버전. apk add <package> apk add <package>=<version> 사용하십시오. |
| DL3019 | 정보 | --no-cache 사용하고 패키지 설치를 완료 할 때 --update 사용하고 /var/cache/apk/* 제거하지 않아도됩니다. |
| DL3020 | 오류 | 파일과 폴더를 ADD 대신 COPY 사용하십시오. |
| DL3021 | 오류 | 2 개 이상의 인수가있는 COPY /로 끝나는 마지막 인수는 / |
| DL3022 | 경고 | COPY --from 이전에 FROM 에서 정의 된 것을 참조해야합니다 |
| DL3023 | 오류 | COPY --from 자신의 FROM 을 공개 할 수 없습니다 |
| DL3024 | 오류 | 별명 (무대 이름) FROM 독특해야합니다 |
| DL3025 | 경고 | CMD 및 EntryPoint 인수에 대한 인수 JSON 표기법을 사용하십시오 |
| DL3026 | 오류 | FROM image 에서 허용 레지스트리 만 사용하십시오 |
| DL3027 | 경고 | 최종 사용자 도구이기 때문에 apt apt-cache 하지 마십시오 apt-get |
| DL3028 | 경고 | GEM 설치의 핀 버전. gem install <gem> 사용하는 대신 gem install <gem>:<version> 사용하십시오 |
| DL3029 | 경고 | -Platform 플래그를 사용하지 마십시오. |
| DL3030 | 경고 | -y 스위치를 사용하여 수동 입력 yum install -y <package> 피하십시오. |
| DL3032 | 경고 | yum 명령 후에 누락이 yum clean all 누락됩니다. |
| DL3033 | 경고 | yum install -y <package>-<version> 으로 버전을 지정하십시오 |
| DL3034 | 경고 | zypper 명령에서 누락되지 않은 비 응체 스위치 : zypper install -y |
| DL3035 | 경고 | zypper dist-upgrade 사용하지 마십시오. |
| DL3036 | 경고 | zypper 사용 후 zypper clean 누락되었습니다. |
| DL3037 | 경고 | zypper install -y <package>[=]<version> 으로 버전을 지정하십시오. |
| DL3038 | 경고 | -y 스위치를 사용하여 수동 입력 dnf install -y <package> 피하십시오. |
| DL3040 | 경고 | DNF 명령 후 dnf clean all . |
| DL3041 | 경고 | dnf install -y <package>-<version> 으로 버전을 지정하십시오 |
| DL3042 | 경고 | pip install --no-cache-dir <package> 있는 캐시 디렉토리를 피하십시오. |
| DL3043 | 오류 | ONBUILD , FROM ONBUILD 내에서 트리거 된 MAINTAINER . |
| DL3044 | 오류 | 정의 된 동일한 ENV 문의 환경 변수를 언급하지 마십시오. |
| DL3045 | 경고 | WORKDIR 세트가없는 상대 대상으로 COPY . |
| DL3046 | 경고 | flag -l 및 높은 UID가없는 useradd 지나치게 큰 이미지를 초래합니다. |
| DL3047 | 정보 | 플래그가없는 wget --progress 더 큰 파일을 다운로드 할 때 과도하게 구축 된 빌드 로그를 초래합니다. |
| DL3048 | 스타일 | 잘못된 레이블 키 |
| DL3049 | 정보 | 레이블 <label> 이 누락되었습니다. |
| DL3050 | 정보 | 불필요한 라벨이 존재합니다. |
| DL3051 | 경고 | 레이블 <label> 은 비어 있습니다. |
| DL3052 | 경고 | 레이블 <label> 은 유효한 URL이 아닙니다. |
| DL3053 | 경고 | 레이블 <label> 은 유효한 시간 형식이 아닙니다. RFC3339를 준수해야합니다. |
| DL3054 | 경고 | 레이블 <label> 은 유효한 SPDX 라이센스 식별자가 아닙니다. |
| DL3055 | 경고 | 레이블 <label> 은 유효한 git 해시가 아닙니다. |
| DL3056 | 경고 | 레이블 <label> 은 시맨틱 버전화를 준수하지 않습니다. |
| DL3057 | 무시하다 | HEALTHCHECK 교육 누락. |
| DL3058 | 경고 | 레이블 <label> 은 유효한 이메일 형식이 아닙니다. RFC5322를 준수해야합니다. |
| DL3059 | 정보 | 다중 연속 RUN 지침. 통합을 고려하십시오. |
| DL3060 | 정보 | yarn cache clean yarn install 후 실행 된 후 누락. |
| DL3061 | 오류 | 잘못된 지시 명령. Dockerfile ARG FROM 댓글에서 시작해야합니다. |
| DL4000 | 오류 | MAINTAINER 더 이상 사용되지 않습니다. |
| DL4001 | 경고 | wget 또는 컬을 사용하지만 둘 다 사용하지 않습니다. |
| DL4003 | 경고 | 여러 CMD 지침이 발견되었습니다. |
| DL4004 | 오류 | 여러 ENTRYPOINT 지침이 발견되었습니다. |
| DL4005 | 경고 | 기본 쉘을 변경하려면 SHELL 사용하십시오. |
| DL4006 | 경고 | 파이프로 RUN 전에 SHELL 옵션 -o 파이프 파일을 설정하십시오. |
| SC1000 | $ 특별히 사용되지 않으므로 탈출해야합니다. | |
| SC1001 | 이 c 이 맥락에서 일반적인 'c' 가 될 것입니다. | |
| SC1007 | 값을 할당하려는 경우 (또는 빈 문자열의 경우 var='' ... )를 할당하려는 경우 = 을 제거하십시오. | |
| SC1010 | done 전에 세미콜론 또는 라인 피드를 사용하십시오 (또는 문자를 만들기 위해 인용). | |
| SC1018 | 이것은 유니 코드가 아닌 공간입니다. 삭제하고 공간으로 재 형성하십시오. | |
| SC1035 | 여기 공간이 필요합니다 | |
| SC1045 | foo &; bar , 그냥 foo & bar . | |
| SC1065 | 매개 변수를 선언하려고합니까? 하지 않다. () 사용하고 매개 변수를 $1 , $2 등으로 표시하십시오. | |
| SC1066 | 과제의 왼쪽에 $를 사용하지 마십시오. | |
| SC1068 | 할당에 = 주위에 공백을 두지 마십시오. | |
| SC1077 | 명령 확장을 위해 진드기는 왼쪽으로 기울어 져야합니다 (vs ´). | |
| SC1078 | 이 두 배로 인용 된 문자열을 닫는 것을 잊었습니까? | |
| SC1079 | 이것은 실제로 최종 인용문이지만 다음 문자로 인해 의심스러워 보입니다. | |
| SC1081 | 스크립트는 사례에 민감합니다. if 아닌 If 사용하십시오. | |
| SC1083 | 이 {/} 리터럴입니다. 표현식을 확인하거나 (누락 ;/n ?) 인용하십시오. | |
| SC1086 | 반복자 이름에서 $ 사용하지 마십시오. | |
| SC1087 | ${array[idx]} 에서와 같이 배열을 확장 할 때 버팀대가 필요합니다. | |
| SC1095 | 기능 이름과 본문 사이에 공간이나 선 피드가 필요합니다. | |
| SC1097 | 예상치 못한 == . 과제의 경우 사용 = . 비교를 위해 [ .. ] 또는 [[ .. ]] 사용하십시오. | |
| SC1098 | 견적/탈출 특수 문자 eval 사용할 때 예를 들어 eval "a=(b)" . | |
| SC1099 | # 앞에 공간이 필요합니다. | |
| SC2002 | 쓸모없는 고양이. cmd < file | .. 고려하십시오 cmd < file | .. 또는 cmd file | .. 대신에. | |
| SC2015 | A && B || C if-then-else가 아닙니다. C가 참이면 C가 실행될 수 있습니다. | |
| SC2026 | 이 단어는 인용문을 벗어납니다. 'Nest' " '단일 따옴표' ''대신 '을하려고 했습니까? | |
| SC2028 | echo 탈출 시퀀스를 확장하지 않습니다. printf 고려하십시오. | |
| SC2035 | ./*glob* 또는 -- *glob* 사용하므로 대시가있는 이름은 옵션이되지 않습니다. | |
| SC2039 | Posix Sh에서는 무언가가 정의되지 않습니다. | |
| SC2046 | 단어 분할을 방지하기 위해 이것을 인용하십시오 | |
| SC2086 | 글로브와 단어 분할을 방지하기위한 이중 인용구. | |
| SC2140 | 단어는 "A"B"C" 형식입니다 (b 표시). "ABC" 또는 "A"B"C" 의미 했습니까? | |
| SC2154 | VAR은 참조하지만 할당되지 않았습니다. | |
| SC2155 | 마스킹 리턴 값을 피하기 위해 별도로 선언하고 할당하십시오. | |
| SC2164 | cd ... || exit cd 실패한 경우 cd ... || exit . |
당신이 숙련 된 해셀러라면, 우리는 당신이 리뷰에서 우리의 코드를 찢어라면 매우 감사 할 것입니다.
컴파일하려면 최근의 Haskell 환경과 cabal-install 필요합니다.
복제 저장소
git clone --recursive [email protected]:hadolint/hadolint.git종속성 및 컴파일 소스를 설치하십시오
cabal configure
cabal build(선택 사항) 시스템에 HadoLint를 설치하십시오
cabal install파서를 시험해 보는 가장 쉬운 방법은 Repl을 사용하는 것입니다.
# start the repl
cabal repl
# overload strings to be able to use Text
:set -XOverloadedStrings
# import parser library
import Language.Docker
# parse instruction and look at AST representation
parseText " FROM debian:jessie "단위 테스트로 컴파일하고 실행하십시오.
cabal configure --enable-tests
cabal build --enable-tests
cabal test통합 테스트 실행 :
./integration_test.sh dockerfile syntax는 dockerfile 참조에 완전히 설명되어 있습니다. AST 정의를보기 위해 language-docker 프로젝트에서 Syntax.hs를 살펴보십시오.
Hadolint는 많은 라이브러리를 사용하여 더러운 작업을 수행합니다. 특히, 언어 도구는 dockerfiles를 구문 분석하고 분석 할 수있는 AST를 생성하는 데 사용됩니다. 해당 라이브러리의 사용자 정의 버전에 대해 Hadolint를 구축하려면 다음을 수행하십시오. 이 예제는 언어 도구를 사용하지만 다른 라이브러리에서도 작동합니다.
/home/user/repos ) 클론 Hadolint 및 Language-Docker Git 리포지토리에서 cd /home/user/repos
git clone https://github.com/hadolint/hadolint.git
git clone https://github.com/hadolint/language-docker.git언어 도구로 수정하십시오
Hadolint Repo에서 cabal.project 파일을 편집하여 packages 속성이 다른 repo도 가리 킵니다.
[...]
packages :
.
../language-docker
[...] cd /home/user/repos/hadolint
cabal configure --enable-tests
cabal build --enable-tests
cabal test Replicatedhq/dockerfilelint, 슈퍼 라이터가 사용하는 다른 라이터
redcoolbeans/dockerlint
Projectatomic/dockerfile_lint