Docker로 만드는 GAE with go 개발 환경

4736 단어 5GAE도커
Windows에 개발 환경을 만드는 것은 뭔가 귀찮고, 제 경우 노트북 PC는 MacBookAir이기 때문에 잘 공유 할 수 없을까, SDK를 Docker 기반으로 랩핑 해보기로했습니다.

「개발 환경을 Docker로!」라고 말하는 것은 나누고 유행이라고 생각합니다만, 어느 쪽인가라고 하면 실행 환경의 의미가 강한 생각이 듭니다.
이번에는 GAE계의 커맨드를 정리해 Docker에 넣는 것으로 SDK의 도입을 간단하게 하자! 라는 것이 취지입니다. Python인 Ruby인 것을 Windows에 넣는 것은 귀찮기 때문에.

Docker 이미지는 여기에 등록한 koduki/sdk-gae_go을 추가합니다.

로컬 서버에서의 개발



서버 시작



먼저 다음 명령으로 로컬 서버를 시작합니다.
$ ./serve.sh

이제 로컬, 정확하게는 DockerMachine에 서버가 시작되었습니다. 내부적으로는 아래와 같은 처리를 하고 있습니다.
WK_DIR=$(cd $(dirname $0);pwd)
IMAGE_NAME=koduki/sdk-gae_go
docker run -it --rm -p 8080:8080 -v ${WK_DIR}/app:/app -v ${WK_DIR}/home:/root $IMAGE_NAME goapp serve --host=0.0.0.0 /app

보시다시피, 간단한 goapp 래퍼입니다.
http://localhost:8080 또는 Windows나 Mac에서 docker-machine을 사용하는 경우는 http://192.168.99.100:8080 등으로 액세스할 수 있습니다.

현재 디렉토리의 앱을 볼륨으로 마운트하고 있으므로, 그 코드를 편집하면 반영됩니다.
다만, 현재 hot deplpy가 잘 되지 않기 때문에, 한번 "C-c"이므로, server.sh를 정지해, 재기동할 필요가 있습니다.

패키지 설치



패키지를 사용할 수 없으면 go에서의 생산성이 반감 어딘지 모르게 내려 버리는군요?
패키지도 Docker에 넣습니다. Dockerfile 의 줄 끝에 기재가 있으므로, 그쪽에 추기하는 것으로 패키지를 추가할 수 있습니다.

수정하면 다음 명령 등으로 이미지를 업데이트하거나 작성합니다.
$ docker build -t koduki/sdk-gae_go .

빌드가 완료되면 다시 컨테이너를 이동하여 반영을 확인할 수 있습니다.

Google App Engine에 배포



그렇다면 GAE에 배포됩니다. 응용 프로그램의 등록은 끝난 것을 전제로 합니다.

첫 번째 배포



우선, 최초 액세스의 경우는 인증이 필요합니다.
컨테이너에 로그인하여 인증 키를 만드세요.
$ ./run.sh
root@3d004aa982d3:/# appcfg.py --noauth_local_webserver -A simple-app-1234 -V v1 update /app/
....
Go to the following link in your browser:

    https://accounts.google.com ... ccess_type=offline

Enter verification code:

여기에서 인증 코드를 얻으라는 메시지가 표시되므로 위의 URL을 브라우저에 입력합니다.
그러면 아래와 같은 화면이 됩니다.





획득한 키를 입력하여 인증을 권장합니다.
Enter verification code: xxxxxxxxxxx
Authentication successful.

이제 첫 번째 배포는 성공입니다.



home 디렉토리를 volume로 지정하고 있으므로, 2회째 이후는 인증은 불필요합니다.

두 번째 이후



2번째 이후는 간단하게 아래의 커멘드를 로컬로부터 실행하는 것만으로 괜찮습니다.
./deploy.sh simple-app-1234 v1

요약



우선 만들어 보았습니다만, Windows라면 Python이라든지 넣는 수고가 없어지므로, 상당히 좋은 생각이 드네요.
PaaS계는 이 배포 방식이 향하고 있는 것 같네요, 어쩐지. Heroku판도 만들까.

그럼 HappyHacking!

참고


  • Google App Engine Go Standard Environment Documentation
  • Docker에서 GAE 개발 환경에 외부에서 액세스 할 때주의 사항
  • 좋은 웹페이지 즐겨찾기