docker:build, run, copy, mount volume, commit, etc…

dockerfileを作る

FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    apt-utils \
    git \
    curl && \
    apt-get autoremove && apt-get autoclean && \
    rm -rf /var/lib/apt/lists/*

dockerfileをビルドする

docker build -t Repo:tag .

repoはリポジトリー名、tagはタグ名(defaultはlatest)

dockerをrunする

docker run -v `pwd`:/home/workspace -p 8888:8888 -t -i -w /home/workspace dl bash

-vはマウントするボリューム、pwdはホスト側のcurrent directory、/home/workspaceはコンテナ内のディレクトリ(ホストコンピュータのcurrent direcotryのファイルをコンテナと共有できるようになる)、-p 8888:8888はport8888を開放(jupyterを使うのに必須)、-tはtty(terminal)、-iはinteractive mode、-wはworkdir、dlはrepo名、bashはbash。

nvidia dockerを使う(tensorflow-gpuを使うのに必須)。

nvidia-docker run -v `pwd`:/home/workspace -p 8888:8888 -t -i -w /home/workspace dl bash

nvidia-dockerはnvidia-runtimeを使う時に必須。

実行中のコンテナIDを確認する

docker ps

実行中のコンテナを停止する。
bash terminalでexitを入力するか

docker stop コンテナID

コンテナ内の作業をキープするためにイメージをアップデートする。

docker commit CONTAINER ID new name

コンテナ内にディレクトリやファイルをコピーする。

docker cp /home/aho/mydocker/dl1/workspace/ CONTAINER ID:/root/

ホスト側のworkspaceというディレクトリがコンテナ内のrootにコピーされる。

コンテナ内にホスト側のディレクトリをマウントする。

docker run -v `pwd`:/home/workspace dl bash

-vがマウントするvolumeで、pwdはホスト側のcurrent directory、/home/workspaceはコンテナ内のディレクトリ、dlは使用するimage、bashはbashを起動するという意味。

docker imageを削除

docker rmi -f image image名

none imageをまとめて削除

docker rmi -f $(docker images | grep '^<none>' | awk '{print $3}')

全てのイメージをまとめて削除する

docker rmi -f $(docker images -aq)

containerをストップする

docker stop container_ID

containerを全て停止する

docker stop $(docker ps -aq)

containerを削除する

docker rm -f コンテナID

コンテナを一括削除する

docker rm -f $(docker ps -aq)

停止中のコンテナを一括で削除する

docker rm $(docker ps --filter status=exited -q)

コンテナから不意にはじき出された場合
docker ps -aで戻りたいコンテナIDを確認

docker exec -it コンテナID bashでコンテナに戻れる

参考サイトhttps://stackoverflow.com/
参考サイトhttps://github.com/

スポンサーリンク