Docker+GitHub+Heroku로 CI/CD처럼
내가 한 일
전에 기사에서 공개한 Qiita 태그 자동 발전기을 웹 앱으로 간편하게 시도할 수 있도록 공개했습니다.
드디어 GitHub에서 출처도 노출됩니다.
※Free 플랜이므로 30분간 액세스가 없으면 휴면해 버립니다. 조금 시간이 걸릴 때가있는 것은 애교라는 것입니다 ...
전체도
웹 앱을 게시하는 데 Heroku를 사용했습니다. GitHub와도 연계시켰기 때문에 이런 느낌입니다.
GitHub에 소스를 푸시하면 자동으로 Heroku에서 빌드가 실행되어 Docker 컨테이너의 배포까지 해줍니다. 일로의 개발이라면 지금 CI/CD는 당연하다고 생각합니다만, 개인으로 돈을 들이지 않고 환경 만들어 보았다고 하는 느낌입니다.
Heroku는?
애플리케이션 개발부터 실행, 운영까지 모든 것을 클라우드에서 완결할 수 있는 PaaS입니다. ( 공식 사이트 부터)
상당히 전부터 있는 서비스로 지명도도 높고 알고 있는 사람도 많다고 생각합니다.
다음을 매력적으로 느끼고 이번에 사용했습니다.
웹 앱을 게시하는 데 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.ymlbuild:
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의 사용법이라든지 보다 상세한 커맨드라든가는 이하의 참고 페이지를 봐 주세요.
참고 페이지
연동한 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의 사용법이라든지 보다 상세한 커맨드라든가는 이하의 참고 페이지를 봐 주세요.
참고 페이지
Reference
이 문제에 관하여(Docker+GitHub+Heroku로 CI/CD처럼), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fukumasa/items/71710ea9641afa64ba2e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)