0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeのターミナルにて作業を行うことを想定している
なおDocker desktopにて動作を確認

2025.7/2 Pymolのインストールに成功したので追記(pipで確認するとバージョンは3.2だが、画面表示がLegacy感があり、かつCPU負荷も大きいので表示だけに関してはバイナリ版の方がきれいかも。まぁフリー枠と思えばまぁ…)

Docker環境の作成

こちらをDockerfileに落とし込んだだけ
以前作成したPytorch+GPU用のDocker環境を流用しているためPythonなどもインストールされることに注意
このDockerfileにて後半のVMD用のライブラリもインストールしておく

Dockerfile
# CUDA 12.8 + Python 3.11 環境
# nvidia/以下のcuda~から、Docker hubから探してくるといいでしょう
FROM nvcr.io/nvidia/cuda:12.8.0-cudnn-devel-ubuntu24.04

# 作業ディレクトリ
WORKDIR /workspace/src

# タイムゾーンの選択を自動化する
ENV DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && echo "Asia/Tokyo" > /etc/timezone

# 必要なツールをインストール
# 比較的新しいバージョンのPythonはaptの公式のライブラリに存在しません
# なので新しいPythonが必要な場合はそれがあるディストリビューションからとってきます
# セキュリティ上の問題がある場合は自力でコンパイルすことになるかと思います
# ppaディストリビューションから取ってきた場合はTkinterの関係でトラブルが生じたので
# バージョンをある程度許容してTkinterに対応するようにします
# Python3.12まではディストリビューションにあるようなのでそこから取ってきます
# 仮想環境にPipインストールしないとエラーが出てしまうのでpythonXXX-venvも入れます
# Libx関係はXサーバー関係なようですがよくわかりません…
# x11-appsも入れているのでxeyesというLinuxプログラムが動くはずなので
# ターミナルからのxeyesの実行でエラーが生じるのであればXサーバー関係の通信に問題があるのでしょう
RUN apt-get update && apt-get install -y \
    software-properties-common \
    wget \
    git \
    build-essential \
    curl \
    python3.12 \
    python3.12-venv \
    python3-pip \
    libx11-dev \
    libxext-dev \
    libxrender-dev \
    libx11-6 \
    libxext6 \
    libxrender1 \
    python3-pil \
    python3-tk \
    python3-pil.imagetk \
    tk-dev \
    x11-apps \
    libssl-dev \
    zlib1g-dev \
    libncurses5-dev \
    pkg-config \
    cmake \
    libfftw3-dev \
    libglu1-mesa \
    libgl1 \
    libxi6 \
    libxrandr2 \
    libxcursor1 \
    libxinerama1 \
    libxxf86vm1 \
    libdbus-1-3 \
    && rm -rf /var/lib/apt/lists/*

# CMAKEのインストール
RUN cd /tmp && \
    mkdir cmake_latest && \
    wget https://github.com/Kitware/CMake/releases/download/v3.31.6/cmake-3.31.6.tar.gz && \
    tar zxvf cmake-3.31.6.tar.gz && \
    cd cmake-3.31.6 && \
    ./bootstrap --prefix=/opt/cmake/3.31.6 --parallel=4 && \
    make -j4 && \
    make install
# パスを通す(必要に応じて)
ENV PATH="/opt/cmake/3.31.6/bin:${PATH}"

# Gromacsのインストール
# GROMACS のビルド(Dockerfile内に入れる場合)
RUN cd /tmp && \
    curl -LO https://ftp.gromacs.org/gromacs/gromacs-2025.2.tar.gz && \
    tar zxvf gromacs-2025.2.tar.gz && \
    cd gromacs-2025.2 && mkdir build && cd build && \
    cmake .. \
        -DCMAKE_INSTALL_PREFIX=/opt/gromacs/2025.2 \
        -DCMAKE_C_COMPILER=gcc \
        -DCMAKE_CXX_COMPILER=g++ \
        -DGMX_MPI=OFF \
        -DGMX_DOUBLE=OFF \
        -DGMX_OPENMP=ON \
        -DGMX_GPU=CUDA && \
    make -j$(nproc) && \
    make install
ENV PATH="/opt/gromacs/2025.2/bin:${PATH}"

# Pythonのシンボリックリンクを作成
# インストールしたPythonのバージョンと同じものを
# 仮想環境のPythonを使うことにするので不要でいいでしょう
# RUN ln -s $(which python3.12) /usr/bin/python

# pipのインストール(distutils なしで問題なく動作する方法)
# pipはapt-getからのインストールに変更しています
# RUN curl -sSL https://bootstrap.pypa.io/get-pip.py | python

#requirements.txtをコンテナ内にコピーする
COPY requirements.txt ./

# 必要なPythonライブラリをインストール

# 共通領域にpipでインストールすると「環境を汚すな」と怒られるようになったようです@Ubuntu24.04以降
#RUN pip install --upgrade --break-system-packages pip
#RUN pip install --no-cache-dir -r --break-system-packages requirements.txt

# なぜか作業ディレクトリには仮想環境を作ってくれませんでした…
# RUN python3 -m venv /workspace/src/venv \
#     && /workspace/src/venv/bin/pip install --upgrade pip \
#     && /workspace/src/venv/bin/pip install --no-cache-dir -r requirements.txt

# /rootにはうまく作れたのでそこにpip installしています
RUN python3.12 -m venv /root/venv \
    && /root/venv/bin/pip install --upgrade pip \
    && /root/venv/bin/pip install --no-cache-dir -r requirements.txt

# Gitの設定を行う
RUN git config --global core.editor 'code --wait'
devcontainer.json
{
    "name": "Python VScode GPU",                    // VScodeがコンテナに接続したときのタイトルを自由に設定
    "dockerComposeFile": "docker-compose.yml",  // docker-conpose.ymlファイルを指定
    "service": "python",                        // docker-conpose.ymlファイル内に記載したサービス名を指定
    "workspaceFolder": "/workspace/src",         // VScode接続時に開くフォルダを指定
    "runArgs": ["--gpus", "all", "--shm-size", "64gb"], //GPUを使うことを明記、--shm-sizeはよくわからん…
    "customizations": {
        "vscode": {
            "extensions": [                     // コンテナ作成時にインストールする拡張機能を記載
                "ms-python.python",             // python拡張機能
                "ms-python.debugpy",            // pythonのデバッガ
                "ms-python.vscode-pylance",     // pythonのインテリセンス
                "mechatroner.rainbow-csv",       //CSV操作の拡張機能
                "donjayamanne.githistory",      //Gitのツリーを見る
                "eamodio.gitlens"               //Gitlens
            ],
            "settings": {                       // VScodeの設定を記載
                "files.autoSave": "afterDelay",  // ファイルのオートセーブ
                //rootに作った仮想環境にPathを通します
                "python.defaultInterpreterPath": "/root/venv/bin/python3.12",
                //デバッグ時にターミナルをクリアする
                "debug.terminal.clearBeforeReusing": true

            }
        }
    }
}
docker-compose.yml
services:                           # サービスを定義しますという決まり文句
  python:                           # pythonという名前でサービスを定義
    image: cuda:12_8             # イメージのREPOSITORY名:TAG名を指定
    build: .                        # Dockerfileを相対パスで指定
    container_name: gromacs    # 作成されるコンテナ名を指定
    working_dir: /workspace/src     # 作業ディレクトリを指定 (←コンテナ内の作業ディレクトリ
    volumes:                        # マウントするファイルを指定する
      -  ../:/workspace/src       # ローカルのカレントディレクトリをコンテナのworkspace/srcにマウント
      # WSLg
      # 2つ目の方は不要かもしれません。。。
      - /tmp/.X11-unix:/tmp/.X11-unix
      - /mnt/wslg:/mnt/wslg
    environment:
      # WSLg
      # WSLgを使うものについては未検証です。。。
      # - DISPLAY=$DISPLAY
      # - WAYLAND_DISPLAY=$WAYLAND_DISPLAY
      # - XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR
      # - PULSE_SERVER=$PULSE_SERVER
      # VcXsrv
      # ディスプレイをDocker上のLinuxからWindowsに送るように指示する
      DISPLAY: host.docker.internal:0.0
    tty: true                       # コンテナを起動し続ける
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
requirements.txt
numpy
pandas
polars
matplotlib
seaborn
scikit-learn
torch --index-url https://download.pytorch.org/whl/cu128
torchvision --index-url https://download.pytorch.org/whl/cu128
torchaudio --index-url https://download.pytorch.org/whl/cu128

gmx --versionコマンドが動作することを確認する

VMDをインストールする

VMDはダウンロードにライセンス処理が必要なので、Dockerfileに含めることはできない。
下記からダウンロードして作業ディレクトリに置いておくこと

コマンド

#VMD圧縮ファイルを解凍
# ダウンロードしたファイル名に合わせて変更すること
tar -xzvf vmd-1.9.4a57.bin.LINUXAMD64-CUDA102-OptiX650-OSPRay185.opengl.tar.gz
# 生成されたフォルダ名に応じて変更すること
cd vmd-1.9.4a57

# Makefileの作成
# Configureファイル内でインストール先のディレクトリをいじれる
./configure
# コンパイルの実行
cd src
make install

インストールに成功すればvmdコマンドにて起動できる。
なおXサーバーが必要となるので事前にインストールの上で起動しておくこと

Pymolのインストール(25.7/2追記)

公式のリポジトリは以下

Dockerfile
# CUDA 12.8 + Python 3.11 環境
# nvidia/以下のcuda~から、Docker hubから探してくるといいでしょう
FROM nvcr.io/nvidia/cuda:12.8.0-cudnn-devel-ubuntu24.04

# 作業ディレクトリ
WORKDIR /workspace/src

# タイムゾーンの選択を自動化する
ENV DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && echo "Asia/Tokyo" > /etc/timezone

# 必要なツールをインストール
# 比較的新しいバージョンのPythonはaptの公式のライブラリに存在しません
# なので新しいPythonが必要な場合はそれがあるディストリビューションからとってきます
# セキュリティ上の問題がある場合は自力でコンパイルすことになるかと思います
# ppaディストリビューションから取ってきた場合はTkinterの関係でトラブルが生じたので
# バージョンをある程度許容してTkinterに対応するようにします
# Python3.12まではディストリビューションにあるようなのでそこから取ってきます
# 仮想環境にPipインストールしないとエラーが出てしまうのでpythonXXX-venvも入れます
# Libx関係はXサーバー関係なようですがよくわかりません…
# x11-appsも入れているのでxeyesというLinuxプログラムが動くはずなので
# ターミナルからのxeyesの実行でエラーが生じるのであればXサーバー関係の通信に問題があるのでしょう
RUN apt-get update && apt-get install -y \
    software-properties-common \
    wget \
    git \
    build-essential \
    curl \
    python3.12 \
    python3.12-venv \
    python3-pip \
    libx11-dev \
    libxext-dev \
    libxrender-dev \
    libx11-6 \
    libxext6 \
    libxrender1 \
    python3-pil \
    python3-tk \
    python3-pil.imagetk \
    tk-dev \
    x11-apps \
    libssl-dev \
    zlib1g-dev \
    libncurses5-dev \
    pkg-config \
    cmake \
    libfftw3-dev \
    libglu1-mesa \
    libgl1 \
    libxi6 \
    libxrandr2 \
    libxcursor1 \
    libxinerama1 \
    libxxf86vm1 \
    libdbus-1-3 \
    && rm -rf /var/lib/apt/lists/*

# Pymolに必要な追加インストール
RUN apt-get update && apt-get install -y \
    python3.12-dev \
    libglew-dev \
    freeglut3-dev \
    libpng-dev \
    libfreetype6-dev \
    libxml2-dev \
    libglm-dev \
    libmsgpack-dev \
    libnetcdf-dev \
    libglu1-mesa-dev \
    python3-pyqt5 \
    && rm -rf /var/lib/apt/lists/*


# CMAKEのインストール
RUN cd /tmp && \
    mkdir cmake_latest && \
    wget https://github.com/Kitware/CMake/releases/download/v3.31.6/cmake-3.31.6.tar.gz && \
    tar zxvf cmake-3.31.6.tar.gz && \
    cd cmake-3.31.6 && \
    ./bootstrap --prefix=/opt/cmake/3.31.6 --parallel=4 && \
    make -j4 && \
    make install
# パスを通す(必要に応じて)
ENV PATH="/opt/cmake/3.31.6/bin:${PATH}"

# Gromacsのインストール
# GROMACS のビルド(Dockerfile内に入れる場合)
RUN cd /tmp && \
    curl -LO https://ftp.gromacs.org/gromacs/gromacs-2025.2.tar.gz && \
    tar zxvf gromacs-2025.2.tar.gz && \
    cd gromacs-2025.2 && mkdir build && cd build && \
    cmake .. \
        -DCMAKE_INSTALL_PREFIX=/opt/gromacs/2025.2 \
        -DCMAKE_C_COMPILER=gcc \
        -DCMAKE_CXX_COMPILER=g++ \
        -DGMX_MPI=OFF \
        -DGMX_DOUBLE=OFF \
        -DGMX_OPENMP=ON \
        -DGMX_GPU=CUDA && \
    make -j$(nproc) && \
    make install
ENV PATH="/opt/gromacs/2025.2/bin:${PATH}"

# Pythonのシンボリックリンクを作成
# インストールしたPythonのバージョンと同じものを
# 仮想環境のPythonを使うことにするので不要でいいでしょう
# RUN ln -s $(which python3.12) /usr/bin/python

# pipのインストール(distutils なしで問題なく動作する方法)
# pipはapt-getからのインストールに変更しています
# RUN curl -sSL https://bootstrap.pypa.io/get-pip.py | python

#requirements.txtをコンテナ内にコピーする
COPY requirements.txt ./

# 必要なPythonライブラリをインストール

# 共通領域にpipでインストールすると「環境を汚すな」と怒られるようになったようです@Ubuntu24.04以降
#RUN pip install --upgrade --break-system-packages pip
#RUN pip install --no-cache-dir -r --break-system-packages requirements.txt

# なぜか作業ディレクトリには仮想環境を作ってくれませんでした…
# RUN python3 -m venv /workspace/src/venv \
#     && /workspace/src/venv/bin/pip install --upgrade pip \
#     && /workspace/src/venv/bin/pip install --no-cache-dir -r requirements.txt

# /rootにはうまく作れたのでそこにpip installしています
RUN python3.12 -m venv /root/venv \
    && /root/venv/bin/pip install --upgrade pip \
    && /root/venv/bin/pip install --no-cache-dir -r requirements.txt


# Pymolのインストール
RUN cd /tmp && \
    mkdir pymol && \
    cd pymol &&\
    git clone https://github.com/schrodinger/pmw-patched.git && \
    cd pmw-patched && /root/venv/bin/python setup.py install && \
    cd /tmp/pymol && \
    git clone https://github.com/schrodinger/pymol-open-source.git && \
    git clone https://github.com/rcsb/mmtf-cpp.git && \
    cp -R mmtf-cpp/include/mmtf* pymol-open-source/include/ && \
    cd pymol-open-source && \
    /root/venv/bin/python setup.py install \
    --pymol-path=/opt/pymol \
    --glut=true \
    --no-launcher

# Gitの設定を行う
RUN git config --global core.editor 'code --wait'

rcsbのインストールがGit経由ということに気付けずに大変だった…
改めて公式のInstallの項目を見ると必要な依存関係が網羅されているんですよね…(だた pip install . では追加の独自フラグを入れられないという落とし穴ががが)
当環境で確認した事項ですが、
本体が/root/venv/bin/pymolにインストールされ、そこに対して環境変数が通っているのでコマンドプロンプトからpymolと打ち込むだけでPymolは起動します。
オープンソース版なのでライセンス表記はないですが、表示のLegacy感や動作のもっさり感を考慮するとやや使いにくいかも…座標ファイルの変換に使っていきたい所存。

さらにGromacsのPython対応も適応する

Dockerfile
# CUDA 12.8 + Python 3.11 環境
# nvidia/以下のcuda~から、Docker hubから探してくるといいでしょう
FROM nvcr.io/nvidia/cuda:12.8.0-cudnn-devel-ubuntu24.04

# 作業ディレクトリ
WORKDIR /workspace/src

# タイムゾーンの選択を自動化する
ENV DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && echo "Asia/Tokyo" > /etc/timezone

# 必要なツールをインストール
# 比較的新しいバージョンのPythonはaptの公式のライブラリに存在しません
# なので新しいPythonが必要な場合はそれがあるディストリビューションからとってきます
# セキュリティ上の問題がある場合は自力でコンパイルすことになるかと思います
# ppaディストリビューションから取ってきた場合はTkinterの関係でトラブルが生じたので
# バージョンをある程度許容してTkinterに対応するようにします
# Python3.12まではディストリビューションにあるようなのでそこから取ってきます
# 仮想環境にPipインストールしないとエラーが出てしまうのでpythonXXX-venvも入れます
# Libx関係はXサーバー関係なようですがよくわかりません…
# x11-appsも入れているのでxeyesというLinuxプログラムが動くはずなので
# ターミナルからのxeyesの実行でエラーが生じるのであればXサーバー関係の通信に問題があるのでしょう
RUN apt-get update && apt-get install -y \
    software-properties-common \
    wget \
    git \
    build-essential \
    curl \
    python3.12 \
    python3.12-venv \
    python3-pip \
    libx11-dev \
    libxext-dev \
    libxrender-dev \
    libx11-6 \
    libxext6 \
    libxrender1 \
    python3-pil \
    python3-tk \
    python3-pil.imagetk \
    tk-dev \
    x11-apps \
    libssl-dev \
    zlib1g-dev \
    libncurses5-dev \
    pkg-config \
    cmake \
    libfftw3-dev \
    libglu1-mesa \
    libgl1 \
    libxi6 \
    libxrandr2 \
    libxcursor1 \
    libxinerama1 \
    libxxf86vm1 \
    libdbus-1-3 \
    libopenmpi-dev \
    openmpi-bin \
    mpi-default-bin \
    mpi-default-dev \
    && rm -rf /var/lib/apt/lists/*

# Pymolに必要な追加インストール
RUN apt-get update && apt-get install -y \
    python3.12-dev \
    libglew-dev \
    freeglut3-dev \
    libpng-dev \
    libfreetype6-dev \
    libxml2-dev \
    libglm-dev \
    libmsgpack-dev \
    libnetcdf-dev \
    libglu1-mesa-dev \
    python3-pyqt5 \
    && rm -rf /var/lib/apt/lists/*


# CMAKEのインストール
RUN cd /tmp && \
    mkdir cmake_latest && \
    wget https://github.com/Kitware/CMake/releases/download/v3.31.6/cmake-3.31.6.tar.gz && \
    tar zxvf cmake-3.31.6.tar.gz && \
    cd cmake-3.31.6 && \
    ./bootstrap --prefix=/opt/cmake/3.31.6 --parallel=4 && \
    make -j4 && \
    make install
# パスを通す(必要に応じて)
ENV PATH="/opt/cmake/3.31.6/bin:${PATH}"

# Gromacsのインストール
# GROMACS のビルド(Dockerfile内に入れる場合)
RUN cd /tmp && \
    curl -LO https://ftp.gromacs.org/gromacs/gromacs-2025.2.tar.gz && \
    tar zxvf gromacs-2025.2.tar.gz && \
    cd gromacs-2025.2 && mkdir build && cd build && \
    cmake .. \
        -DGMXAPI=ON \
        -DBUILD_SHARED_LIBS=ON \
        -DCMAKE_INSTALL_PREFIX=/opt/gromacs/2025.2 \
        -DCMAKE_C_COMPILER=mpicc \
        -DCMAKE_CXX_COMPILER=mpicxx \
        -DGMX_MPI=ON \
        -DGMX_DOUBLE=OFF \
        -DGMX_OPENMP=ON \
        -DGMX_GPU=CUDA && \
    make -j$(nproc) && \
    make install
ENV PATH="/opt/gromacs/2025.2/bin:${PATH}"

# Pythonのシンボリックリンクを作成
# インストールしたPythonのバージョンと同じものを
# 仮想環境のPythonを使うことにするので不要でいいでしょう
# RUN ln -s $(which python3.12) /usr/bin/python

# pipのインストール(distutils なしで問題なく動作する方法)
# pipはapt-getからのインストールに変更しています
# RUN curl -sSL https://bootstrap.pypa.io/get-pip.py | python

#requirements.txtをコンテナ内にコピーする
COPY requirements.txt ./

# 必要なPythonライブラリをインストール

# 共通領域にpipでインストールすると「環境を汚すな」と怒られるようになったようです@Ubuntu24.04以降
#RUN pip install --upgrade --break-system-packages pip
#RUN pip install --no-cache-dir -r --break-system-packages requirements.txt

# なぜか作業ディレクトリには仮想環境を作ってくれませんでした…
# RUN python3 -m venv /workspace/src/venv \
#     && /workspace/src/venv/bin/pip install --upgrade pip \
#     && /workspace/src/venv/bin/pip install --no-cache-dir -r requirements.txt

# /rootにはうまく作れたのでそこにpip installしています
RUN python3.12 -m venv /root/venv \
    && /root/venv/bin/pip install --upgrade pip \
    && /root/venv/bin/pip install --no-cache-dir -r requirements.txt


# Pymolのインストール
RUN cd /tmp && \
    mkdir pymol && \
    cd pymol &&\
    git clone https://github.com/schrodinger/pmw-patched.git && \
    cd pmw-patched && /root/venv/bin/python setup.py install && \
    cd /tmp/pymol && \
    git clone https://github.com/schrodinger/pymol-open-source.git && \
    git clone https://github.com/rcsb/mmtf-cpp.git && \
    cp -R mmtf-cpp/include/mmtf* pymol-open-source/include/ && \
    cd pymol-open-source && \
    /root/venv/bin/python setup.py install \
    --pymol-path=/opt/pymol \
    --glut=true \
    --no-launcher

# Gromacs for pythonをインストール
RUN . /opt/gromacs/2025.2/bin/GMXRC && \
    /root/venv/bin/pip install mpi4py && \
    /root/venv/bin/pip install gmxapi

# Gitの設定を行う
RUN git config --global core.editor 'code --wait'
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?