Docker+GitHub+Heroku로 CI/CD처럼

내가 한 일



전에 기사에서 공개한 Qiita 태그 자동 발전기을 웹 앱으로 간편하게 시도할 수 있도록 공개했습니다.
드디어 GitHub에서 출처도 노출됩니다.

※Free 플랜이므로 30분간 액세스가 없으면 휴면해 버립니다. 조금 시간이 걸릴 때가있는 것은 애교라는 것입니다 ...

전체도



웹 앱을 게시하는 데 Heroku를 사용했습니다. GitHub와도 연계시켰기 때문에 이런 느낌입니다.
GitHub에 소스를 푸시하면 자동으로 Heroku에서 빌드가 실행되어 Docker 컨테이너의 배포까지 해줍니다. 일로의 개발이라면 지금 CI/CD는 당연하다고 생각합니다만, 개인으로 돈을 들이지 않고 환경 만들어 보았다고 하는 느낌입니다.



Heroku는?



애플리케이션 개발부터 실행, 운영까지 모든 것을 클라우드에서 완결할 수 있는 PaaS입니다. ( 공식 사이트 부터)
상당히 전부터 있는 서비스로 지명도도 높고 알고 있는 사람도 많다고 생각합니다.
다음을 매력적으로 느끼고 이번에 사용했습니다.

  • 무료로 웹 앱을 공개할 수 있다 ※가동 시간 등 일부 제약 있음

  • GitHub 연동 가능

  • Docker 지원 ( Heroku dyno )

  • GitHub 연동하는 방법?



    Heroku 화면에서 설정하는 것만 큼 간단합니다. Automatic deploys를 사용하도록 설정하면 GitHub에 푸시되면 Heroku에 앱을 배포 할 수 있습니다.


    Docker 빌드하는 방법?



    연동한 GitHub에 Dockerfile은 물론입니다만, heroku.yml 라고 하는 설정 파일이 필요하게 됩니다.
    이번에 준비한 heroku.yml은 이쪽.

    heroku.yml
    build:
      docker:
        web: Dockerfile
    

    여러가지 가능한 것 같습니다만, 단순하게 Dockerfile로부터 빌드 하는 것만이므로 심플한 내용이 되고 있습니다.
    자세한 내용은 공식 문서을 참조하십시오.

    덧붙여서 Dokerfile은 이쪽.
    파이썬 웹 애플리케이션 프레임 워크 flask를 사용했습니다.
    FROM python:3-alpine
    
    WORKDIR /work
    RUN wget http://gensen.dl.itc.u-tokyo.ac.jp/soft/pytermextract-0_01.zip
    RUN unzip pytermextract-0_01.zip
    RUN cd pytermextract-0_01 && python setup.py install
    
    RUN apk update
    RUN apk --no-cache add git gcc libc-dev libxml2-dev libxslt-dev
    
    RUN git clone https://github.com/fukumasa/auto-create-qiita-tags
    
    WORKDIR /work/auto-create-qiita-tags
    RUN pip install -r requirements.txt
    
    ENV FLASK_APP /work/auto-create-qiita-tags/app.py
    CMD flask run -h 0.0.0.0 -p $PORT
    

    Heroku는 시작시 포트가 PORT라는 환경 변수에 저장되어 있기 때문에 플래그 응용 프로그램 시작시 $PORT에서 포트를 지정합니다.
    이제 컨테이너가 빌드되면 CMD 내용이 실행됩니다.

    시작된 Docker 앱은 80포트에서 액세스하기 때문에 아마도 컨테이너 내부의 $PORT 포트와 컨테이너가 실행되는 서버의 80포트가 자동으로 포워딩된 것 같습니다.
    Docker 컨테이너를 docker run 로 실행할 때는, 통상 -p 80:5000 와 같이 포트 포워딩을 명시적으로 실시하는 것이 많다고 생각합니다만, Heroku에서는 이 근처는 그다지 의식하지 않아도 좋을 것 같습니다.

    요약



    Heroku를 사용하여 Docker 앱을 게시해 보았습니다.
    GitHub를 사용하면 기존 소스 + heroku.yml로 간편하게 연계 할 수 있습니다.
    원래 Heroku의 사용법이라든지 보다 상세한 커맨드라든가는 이하의 참고 페이지를 봐 주세요.

    참고 페이지


  • 지난 주 GA가 된 heroku.yml을 사용하여 Docker Deploy를 사용해 보았습니다.
  • Qiita : heroku.yml에서 Docker 빌드 가능
  • Qiita : Flask 응용 프로그램을 Heroku의 Docker로 시작
  • 좋은 웹페이지 즐겨찾기