kuroの覚え書き

96の個人的覚え書き

Dockerのコンテナをイメージに書き出して別のJetson Nanoに環境を移す

ここまでJetson Nano 2GBでDocker上にPython3環境を作ってきたが、32GBのSDカードだったためちょいと手狭になってきた。
JetsonNano B01のほうは128GBだったので一旦こっちに環境を移して続きの開発を行いたい。

ということでDocker-composeで構築したコンテナを一旦イメージに書き出そうと思う。

まずは一旦コンテナを終了する。

$ docker ps -a
CONTAINER ID   IMAGE            COMMAND     CREATED      STATUS         PORTS                                       NAMES
378becd47c1a   python_python3   "python3"   8 days ago   Up 4 minutes   0.0.0.0:5001->5001/tcp, :::5001->5001/tcp   python3

$ docker stop python3

$ docker ps -a
CONTAINER ID   IMAGE            COMMAND     CREATED      STATUS         PORTS                                       NAMES
378becd47c1a   python_python3   "python3"   8 days ago   Exited (0) 4 seconds ago   0.0.0.0:5001->5001/tcp, :::5001->5001/tcp   python3

次にコンテナをイメージに書き出す。python3のイメージをもとにしたコンテナでFlaskによるウェブアプリを構築した状態なので

$ docker commit python3 python3_flask

というふうにした。
さらにこのイメージをファイルとして取り出すため

$ docker save -o /mnt/mac/python3_flask.tar python3_flask

とした。/mnt/macはJetsonNano2GBにマウントしたMacのホームディレクトリ。

さて、一方のJetsonNanoB01の方でもDocker-composeが使えるようにした上で、さっき作った/mnt/mac/python3_flask.tarをDockerの実行ディレクトリに置く。

$ nano Dockerfile

FROM python3_flask:latest
USER root

RUN apt update
RUN apt -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

$ nano docker-compose.yml 

version: '3'
services:
  python3:
    restart: always
    build: .
    container_name: 'python3'
    working_dir: '/root/'
    tty: true
    volumes:
      - ./opt:/mnt/opt
    ports:
      - "5001:5001"

とファイルを作っておく。docker-compose.ymlは2GBで作ったものと特に変更はなく、Dockerfileの1行目のFROMの部分を自分が作ったイメージにしておく。
で、

$ docker-compose up -d --build

としてやると、自分で作ったイメージからコンテナを構築してくれる。

$ docker ps -a
CONTAINER ID   IMAGE            COMMAND     CREATED       STATUS         PORTS                                       NAMES
46b72084b844   python_python3   "python3"   2 hours ago   Up 9 minutes   0.0.0.0:5001->5001/tcp, :::5001->5001/tcp   python3

これで移植完了。特に問題なくpythonもその他インストールしたblastやclustalwプログラムも動くことを確認した。

っしかしわかっていたことだが、やっぱりJetsonNanoのARM A57 cpu @ 1.43 GHzではblastを実用的に走らせるのはきつそうだ。tblastxとか考え込んでちっとも結果が帰ってこない。SDカードの読み込み速度がそんなに速くないからか?ベンチマーク的にはHaswelなXeonより劣るくらいという話だったが、クロックが低いし4コアだからか?