LoginSignup
3
2

More than 1 year has passed since last update.

Docker-ComposeでAnaconda環境を構築して、condaコンテナ内でアプリを起動する

Posted at

なぜ記事を書くのか

  • docker-composeを使ってアプリケーションを作成中に、使うソフトウェアをconda環境を使って作る必要性があった。
  • GPU環境で動かすため、dockerのイメージはnvidia/cuda:10.2-cudnn7-devel-ubuntu18.04を利用していたため、公式のAnacondaイメージは使えなかった(使う方法はあったかも)
  • Anacondaをインストールして、作成したコンテナをactiveにする際に非常に手こずった
  • 作成したcondaコンテナでアプリケーションを起動するのに非常に手こずった

やること

  1. docker-composeにAnacondaをインストールする
  2. condaコンテナを作って、必要なライブラリをインストールする
  3. 作成したコンテナ内でアプリケーションを起動する

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
  1. 公式サイトからインストーラーのダウンロードURLをコピーしてくる
  2. wgetでDL、bashでインストール(-bオプションでインストール中のyesやenterをスキップする)
  3. -bオプションを使うとPATHが通らないため、ENVでPATHを通す
  4. なんかアラートが出るから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
  1. conda createで作成したいコンテナを作成する。
  2. SHELL 〜で作成したコンテナをactiveにする
  3. その後にpip installするとコンテナ内にライブラリがインストールされる

作成したコンテナ内でアプリケーションを起動する

WORKDIR /app
COPY ./app /app
CMD python3 app.py
  1. 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以下を記載してます
3
2
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
3
2