sbt의 Docker 이미지 찾기 및 만들기

10434 단어 DockerScalasbttech

sbt의 Docker 이미지 찾기 및 만들기


개요


sbt를 사용할 수 있는 docker 이미지 찾기
결국 스스로 Dcokerfile을 만들고 이미지를 만들었어요.
그때 얻은 지식과 식견을 공유할 수 있었으면 좋겠다고 생각해서 썼다.
제작된 Docker image, Docker file은 아래에 있습니다.
  • Docker Hub
  • keyno63/sbt
  • keyno63/sbt-yarn
  • Github
  • 모티프


    특정 Scara 프로젝트의 개발, 작업 확인 시 사용자 환경에서 수행되지 않음
    Docker image를 원하기 때문입니다.

    Docker image를 원합니다.


    개발 환경으로 Windows를 자주 사용합니다.
    Scara는 JVM에서 실행되는 언어이기 때문에 지금까지 환경 의존에 신경 쓰지 않았다.
    특정 Scara 프로젝트, 특히 JavaScript를 사용하는 프로젝트
    sbtjob을 실행할 수 없는 현상에 부딪혔다.
    구체적으로 말하면, 나는 munit의 문서를 수정하고 싶다
    수정 후 문서 생성을 확인할 때docs/docusaurusCreateSite 작업 수행yarn이 이동하지 않아 실패했습니다.
    > sbt docs/docusaurusCreateSite
    ...
    [error] (docs / docusaurusCreateSite) java.io.IOException: Cannot run program "yarn" (in directory "C:\Users\kofuj\work\scala\munit-mine\website"): CreateProcess error=2, 指定されたファイルが見つか
    りません。
    [error] Total time: 49 s, completed YYYY/MM/DD h:mm:ss
    
    아마도 이 일대 원인
    sbt가 실행되기 시작했을 때 윈도우의 실행 경로를 읽지 못해서 실패한 것 같습니다.
    환경 설정을 재검토해야 할지도 모르지만, 가까스로 Docker에서 확인을 해보면
    나는 차이를 개의치 않아도 좋아질 수 있다고 생각해서 Docker image를 찾아보고 싶다.

    Docker image 찾기


    원하는 인상이 없다.
    찾는 조건은 다음과 같다
  • sbt1.5이상
  • JDK 11
  • yarn
  • 사용 가능
    특별히 yarn이 함유된 것은 발견되지 않았다.
    ※ 단지 찾을 수 없을 뿐
    그래서 가까스로 Docker file을 만들어 보았습니다.
    기존 이미지 이후 추가 가능
    여러 번 사용하려면 처음부터 넣는 게 좋아요.

    Docker 이미지 만들기


    참고물


    sbt의 주요 멤버 중 한 명인 eed3si9n씨가 눈길을 끌었습니다.
    Docker의 sbt
    관심사는 알피니를 기반으로 익숙한데, JDK8, JDK11이 선택할 수 있는 곳을 선택해 기쁘다.
    이미지를 직접 사용하지 않는 이유는 다음과 같습니다.
  • 최종 업데이트 얼마 전(8개월 정도)
  • sbt 버전도 1.4 계열
  • Dockerfile


    용도에 따라 구분하여 사용하기 위해 sbt의 설치와yarn의 설치를 분리하였다.
    JDK가 LTS 물건으로 전환할 수 있었으면 좋겠다고 생각해서 8, 11, 17을 선택했어요.
    8,11은adopt의 이미지이고 17은adopt가 없기 때문에openjdk를 사용합니다.
  • sbt
  • FROM adoptopenjdk/openjdk11:jre-11.0.13_8-alpine
    
    ARG SBT_VERSION=1.5.5
    
    RUN set -x \
        # install sbt
        && apk --update add --no-cache --virtual .build-deps curl \
        && SBT_VER=${SBT_VERSION} \
        && SBT_URL="https://github.com/sbt/sbt/releases/download/v${SBT_VER}/sbt-${SBT_VER}.zip" \
        && apk add shadow bash openssh rsync git \
        && curl -Ls ${SBT_URL} > /tmp/sbt-${SBT_VER}.zip \
        && mkdir /opt/sbt \
        && unzip /tmp/sbt-${SBT_VER}.zip -d /opt/sbt \
        && sed -i -r 's#run \"\$\@\"#unset JAVA_TOOL_OPTIONS\nrun \"\$\@\"#g' /opt/sbt/sbt/bin/sbt \
        && apk del --purge .build-deps \
        && rm -rf /tmp/sbt-${SBT_VER}.tgz /var/cache/apk/* \
        # create workdir
        && mkdir /work
    
    WORKDIR /work
    
    ENV PATH="/opt/sbt/sbt/bin:$PATH" \
        JAVA_OPTS="-XX:+UseContainerSupport -Dfile.encoding=UTF-8" \
        SBT_OPTS="-Xmx2048M -Xss2M"
    
    sbt의 설치는 다른 창고에서 보면 크게 다음과 같은 두 가지로 나뉜다
  • sdkman에서 넣기
  • 압축 파일을 가져오고 압축을 풀기
  • 압축 파일에서 가져옵니다.sdkman에서 얻으면 어쨌든 용량이 커지니까...
    다른 URL에서 sbt 압축 파일을 가져오는 Docker file 참조
    언제부턴가 얻을 수 없다
    GiitHub의 압축 파일을 가져옵니다.
  • yarn
  • FROM keyno63/sbt:1.5-jdk11-alpine
    
    RUN set -x \
        && apk add bash curl nodejs \
        && touch ~/.bashrc \
        && curl -o- -L https://yarnpkg.com/install.sh | bash \
        && ln -s "$HOME/.yarn/bin/yarn" /usr/local/bin/yarn
    
    ENV PATH="$HOME/.yarn/bin:$PATH"
    
    위에 쓰인 sbt의 Docker image를 바탕으로yarn 명령을 추가한 Docker file을 만들었습니다.
  • Docker Hub
  • GiitHub Action에서도 docker push를 자동으로 수행할 수 있습니다.
    요즘 시대는 자동화할 수 있어서 좋은 시대인 것 같아요.
    github-actions 설정
  • 동작 확인
  • 질문을 제작한munitdocs/docusaurusCreateSitedocker image로 동작을 확인했다.
    정상적인 동작이 끝나면 제품도 확인할 수 있습니다.
    > docker run -it --rm -v ${PWD}:/work -w /work keyno63/sbt-yarn:1.5-jdk11-alpine sbt docs/docusaurusCreateSite
    [info] [launcher] getting org.scala-sbt sbt 1.5.5  (this may take some time)...
    ...
    
    Site built successfully. Generated files in 'build' folder.
    Done in 63.03s.
    [success] Total time: 295 s (04:55), completed MM DD, YYYY, hh:mm:ss
    

    찾다가 닮은 꼴을 발견했어요.


    Docker image를 찾다가 좋은 인상을 많이 발견했기 때문에 다음과 같이 소개해 드리겠습니다.
    이 가운데 반년 만에 업데이트된 sbt 버전은 1.5 이상에 달했다.

  • hseeberger/scala-sbt
  • Docker Hub
  • GitHub
  • 데비안과 오로라클을 기반으로 한 인상으로 JDK도 811, 17에서 선택한 프로그램이 많다.
    업데이트와 유지보수도 빈번하다.다만, 알피니트의 기본적인 인상은 없는 것 같다.

  • westwater/scala-sbt
  • Docker Hub
  • GitHub
  • 오픈 jdk11 기반.신경 쓰이는 것은 업데이트 시기가 4개월 전과 얼마 전이다.

  • chatworks씨.
  • Docker Hub
  • openjdk8
  • openjdk11
  • GitHub
  • Scara를 적극적으로 사용하는 기업의 창고, 업데이트도 빈번하다

  • xirc/sbt-scala
  • Docker Hub
  • GitHub
  • 이미지 기반 debian
    sdkman을 사용하면 최신 jdk, scala, sbt에 들어갈 수 있으며,github actions에서 매주 업데이트됩니다.
    신경 쓰이는 점은 이미지 크기가 크고pull이 나올 때 무겁다
  • 돌아보다


    환경 의존도가 적은 개발 환경으로서 필요한 Docker image를 얻을 수 있다는 것에 만족합니다..ivy2의 캐시도 마운트하는 방법에 따라 해결할 수 있기 때문에 로컬 환경과 같은 개발 체험을 실현할 수 있다.

    최후


    JVM 덕분에 환경 의존도가 적은 언어라도 Docker image가 있으면 편리하다는 것을 다시 한 번 느꼈습니다.
    좋은 개발 체험을 해야 한다.

    좋은 웹페이지 즐겨찾기