aihubshell_image
jjh4450 • Updated Mar 2, 2026
개요
최근 AI Hub에서 제공하는 CLI 기반 데이터 다운로드 툴인
aihubshell을 활용하면서 한 가지 문제를 발견했다. 해당 툴이 Windows 환경에서 제대로 동작하지 않는 것이었다. 이를 해결하기 위해 여러 방법을 고민했지만, 가장 현실적인 방법은 Docker를 활용하여 별도의 환경을 구축하는 것이라고 판단했다.이 포스트는 aihubshell을 Docker로 감싸는 과정을 기록한 것이다. 또한, 다양한 운영 체제에서 일관된 환경을 제공하기 위해 Alpine Linux 기반의 경량 Docker 이미지를 설계했고, GitHub Actions를 이용해 자동 빌드 및 배포하는 과정도 포함하였다.
개발 배경
Windows 환경에서의 문제
aihubshell은 Linux 기반에서 정상적으로 실행되지만, Windows에서는 몇 가지 문제를 발생시켰다:
- 바이너리 실행 불가: aihubshell이 Linux 바이너리로만 제공됨.
- 의존성 문제: Windows에서는 필요한 패키지를 설치하기 어려움.
- 환경 차이: aihubshell의 사용 환경이 제한적이므로, Windows 사용자가 별도로 Linux 환경을 구축해야 함.
이러한 문제를 해결하기 위해 aihubshell을 Docker로 감싸는 방식을 선택했다. 이를 통해 사용자는 운영 체제에 상관없이
docker run 명령어만으로 손쉽게 aihubshell을 실행할 수 있게 된다.Docker 이미지 설계
Dockerfile 구성
아래는 최종적으로 작성된
Dockerfile의 주요 내용이다:FROM alpine:latest RUN apk update && apk add --no-cache curl unzip gcompat bash RUN curl -o "aihubshell" https://api.aihub.or.kr/api/`aihubshell`.do \ && chmod +x `aihubshell` \ && cp `aihubshell` /usr/bin RUN echo '#!/bin/sh' > /usr/local/bin/startup.sh && \ echo 'echo "************************************************"' >> /usr/local/bin/startup.sh && \ echo 'echo "* UNOFFICIAL AIHUBSHELL IMAGE *"' >> /usr/local/bin/startup.sh && \ echo 'echo "* NO WARRANTIES OR LEGAL LIABILITY PROVIDED. *"' >> /usr/local/bin/startup.sh && \ echo 'echo "* USE AT YOUR OWN RISK. *"' >> /usr/local/bin/startup.sh && \ echo 'echo "************************************************"' >> /usr/local/bin/startup.sh && \ echo 'exec "$@"' >> /usr/local/bin/startup.sh RUN chmod +x /usr/local/bin/startup.sh WORKDIR /data ENTRYPOINT ["/usr/local/bin/startup.sh"]
이 Dockerfile은 Alpine Linux 기반으로 작성되었으며, 다음과 같은 주요 특징을 가진다:
- 최소한의 패키지 설치:
apk add를 통해curl,unzip,bash등의 필수 패키지만 추가.
aihubshll설치:curl을 이용해 바이너리를 다운로드하고 실행 권한을 부여.
- 시작 메시지 제공: 컨테이너 실행 시 사용자에게 경고 메시지를 출력.
- 작업 디렉토리 설정:
/data를 기본 작업 디렉토리로 설정하여 데이터 저장을 용이하게 함.
자동 배포 및 관리
Docker 이미지를 쉽게 배포하기 위해 GitHub Actions를 활용했다. 이를 통해 다음과 같은 자동화된 빌드 및 배포 파이프라인을 구축할 수 있었다.
deploy.yml 상세 분석
GitHub Actions의
deploy.yml 파일은 다음과 같은 기능을 수행한다:name: Build and Push Docker Image on: push: branches: - main paths: - 'Dockerfile' - '.github/workflows/deploy.yml' schedule: - cron: '0 0 * * 1' workflow_dispatch:
- 자동화된 트리거 설정:
main브랜치의Dockerfile이나deploy.yml이 변경될 경우 자동으로 빌드가 실행된다.
- 주간 빌드: 매주 월요일 00:00(UTC) 기준으로 자동 업데이트되어 최신 상태를 유지한다.
- 수동 실행 지원: 필요할 경우 개발자가 직접 워크플로우를 실행할 수 있도록
workflow_dispatch를 추가했다.
permissions: packages: write id-token: write contents: write actions: write
- 권한 관리: GHCR(GitHub Container Registry)에 이미지를 푸시하기 위해
packages: write권한을 부여했다.
- 보안 고려: ID 토큰과 콘텐츠 수정 권한을 추가해 안정적인 빌드 환경을 보장했다.
jobs: build-and-release: runs-on: ubuntu-latest steps:
- 빌드 환경 지정:
ubuntu-latest에서 실행되도록 설정하여 최신 도구를 활용할 수 있도록 했다.
- 멀티플랫폼 지원:
linux/amd64,linux/arm64등의 아키텍처를 지원하여 호환성을 극대화했다.
- name: Create Release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | RELEASE_TYPE="주간 릴리스" if [[ "${{ github.event_name }}" == "push" ]]; then RELEASE_TYPE="패치 릴리스" fi RELEASE_NOTES="Docker 이미지: 최신 버전 업데이트" gh release create "${{ env.version }}" --generate-notes --title "$RELEASE_TYPE ${{ env.version }}" --notes "$RELEASE_NOTES" --draft=false --prerelease=false
- 자동 릴리즈 생성: GitHub Release를 통해 빌드된 Docker 이미지의 새로운 버전을 자동으로 릴리즈하도록 설정했다.
- 주간 릴리즈와 패치 릴리즈 구분:
push이벤트인지schedule이벤트인지에 따라 릴리즈 유형을 다르게 설정했다.
이러한 설정을 통해 자동화된 빌드, 테스트, 릴리즈까지 원활하게 수행되는 시스템을 구축했다.
결론
이번 프로젝트를 통해 `aihubshell`을 다양한 환경에서 실행할 수 있도록 개선할 수 있었다. 또한, Docker를 활용한 환경 격리 및 배포 자동화를 통해 사용자가 더욱 쉽게 접근할 수 있는 환경을 제공했다.


