hrsano645 / covid19-gen-datajson-shizuokapref

静岡県版 新型コロナウイルス対策サイトのdata.jsonを生成するスクリプト
1 stars 3 forks source link

Dockerで動作とテスト環境を用意する #47

Closed hrsano645 closed 3 years ago

hrsano645 commented 3 years ago

🐞課題の詳細

⛏ 課題の解決方法案

hrsano645 commented 3 years ago

欲しい要件を書いておくと、このぐらいかと思ってます。

dockerで生成したファイルをどうやって保存するかがいまいちわかってないです。docker-composeのボリュームを使う?

aktnk commented 3 years ago
  1. 具体的にどんな風に使いたいかですが、下記のような感じで、patients.pyなどが実行できるとよいですね。
    • git clone 後、cd covid19-gen-datajson-hsizuokaprefする
    • docker-compose buildし、pythonイメージダウンロード、必要なモジュールのインストールしたコンテナイメージができる
    • docker-compose upでコンテナを実行
    • docker-compose exec <docker-compose.ymlで記述したサービス名> bashでコンテナ内に入り
    • bat,shを実行すると、data.json、news.jsonが生成される

多分これができれば、その中で変更したりもできるかと思います。

  1. 上記で生成されたファイルですが、下記のような感じでカレントディレクトリをコンテナ側とバインドマウントすれば、 コンテナを削除してもホストのカレントディレクトリに残ります。 docker-compose.yml内で
    volumes:
      - ".:/work"
hrsano645 commented 3 years ago

Dockerの理解度を深めつつ作業進めてようやく動くようになってきました。

https://github.com/hrsano645/covid19-gen-datajson-shizuokapref/tree/109f97e804ec14fd762078fbbae5664cc046790f

起動は docker-compose up --build です。実行するとdistディレクトリを作り、その中にDockerコンテナ側で生成したdata.json, news.jsonを保持してくれます。(これをやりたいけど理解不足で進んでなかったです

既知の問題としては、ホストOSがLinuxだと生成されたdistディレクトリがrootユーザーになってしまいます。cpとかでコピーしちゃえばあんまり気にしなくてもいいかもしれません。

参考:

hrsano645 commented 3 years ago

実行はできるようになりましたが、開発向けのテストはできないので、開発用のDockerfile, docker-composeは合ってもよいかもしれません。(別のissueにしたほうがよさそう)

aktnk commented 3 years ago

ホストOSがLinuxのとき、ホスト側で作成したファイルは自分の所有になり、コンテナ内で作成したファイルはDockerfileで指定したユーザー(特に指定しなければroot)の所有になるってことですね。

例えば、docker-compose.ymlでコンテナ実行ユーザーのuid:gidを指定すればよいのですが、下記のようにいろいろやらないとだめですね。 https://qiita.com/cheekykorkind/items/ba912b62d1f59ea1b41e

ここは割り切って、dockerはwindowsユーザー用ということでどうでしょう? Linuxならgit cloneして、Pythonモジュールを仮想環境で入れれば、汚さずにかつ、簡単に実行できるので。

hrsano645 commented 3 years ago

例えば、docker-compose.ymlでコンテナ実行ユーザーのuid:gidを指定すればよいのですが、下記のようにいろいろやらないとだめですね。 https://qiita.com/cheekykorkind/items/ba912b62d1f59ea1b41e

そうですね。dockerの良いところがなくなってしまうなあと悩んでました。

ここは割り切って、dockerはwindowsユーザー用ということでどうでしょう? Linuxならgit cloneして、Pythonモジュールを仮想環境で入れれば、汚さずにかつ、簡単に実行できるので。

その考えで行こうと思います。macとwinで動作して問題なさそうでしたらPR出します。 現状linuxで生成したファイルはcpすれば使えるのでそれほど気にはならないと思いますし。

hrsano645 commented 3 years ago

Docker for Winでの動作確認しました。

(念のためハマったので書いておきますが)Git for Winで改行コードを自動変換(autocrlf)しているときはdocker_bat.shは動かないので、git clone時には git configであらかじめ設定したうえの実行が必要です。

hrsano645 commented 3 years ago

Docker for Macの動作確認ですが、私が持っているMacbook AirがM1で検証してもMac対応とは言いづらいので、Win対応ということのみにしようと思います。

hrsano645 commented 3 years ago

Docker for Macの動作確認ですが、私が持っているMacbook AirがM1で検証してもMac対応とは言いづらいので、Win対応ということのみにしようと思います。

念のためにMacbook Air M1 + Docker Desktop RC 3にて動作確認済みです。