TL;DR
- Dofigen은 기본값과 동작을 정의한 YAML·JSON 설명으로 Dockerfile 생성을 간소화하고, BuildKit의 병렬 레이어 빌드 최적화를 활용하는 Dockerfile 생성기임.
- Docker 이미지, Arch Linux의 AUR, Cargo, Homebrew 또는 릴리스 바이너리로 설치할 수 있음.
- 기존 Dockerfile은
dofigen parse명령으로dofigen.yml파일로 변환할 수 있음. dofigen gen은 Dockerfile과.dockerignore파일을 생성하며, 입력·출력 경로, 오프라인 모드, 잠금 버전, 기본 라벨 관련 옵션을 제공함.- 외부 파일 확장·병합과 잠금 파일을 지원하며,
dofigen update로 이미지와 리소스 버전을 갱신할 수 있음.
Dofigen
- Dofigen은 간소화된 YAML 또는 JSON 설명을 사용해 Dockerfile을 생성하는 도구임.
- 기본값과 동작을 정의해 Dockerfile 작성을 간단하게 함.
- 기본 Docker 빌드 엔진인 BuildKit의 최적화를 활용해 레이어 빌드를 병렬화하고 Docker 이미지 빌드 속도를 높임.
- 한 프랑스 DevOps 엔지니어는 이를 두고 “Dofigen은 이 컨테이너 세계에 한 줄기 숨통임”이라고 표현함.
시작하기
사전 요구 사항
- 다음 방법 중 하나로 Dofigen을 설치할 수 있음.
Docker로 사용하기
- 다음 명령으로 Docker 이미지에서 Dofigen을 직접 실행할 수 있음.
- 현재 디렉터리를
/app에 마운트하고 현재 사용자 ID로 실행하며,--help옵션을 전달하는 방식임:docker run --rm -it -v $(pwd):/app -u $UID lenra/dofigen --help
Arch Linux
dofigen은 AUR 패키지로 제공됨.paru와 같은 AUR 도우미로 설치할 수 있음:paru -S dofigen
Cargo
- 먼저 Rust 패키지 관리자 Cargo를 설치해야 함.
- 다음 명령으로
dofigen을 설치할 수 있음:cargo install dofigen
Homebrew
- 다음 명령 중 하나로 Homebrew에서 Dofigen을 설치할 수 있음:
brew tap lenra-io/tools후brew install dofigen, 또는brew install lenra-io/tools/dofigen
바이너리 다운로드
- 릴리스 페이지에서 Dofigen 바이너리를 내려받고, 경로 환경 변수에 추가할 수 있음.
기존 Dockerfile에서 마이그레이션
dofigen parse명령으로 기존 Dockerfile에서 Dofigen 파일을 생성할 수 있음.- 이 명령은 현재 디렉터리의 Dockerfile을 읽고
dofigen.yml파일을 생성함. - 추가 옵션은
dofigen parse --help에서 확인할 수 있음.
사용 방법
- Dockerfile을 생성하려면
dofigen.yml파일을 만든 뒤dofigen gen을 실행함. dofigen gen --help는 Dockerfile과.dockerignore파일 생성 명령의 옵션을 설명함.-f, --file <FILE>: 입력 Dofigen 파일 지정. 기본 검색 순서는dofigen.yml,dofigen.yaml,dofigen.json이며,-를 지정하면 표준 입력에서 읽음.--offline: URL에서 데이터를 불러오지 않음. URL을 통한 파일 확장과 이미지 태그 불러오기가 비활성화됨.-o, --output <OUTPUT>: 출력 Dockerfile 지정.-를 지정하면 표준 출력으로 기록하며, 기본값은Dockerfile임.-l, --locked: Dofigen 정의의 잠금 버전을 사용함.-n, --no-labels: 기본 라벨을 정의하지 않음.-h, --help: 도움말을 출력함.- 자세한 도움말은
dofigen --help로 확인할 수 있음.
Dofigen 설명자
- Dofigen 설명자의 구조는 Dockerfile보다 단순하도록 설계됨.
- 구조에 관한 자세한 설명은 별도로 제공됨.
- 예시 구성은
muslrust빌더에서clux/muslrust:stable이미지를 사용하고 작업 디렉터리를/app으로 설정함. Cargo.toml,Cargo.lock,src/를 바인드하고, musl로 릴리스 빌드를 실행함.- 생성된 바이너리를
/tmp/로 옮김. 예시 설명에 따르면 바이너리가 캐시 볼륨 안에 있으면 다른 빌드 단계에서 찾을 수 없기 때문임. - Cargo 캐시인
/home/rust/.cargo와 빌드 캐시인/app/target을 캐시로 지정함. - 런타임 단계는 작업 디렉터리를
/app으로 설정하고, 빌더의/tmp/dofigen을/bin/으로 복사함. - 진입점은
dofigen, 명령 인수는--help로 설정함. - 빌드 컨텍스트에는
/src와/Cargo.*를 지정함.
외부 파일 확장
extend속성으로 외부 파일을 확장할 수 있음.- Dofigen 템플릿은 Dofigen Hub 저장소에서 확인할 수 있음.
- 예시에서는
https://raw.githubusercontent.com/lenra-io/dofigen/main/dofigen.yml을 확장 대상으로 지정함. - 확장한 파일의 구조를 덮어쓰거나 병합할 수 있으며, 예시에서는 확장 설정과 함께
user: 1001을 지정함.
잠금 파일
- Dofigen은 Dockerfile 생성에 사용된 Dofigen 설명자 버전을 보존하는 잠금 파일을 생성함.
- 잠금 파일은 불러온 리소스와 이미지 태그도 보존해 동일한 버전으로 Dockerfile을 다시 생성할 수 있게 함.
dofigen update명령으로 이미지와 리소스를 갱신할 수 있음.- 동일한 버전으로 Dockerfile을 다시 생성하려면
dofigen gen --locked를 사용함.
기여
- 개발 환경 설정, 코딩 규칙, PR 절차는 기여 가이드에서 확인할 수 있음.
- 프로젝트에는 첫 기여에 적합한 이슈가 마련돼 있음.
라이선스
- MIT 라이선스로 배포됨. 자세한 내용은 LICENSE 파일에 있음.
연락처
- Lenra: @lenra_dev, contact@lenra.io
- 프로젝트 링크: https://github.com/lenra-io/dofigen
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요