なぜ記事を書くのか
- docker-composeを使ってアプリケーションを作成中に、使うソフトウェアをconda環境を使って作る必要性があった。
- GPU環境で動かすため、dockerのイメージはnvidia/cuda:10.2-cudnn7-devel-ubuntu18.04を利用していたため、公式のAnacondaイメージは使えなかった(使う方法はあったかも)
- Anacondaをインストールして、作成したコンテナをactiveにする際に非常に手こずった
- 作成したcondaコンテナでアプリケーションを起動するのに非常に手こずった
やること
- docker-composeにAnacondaをインストールする
- condaコンテナを作って、必要なライブラリをインストールする
- 作成したコンテナ内でアプリケーションを起動する
Anacondaをインストールする
FROM nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
USER root
RUN apt-get update && apt-get install -y wget && apt-get update
RUN wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
RUN bash Anaconda3-2021.05-Linux-x86_64.sh -b && rm Anaconda3-2021.05-Linux-x86_64.sh
ENV PATH $PATH:/root/anaconda3/bin
RUN conda update -n base -c defaults conda
- 公式サイトからインストーラーのダウンロードURLをコピーしてくる
- wgetでDL、bashでインストール(-bオプションでインストール中のyesやenterをスキップする)
- -bオプションを使うとPATHが通らないため、ENVでPATHを通す
- なんかアラートが出るからupdateをする
condaコンテナを作成して、Activeにする
RUN conda create -n test
SHELL ["conda", "run", "-n", "test", "/bin/bash", "-c"]
RUN pip3 install update pip && pip3 install flask
RUN conda init bash
-
conda create
で作成したいコンテナを作成する。 - SHELL 〜で作成したコンテナをactiveにする
- その後にpip installするとコンテナ内にライブラリがインストールされる
作成したコンテナ内でアプリケーションを起動する
WORKDIR /app
COPY ./app /app
CMD python3 app.py
-
CMD python3 app.py
でアプリケーションを起動する
ここが今回の肝です。
ずっと、CMD ["python3","app.py"]
でアプリケーションを起動していたのですが、それだとinstallされているはずのライブラリがインストールされておらず、No module errorが発生してしまっていました。
色々調べている中で、CMD python3 app.py
での実行の記述も見ていたのですが、同じこと書いてるわけだし関係ないか、と思ってスルーしていたのですが、ダメもとで試してみたら見事成功したので、目から鱗の発見でした。
今回の教訓
関係ないだろうと思っても試してみよう
一応docker-compose.yml
docker-compose.yml
version: '3'
services:
test:
container_name: test
build: ./digiclo-espnet
ports:
- "5000:5000"
tty: true
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "1"
restart: always
- ログがめちゃくちゃ溜まってしまうので、loggingは設定した方がいいです。
- GPU環境で実行するために、deploy以下を記載してます