Help us understand the problem. What is going on with this article?

docker メモ

概要

docker を使うたびに毎回ググっていて非効率的なので自分がよく使うものをまとめました。
そのうち内容を追加するかもしれないです。
本記事の任意の内容は暗黙的に (おれだったらこうする) の意を込めているので、参考にされる場合は適宜修正してもらえばと思います。

ベターな方法あるよ〜 / 間違ってるよ〜などあったら教えていただけると助かります。

前提

リモートサーバー上にコンテナを立てて中で機械学習したい。

コンテナ編

コンテナを立てる

コンテナを立てる時にすることは、

  1. コンテナに名前をつける
    • --name $CONTAINER_NAME
  2. マウントするディレクトリを指定する
    • -v $DIR_SERVER:$DIR_CONTAINER
    • マウントするディレクトリが前、コンテナ内にマウントしたディレクトリを配置する場所が後
    • ディレクトリの指定は絶対パスで行う
  3. ポートを指定する
    • -p $PORT_SERVER:$PORT_CONTAINER
    • サーバーのポートが前、コンテナのポートが後

この3つ。なお、これらの操作はコンテナを立てた後には変更できないので、変更したい場合はコンテナを作り直す必要がある。

自分のいつも使っているコマンドはこんな感じ。

docker run --runtime=nvidia -it --privileged -v /home/$USER:/home/$USER -p 6006:6006 -p 8888:8888 --name $CONTAINER_NAME $IMAGE_NAME

① ホームディレクトリをマウントしつつ、② 60068888 のポートを外と繋げる。

ポートを増やしたい or マウントするディレクトリを追加したい

前述の通り、これらの操作はコンテナを立てる時にしか実行できないので、

  1. 新しくイメージからコンテナを立て直す
  2. 現在使用しているコンテナをイメージ化して再びコンテナを立て直す

のどちらかを行う。前者は普通に docker run でOK。
後者は docker commit でコンテナをイメージ化して docker run する。

docker stop $CONTAINER_NAME
docker commit $CONTAINER_NAME $IMAGE_NAME
docker run ...

コンテナに入りたい

バックエンドで起動しているコンテナに入りたい → docker attach $CONTAINER_NAME
終了しているコンテナに入りたい → docker start $CONTAINER_NAMEdocker attach $CONTAINER_NAME

コンテナから抜けたい

バックエンドで起動したまま抜けたい → ctrl + q + p
コンテナ自体を終了させたい → exit

サーバー編

ポート設定

jupyter notebook や tensorboard をブラウザ上で使いたい場合、ローカルとリモートサーバを繋ぐ設定をする必要がある。

  1. ローカルのポートとサーバのポートを繋ぐ
    • ssh -L $PORT_LOCAL:$PORT_SERVER
    • ローカルのポートが前、サーバーのポートが後
    • 踏み台サーバを経由する場合は、踏み台のポートも繋ぐ
    • ex) ssh -L $PORT_ROCAL:$PORT_VIA:$PORT_SERVER
  2. サーバのポートとコンテナのポートを繋ぐ
    • docker run -p $PORT_SERVER:$PORT_CONTAINER

の2つをやればOK。

自分の場合、2. に関しては、サーバの 8888 とコンテナの 8888 を繋いだので、
1. はローカルの 18888 (任意のポート番号) とサーバの 8888 を繋げば、localhost:18888 でコンテナの 8888 にアクセスできる。

ssh $SERVER_NAME -L 18888:8888 -L 16006:6006

ポートを複数繋げたいときは上記のように適宜 -L オプションを増やす。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした