docker containerはdocker imageの写像である

前提知識

  • docker containerはdocker imageの写像である
  • 作業はdocker containerの中に入って行うのであってdocker imageの中で行うのではない
  • docker imageからdocker containerを作り、docker containerの中に入って作業をするのであって、docker imageの中に入って作業をするのではない
  • docker containerの中で環境を変更した場合、その変更履歴はdocker containerの中に保存されるのであって、そのdocker containerを作った元ネタであるdocker imageに変更した環境が保存されることは無い。従って例えば1日目の作業が終了しexitした後、翌日また同じdocker imageを走らせようと"$ docker run IMAGE"としても前日追加で入れたはずの〇〇というライブラリは存在していない。それはdocker containerのほうに保存されている。

よく使うコマンド集

$ docker images

利用可能なdocker imageのリストを表示させる

$ docker run IMAGE

IMAGEという名のdocker imageからdocker containerが自動生成される
このとき生成されるdocker containerのエイリアス(別名)も自動生成される(ランダムに適当な名前が付与される)。以後このエイリアス(別名)を指定することでこのdocker containerに対する指示が出せる。(e.g., $ docker start -i CONTAINER)

カレントワーキングディレクトリとdocker containerのワーキングディレクトリをマウントさせて、カレントワーキングディレクトリ内のファイルをdocker containerの中から普通に利用できるようにしたいときは、

$ docker run -v {PATH TO YOUR CURRENT WORKING DIRECTORY}:{PATH TO CONTAINER'S WORKING DIRECOTRY} IMAGE  

とする

$ docker ps

起動中のdocker containerのリストを表示させる

$ docker ps -a

起動中/停止中のdocker containerのリストを表示させる

$ docker start CONTAINER

CONTAINERという名のdocker containerを起動させる

$ docker attach CONTAINER

起動中のCONTAINERという名のdocker containerの中に入る

$ docker start -i CONTAINER

CONTAINERという名のdocker containerを起動させ、なおかつその中に入る

具体的な使用例

シナリオ)tensorflow_dockerという名前のimageからcontainerを作成し、その中に入ってjupyter notebookを起動して作業したい

初回

$ docker images  
$ docker run -v {PATH TO YOUR CURRENT WORKING DIRECTORY}:{PATH TO CONTAINER'S WORKING DIRECOTRY} tensorflow_docker  
$ jupyter notebook --ip=0.0.0.0 --allow-root

次回以降

$ docker ps -a  
$ docker start -i hoge  
$ jupyter notebook --ip=0.0.0.0 --allow-root