参考

    • Dockerfile内でconda activateする

 

    リモートマシンのDockerコンテナにVSCodeで接続して開発するための環境づくり

開発用コンテナ

コンテナイメージはNGC Catalogから選ぶ。

FROM nvcr.io/nvidia/pytorch:22.04-py3

ARG PROXY_URL

RUN apt-get update \
    # SSHサーバをインストール
    && apt-get install -q -y ssh \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    # SSHサーバが動作するために必要なsockファイルが配置されるディレクトリを用意
    && mkdir /var/run/sshd \
    # rootでログインできるようにするため、パスワードを設定(ただしこのパスワードは使いません)
    && echo 'root:password' | chpasswd \
    # パスワードでのログインをできないようにする
    && sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config # 

# SSHで使用する公開鍵をここでコピーする
WORKDIR /
COPY id_rsa.pub /root/.ssh/authorized_keys
# SSHポートを公開する(Docker Composeで別のポートにバインドするので22番ポートのまま)
EXPOSE 22  # 必要?

# その他開発に必要なプログラムのインストールなど
RUN apt-get update

# conda仮想環境作成
RUN conda create -n myenv python=3.9
# 仮想環境の activate 
ENV CONDA_DEFAULT_ENV myenv
# コンテナログイン用設定
RUN echo "conda activate myenv" >> ~/.bashrc
RUN echo "PATH=${PATH}:/opt/conda/envs/myenv/bin" >> ~/.bashrc

# ライブラリのインストール
RUN pip install pyanom

#.bash_profileを作成し、.bashrcを読み込む(シェルスクリプト)
RUN echo "if [ -f ~/.bashrc ]; then  . ~/.bashrc;  fi" >> ~/.bash_profile
# 環境変数の書き込み
RUN echo "HTTP_PROXY=${PROXY_URL}" >> ~/.bashrc
RUN echo "http_proxy=${PROXY_URL}" >> ~/.bashrc
RUN echo "HTTPS_PROXY=${PROXY_URL}" >> ~/.bashrc
RUN echo "https_proxy=${PROXY_URL}" >> ~/.bashrc

CMD ["/usr/sbin/sshd", "-D"]
version: '2.3'
services:
  worker:
    build:
      context: ./
      args:
      - PROXY_URL=$PROXY_URL
    environment:
    - NVIDIA_VISIBLE_DEVICES=all
    - NVIDIA_DRIVER_CAPABILITIES=all
    container_name: dev
    ports:
    - "48881:22"
    volumes:
    - ${PWD}:/work
    runtime: nvidia
    working_dir: /work
PROXY_URL=http://user:pass@proxy_url:port

jupyter用コンテナ

FROM nvcr.io/nvidia/pytorch:22.04-py3

ADD ./jupyter_notebook_config.py /root/.jupyter/jupyter_notebook_config.py

# RUN pip install ...
version: '2.3'
services:
  jupyter:
    build:
      context: ./
    container_name: dev-jupyter
    ports:
    - "21000:8888"
    volumes:
    - ${PWD}:/work
    runtime: nvidia
    working_dir: /work
    command: jupyter notebook 
c = get_config()
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.token = ''
广告
将在 10 秒后关闭
bannerAds