Edited at

よく使うDockerコマンド

More than 1 year has passed since last update.


はじめに

株式会社サイシードのインターンシップにて、Dockerを導入しました。

Dockerを使用する上でよく使うコマンドをまとめました。

本稿が少しでもみなさまの参考になれば幸いです。


実行環境

・windows7

・vagrant(Ubuntu)


よく使うDockerコマンド一覧


1.Docker hubからイメージを検索


Ubuntu

  $ sudo docker search イメージ名 | more



Ubuntu

  # 例

  $ sudo docker search centos:latest | more

 


2.イメージ一覧


Ubuntu

  $ sudo docker images


 


3.イメージの取得


Ubuntu

  $ sudo docker pull イメージ名



Ubuntu

  # 例

  $ sudo docker pull centos:latest

 


4.イメージの削除

(1)特定のイメージを削除

txt:Ubuntu

  $ sudo docker rmi イメージ名またはイメージID


Ubuntu

  # 例

  $ sudo docker rmi centos:latest

(2)タグがついていないイメージをすべて削除 

txt:Ubuntu

  $ sudo docker rmi $(sudo docker images -f 'dangling=true' -q)


5.イメージの詳細を確認


Ubuntu

  $ sudo docker inspect イメージ名またはイメージID



Ubuntu

  # 例

  $ sudo docker inspect centos:latest

 


6.コンテナからイメージを作成


Ubuntu

  $ sudo docker commit コンテナ名またはコンテナID DockerHubユーザー名/任意のイメージ名



Ubuntu

  # 例

  $ sudo docker commit centos_container_test tera_shin/centos_test

 


7.コンテナ一覧

 (1)起動中のコンテナを表示


Ubuntu

  $ sudo docker ps


 

 (2)停止中のコンテナを含め、すべてのコンテナを表示


Ubuntu

  $ sudo docker ps -a


 


8.コンテナを作成、起動

 (1)コンテナを作成して起動

  -dオプションをつけると、バックグラウンドで実行する。

  --nameは指定しなければ、自動的に名前をつけてくれる。


Ubuntu

  $ sudo docker run -i -t -d -p ホスト(Ubuntu)側のポート:コンテナ側のポート --name 任意のコンテナ名 元にするイメージ名またはイメージID



Ubuntu

  # 例

  $ sudo docker run -i -t -d -p 8080:3000 --name centos_container_test tera_shin/centos_test:latest

 

 (2)コンテナを起動(作成は行わず、既存のものを起動する)


Ubuntu

  $ sudo docker start コンテナ名またはコンテナID



Ubuntu

  # 例

  $ sudo docker start centos_container_test

 

 (3)コンテナを作成(起動はしない)


Ubuntu

  $ sudo docker create -p ホスト(Ubuntu)側のポート:コンテナ側のポート --name 任意のコンテナ名 元にするイメージ名またはイメージID



Ubuntu

  # 例

  $ sudo docker create -p 8080:3000 --name centos_container_test tera_shin/centos_test:latest

 


9.コンテナの中に入る

 コンテナの中に入るには、コンテナが起動している必要がある。

 起動したいコンテナが停止中のときは、あらかじめ起動しておく。

 (1)コンテナを作成して起動後、コンテナの中に入る

  -i-tオプションをつけて(-i-tオプションは省略して-itとも書ける)、/bin/bashを実行する。

  -dオプションをつけなければ、フォアグラウンドでの実行となり、コンテナを抜けると、

  コンテナは停止する。

  コンテナを停止させずにコンテナから抜けたい時は、Ctrl + P + Q を入力する。

  また、/bin/bashの部分を書き換えると、/bin/bashだけでなく、

  任意のコマンドをコンテナの中で実行できる。


Ubuntu

  $ sudo docker run -i -t -p ホスト(Ubuntu)側のポート:コンテナ側のポート --name 任意のコンテナ名 元にするイメージ名またはイメージID /bin/bash



Ubuntu

  # 例

  $ sudo docker run -i -t -p 8080:3000 --name centos_container_test tera_shin/centos_test:latest /bin/bash

 

 (2)コンテナの中に入る(方法1)

  execコマンドを用いる。

  execコマンドは、bash以外にも任意のコマンドをコンテナ内で実行させることができる。

  このコマンドでコンテナに入った場合、コンテナから抜けてもコンテナは停止しない。


Ubuntu

  $ sudo docker exec -i -t コンテナ名またはコンテナID bash



Ubuntu

  # 例

  $ sudo docker exec -i -t centos_container_test bash

 

 (3)コンテナの中に入る(方法2)

  attachコマンドを用いる。

  (2)とは異なり、バックグラウンドで実行しているコンテナをフォアグラウンドにして、

  コンテナの中で/bin/bashを実行する。

  このコマンドでコンテナに入った場合、コンテナから抜けるとコンテナは停止する。

(execを使った場合は、/bin/bashなど、実行したプロセスが停止するだけで、

  コンテナ自体は停止しない。)


Ubuntu

  $ sudo docker attach コンテナ名またはコンテナID



Ubuntu

  # 例

  $ sudo docker attach centos_container_test

 


10.コンテナから抜ける

 (1)コンテナから抜ける(方法1)


コンテナ

  $ exit


 

 (2)コンテナから抜ける(方法2)

  Ctrl + P + Q を入力する。

  (1)の方法とは異なり、フォアグラウンドで起動していても、コンテナを停止させずに

  コンテナから抜けることができる。

 


11.ホスト側のディレクトリをコンテナ内にマウント

  Dockerにおけるホスト側とコンテナ側での同期を行う仕組み

  マウントしたディレクトリは、コンテナを停止すると消える。

  作成、起動後、コンテナに入る必要がないなら、-i-t/bin/bashをつけなくても良い。

  ただし、マウントはコンテナの作成時にしか設定することができない。

  マウントしているコンテナのディレクトリはVOLUMEとして設定され、コンテナのイメージ化の際、

  イメージには含まれない。

  VOLUMEに設定するディレクトリは、Dockerfileでも指定でき、VOLUMEを利用することで、

  開発環境とアプリケーションを分離することができる。

  


Ubuntu

  $ sudo docker run -i -t --name 任意のコンテナ名 -v $(pwd)/マウントしたいディレクトリ:マウント先のパス イメージの名前:イメージのタグ /bin/bash


  $(pwd)ホスト側の今いるディレクトリのパス$(pwd)を用いず、絶対パスで指定してもよい。

  マウント先のパスは、必ず絶対パスで指定する。

  マウント先のディレクトリが存在しない場合は、自動的に作成される。

  ただし、コンテナを停止すると、そのディレクトリも含めて消える。


Ubuntu

  # 例

  $ sudo docker run -it -p 8080:80 -p 8888:53000 -v $(pwd)/app:/home/docker/app tera_shin/centos_test:latest /bin/bash

 


12.コンテナを停止

 (1)コンテナを指定して停止


Ubuntu

  $ sudo docker stop コンテナ名またはコンテナID



Ubuntu

  # 例

  $ sudo docker stop centos_container_test

 

 (2)全コンテナの停止


Ubuntu

  $ sudo docker kill $(sudo docker ps -a -q)


 


13.コンテナを削除

  コンテナを削除する場合は、あらかじめコンテナを停止しておく。

 (1)コンテナを指定して削除


Ubuntu

  $ sudo docker rm コンテナ名またはコンテナID



Ubuntu

  # 例

  $ sudo docker rm centos_container_test

 

 (2)全コンテナを削除


Ubuntu

  $ sudo docker rm $(sudo docker ps -a -q)

  #強制削除
  $ sudo docker rm -f $(sudo docker ps -a -q)


 

 (3)全コンテナを停止、削除


Ubuntu

  $ sudo docker ps -a -q | xargs docker kill | xargs docker rm


 


14.コンテナ内でのコマンド実行

  起動しているコンテナに入る時にも使用したexecコマンドを用いる。


Ubuntu

  #フォアグラウンドで実行

  $ sudo docker exec コンテナ名またはコンテナID コンテナ内で実行したいコマンド

  #バックグラウンドで実行
  $ sudo docker exec -d コンテナ名またはコンテナID コンテナ内で実行したいコマンド



Ubuntu

  # 例

  $ sudo docker exec centos_container_test touch hello.txt

 


15.Dockerfileの実行


Ubuntu

  $ sudo docker build -t Dockerhubのユーザー名/任意のイメージ名 Dockerfileのディレクトリ(今いるディレクトリなら".(ピリオド)")



Ubuntu

  # 例

  $ sudo docker build -t tera_shin/centos_test:latest .

 


16.docker-composeでコンテナを立ち上げる

 docker-composeをインストールし、使用できるようにしておく。

 docker-compose.ymlが存在するディレクトリで実行する。

 (1)コンテナの立ち上げと起動


Ubuntu

 $ sudo docker-compose up


 

 (2)コンテナの立ち上げのみ

  立ち上げたコンテナ内であらかじめコマンドなどを実行したい時に用いる。


Ubuntu

 $ sudo docker-compose build



Ubuntu

  # 例

  $ sudo docker-compose build
  $ sudo docker-compose run web rails db:create
  $ sudo docker-compose run web rails db:migrate
  $ sudo docker-compose up