nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | Pythonもくもく自習室 #11 Django Girls Tutorial翻訳、AzureにDockerイメージデプロイ続き #rettypy

はじめに

だんないよ、nikkieです。
週末は #rettypy でもくもくしてきました。

勉強会の概要

Pythonもくもく自習室 #11 @ Rettyオフィス - connpass

週末の昼下がりに、Pythonに関するやりたいことを各自持ち寄り、ゆるゆると「自習」を進めていく会です。
本を読む
PythonDjangoなどのチュートリアルをすすめる
コミュニティの作業や執筆etc...
他の参加者と情報交換をしたり学んだり
おいしいご飯と共に楽しむ(?)
など、Python使いおよびエンジニアライフのオアシス&知見を身につける「自習室」としてゆるくご活用いただければと思います。

いいご飯を楽しみつつ、Pythonの自習を進められるもくもく会です。ちょくちょくお邪魔させていただいています。

取り組んだこと

  1. Django Girls Tutorial の翻訳
  2. AzureにDockerコンテナでFlaskアプリケーションをデプロイ(ハマっている件)

Django Girls Tutorial 翻訳

5月のDjango Congress以来、翻訳に少しだけ参加しています。
今回は「インターネットはどうやって動いているの?」を訳しました。
現日本語訳をもとに英語バージョンを訳します。

今回の翻訳をもとに「ブラウザにURLを打ち込んだ後、Webサイトが表示されるまでどうなっているの?」という質問に答えると次のような感じでしょうか。

  • サーバはリクエストを受けて応答としてWebサイトを返す(☆)
  • ブラウザにより、WebサイトがHTMLのコードに沿って表示される

(☆)の部分、言葉を補うと、

  • Webサイトはコンピュータに保存されたファイル
    • このコンピュータをサーバという
  • インターネットは全てのコンピュータ同士が直接つながっているわけではない
    • →異なるマシンを介してリクエストを届ける
    • 手紙(リクエスト)を郵便局(ルータ)の間で転送しながら目的のサーバまで届けるイメージ

Djangoだと個別のWebサイトを表示できるんですよで結んでいて、学習者の興味を惹きつけていますね。

AzureにDockerイメージでデプロイ

相変わらずハマっていました。。

前回は./boot.sh: no such file or directoryが解決できず。
イベントレポート | 第29回 Pythonもくもく会 〜AzureにDockerイメージがBuild, Ship, Runできずハマりました。。〜 #mokupy - nikkie-ftnextの日記

boot.shがないわけないだろうとAzureにデプロイしたコンテナにSSHする方法を探す。
Azure App Service on Linux での SSH のサポート | Microsoft Docs
→alpineイメージではapt-getに当たる方法がわからず、別の方法模索に切り替え。

前例を発見: GitHub - danriti/gunicorn-flask: Dockerfile for Gunicorn + Flask
これはAzureにデプロイすると動いた。
そこでDockerfileの記述など見比べて、原因特定を進めた。
触ってみるとPython2系であることが判明。
3系で動かすように設定してみたが、Azureにデプロイすると動かない。。

Linux環境にPythonアプリケーションをデプロイする方法について調べればいいのではとご助言いただきました。
また、学習リソースとして『Pythonプロフェッショナルプログラミング(第3版)』教えていただきました。ありがとうございます!

感想

  • Bokehのテンプレートエンジンが便利そう。Webページに埋め込める!
  • 並列処理にはgevent
    • Pythonプロフェッショナルプログラミング(第3版)』みたらabコマンド(ApacheBench)が紹介されていました。
  • Python3.7の@dataclass便利そう。クラスに順序関数など自動で実装してくれるのはありがたい
  • 『Clean Code』によると関数にbooleanの引数追加は悪とのこと。自分思い当たる節があります。これは読みたい
  • Pythonを仕事にしたいという方に『独学プログラマー』の情報をシェアすればよかったと帰ってから気づいた。Pythonだけじゃなくて、コマンドラインやバージョン管理など、仕事にするにはどこまで必要かの参考になる本だと思います。

皆さん、1日どうもありがとうございました!

後日談: AzureにDockerイメージでデプロイ成功!!

python:3.6-alpineイメージをpython:3.6イメージに変更したら、Azureでも動きました!

boot.shを指定せずにFlaskアプリケーションを動かせばいいのではないかと考えた。
別の前例を発見: GitHub - chhantyal/flask-docker: Fastest way to ship Python web apps, anywhere. Be shipping 🚀 (using Docker, Flask, Gunicorn, Whitenoise)
Dockerfileを見比べながら試したところ、デプロイするとModuleNotFoundErrorが発生。(ローカルで動かすコンテナでは発生しない)
→ENTRYPOINT命令やCMD命令ではなくベースイメージが怪しいと思い始める。
python:3.6Hello Worldするイメージ1を作りデプロイしたところ動いた!(もちろんローカルでも動きます)
alpineでなぜダメなのかはわかっていない(宿題事項)
イメージのサイズが大きいためか初回アクセス時は表示まで数分かかる感触です。。(これも宿題)


  1. 近日中にDockerHub整理して公開します。