LoginSignup
25
17

More than 3 years have passed since last update.

miniconda+conda-forgeでの開発環境をDockerでそろえる

Last updated at Posted at 2021-03-14

はじめに

Anacondaの有償化に伴い、こちらでminiconda+conda-forgeに関する運用の記事を書いたところ、そこそこに反響があったので、今回はDockerで開発環境を揃えるところをご紹介したい。

環境

私がWindows派であり、condaはケモインフォマティクスをやるために利用しているため、今回は以下の構成で説明する。またWebアプリの開発を想定してDjangoも用意することする。

  • Windows 10
  • python 3.7
  • django 3系 (WEBアプリフレームワーク)
  • Pytorch 1.7 cpu版 (ディープラーニングフレームワーク)
  • RDKit (ケモインフォマティクスライブラリ)
  • gunicorn (WEBサーバ)

手順

Dockerのインストール

まずは以下に従ってDockerをインストールしよう。

Dockerfileの作成

続いて以下のようにDockerfileを作成しよう。


FROM continuumio/miniconda3

# conda create
RUN conda create -n chemodel python==3.7 

# install conda package
SHELL ["conda", "run", "-n", "chemodel", "/bin/bash", "-c"]
RUN conda install django=3.* -c conda-forge --override-channels
RUN conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cpuonly -c pytorch -c conda-forge -c tboyer --override-channels 
RUN conda install -c rdkit -c conda-forge rdkit --override-channels

# install pip package
RUN pip3 install --upgrade pip
RUN pip3 install gunicorn

Dockerfileについて解説する

  • まず、FROM~のところで、minocondaのベースイメージを指定する。
  • 続いて、RUN conda create -n chemodel python==3.7で、作成したいPythonのバージョンでConda仮想環境を作成する。
  • SHELL~の行でその仮想環境をActivateする。ここが今回の最大の肝で、この方法を間違えると、それ以降のconda installによるインストールが、作成した仮想環境ではなく、base環境に反映されてしまうのだ。
  • ここまでくれば、その後は、conda, pipで各自インストールしたいものを列挙すればOKだ。Anaconda有償化の影響をうけ、チャネルやオプションの指定は、前回の記事を参考にしてほしい。
  • pytorch1.7は、pytorch, conda-forgeだけからではインストールできなかったっぽかったので、tboyerというマイナーなチャネルを指定したが、危険だと思われる方は別のPyTorchのバージョンを指定してみてほしい。

Dockerイメージのビルド

作成したDockerfileのあるフォルダで以下を実行するとビルドできるはずだ。

docker build -t kimisyo/dev:1.0 -f Dockerfile ./

Dockerイメージの確認

docker imagesでイメージができたか確認してみよう。

$ docker images 
REPOSITORY                         TAG       IMAGE ID       CREATED        SIZE
kimisyo/dev                        1.0       90cbde3916c9   17 hours ago   3.33GB

Dockerコンテナの起動

Djangoアプリを作成し、以下のようにDockerコンテナを起動すると、http://locahost:8080/ で、作成したDjangoアプリを参照できるはずだ。

$docker run -itd -p 8080:8000 --name chemodel --mount type=bind,src=<Djangoのプロジェクトがあるフォルダを絶対パスで指定>, target=/chemodel,readonly kimisyo/dev:1.0 /bin/bash -c "conda run -n chemodel;
 cd /chemodel/; /opt/conda/envs/chemodel/bin/gunicorn --bind 0.0.0.0:8000 chemodel.wsgi"

ちょっと分かりにくいので簡単に説明する。

  • -p 8080:8000は、Dockerコンテナ側の8000ポートをローカルの8080ポートで参照できるようにするための指定である。
  • -mountオプションでは、ローカルにあるDjangoプロジェクトのフォルダを、コンテナ側で認識させるために /chemodelというフォルダにマウントしている。
  • 最後の/bin/bash -c "conda run -n chemodel; cd /chemodel/; /opt/conda/envs/chemodel/bin/gunicorn --bind 0.0.0.0:8000 chemodel.wsgi"ではコンテナ起動時に、conda仮想環境をActivateし、コンテナ内のDjangoアプリフォルダに移動し、gunicornによりDjangoアプリを起動している。

おわりに

一度開発環境を作ってしまえば、毎回パッケージをインストールする必要もなく、本番環境もDockerで簡単にデプロイしてしまうこともできそうだ。Hava a good miniconda+conda-forge & Docker Life!

参考

25
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
17