Dockerfile内でconda activateする

公開されているコードを試す際、セットアップにconda activate xxxx が必要な場合がある。

以下のissueを参考にconda activateした状態でインストールを行うことができたのでメモ。
Activating environment in dockerfile - related to #81 · Issue #89 · ContinuumIO/docker-images · GitHub

解決方法

Dockerfileに以下の様に記述する。myenvが仮想環境の名前。

FROM continuumio/miniconda3

# create myenv
RUN conda create -n myenv python=3.6

# activate myenv
ENV CONDA_DEFAULT_ENV vilbert-mt

# env setting(こちらはコンテナに入った時のため)
RUN echo "conda activate myenv" >> ~/.bashrc
ENV PATH /opt/conda/envs/vilbert-mt/bin:$PATH

その他の解決方法

conda run を使う方法

こちらの記事を参考にした。こちらでもactivateが適用された状態でインストールができることは確認済み。ただし、コンテナを起動した際の環境は baseのままになる。
Activating a Conda environment in your Dockerfile

Dockerfileに以下のように記述する

FROM continuumio/miniconda3

RUN conda create -n myenv python=3.6
SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"]

conda activateと&&で接続して行う方法

冒頭のissueに書いてあるもの。RUNは実行毎に独立しており設定が引き継がれないので、conda activateしても次のRUNではactivateされていない状態で処理が行われるらしい。
それを回避するためにスタックして書けば良いとのこと。

FROM continuumio/miniconda3

RUN conda create -n myenv python=3.6

RUN /bin/bash -c ". activate myenv" && \
    pip install pandas && \ 
    pip install ../mylocal_package/