こうしたいんだぜ! という時の逆引きdockerコマンド
目次
- 1 dockerイメージの一覧を取得したい
- 2 dockerコンテナの一覧を取得したい
- 3 dockerコンテナに名前を付けて起動
- 4 dockerコンテナとホスト間でファイルを共有する
- 5 dockerコンテナのポートをホスト側でも使えるようにポートフォワードする
- 6 dockerコンテナ同士を繋ぐ
- 7 デタッチモードでdockerコンテナを起動する
- 8 dockerコンテナをフォアグラウンドで起動して任意のコマンドを実行
- 9 dockerコンテナをフォアグラウンドで起動してdockerコンテナにアタッチ
- 10 起動時にdockerコンテナ内の環境変数を設定する
- 11 起動中のdockerコンテナにアタッチする
- 12 dockerコンテナ内でシェルコマンドを叩きたい
- 13 dockerコンテナを停止したい
- 14 dockerコンテナを削除したい
- 15 dockerコンテナを全部削除したい
- 16 dockerイメージを削除したい
- 17 dockerコンテナの情報を知りたい
- 18 dockerコンテナで使われているIPアドレスを取りたい場合(余計な情報も付いてくるが、目的は達している)
こんにちは。
開発チームのワイルド担当、まんだいです。
dockerコマンドをど忘れする事が多いので、カッとなって書きました。
これでもう忘れない。
dockerイメージの一覧を取得したい
docker images
dockerコンテナの一覧を取得したい
# 現在起動中のdockerコンテナのみ docker ps # 停止中のdockerコンテナも含めて全部 docker ps -a # dockerコンテナIDのみを表示 docker ps -q
「docker ps -q」は単品では使い道もないですが、dockerコンテナを一括削除する時に役立ちます。
dockerイメージとdockerコンテナの違いが最初はイメージしにくいかも知れませんが、物理的なCDとISOファイルのような関係性ですね(わかりにくい)。
dockerコンテナに名前を付けて起動
docker run --name [container name]
dockerコンテナに名前を付けた場合、同じ名前のdockerコンテナを起動させるには、「docker rm」コマンドでdockerコンテナを削除する必要があります。
dockerコンテナとホスト間でファイルを共有する
docker run -v [ホスト側のディレクトリパス]:[dockerコンテナ内のディレクトリパス]
dockerコンテナのポートをホスト側でも使えるようにポートフォワードする
docker run -p [ホスト側のポート番号]:[dockerコンテナのポート番号]
dockerコンテナ同士を繋ぐ
docker run -link [dockerコンテナ名、もしくはID][:[エイリアス]]
エイリアスはdockerコンテナに名前をつけていない場合や、超長いdockerコンテナ名を付けた場合に有用です。
仕組みはhostsを使った単純なもので、hostsファイルを見比べてみると以下のようになります。
# 接続するMySQLコンテナを起動 $ docker run -d --name test -e MYSQL_ROOT_PASSWORD=root mysql:latest 529c5facaed9694dbcb36e9e3d3eae0350e26e182f70c72b06d2914dcf8c0222 # リンク先に名前とエイリアスを指定してdockerコンテナを起動 $ docker run -it --link test:db php:latest cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.3 db 529c5facaed9 test 172.17.0.4 ffae57a81bc1 # リンク先に名前だけを指定してdockerコンテナを起動 $ docker run -it --link test php:latest cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.3 test 529c5facaed9 172.17.0.4 128c598dea8a
hostsにエイリアスの記載があるかどうかの違いですね。
デタッチモードでdockerコンテナを起動する
docker run -d [dockerイメージ名]
デタッチモードはコンテナ内に入らず、バックグラウンドで動作する状態の事です。
すっかりデーモンのdかと思っていました。
dockerコンテナをフォアグラウンドで起動して任意のコマンドを実行
docker run [dockerイメージ名] [コマンド]
dockerコンテナをフォアグラウンドで起動してdockerコンテナにアタッチ
docker run -it [dockerイメージ名] [/bin/bash などの任意のシェル]
-iオプションはSTDIN(標準入力)をアタッチします。つまり、コンソールからの入力が指定したdockerコンテナ内に流れる事になります。
「docker run -i hogehoge /bin/bash」とした場合は、コンソールコマンドは叩けるものの、画面には反映されません。
-tオプションはdockerコンテナにTTYを割り当てます。これがないとアタッチしてもdockerコンテナ内のコンソールは見えません。
「docker run -t hogehoge /bin/bash」とした場合は、dockerコンテナ内のプロンプトは見えるものの、入力しても画面には反映されません。
よって、dockerコンテナ内で作業するためには、上記2つのオプション両方が必要、という事です。
起動時にdockerコンテナ内の環境変数を設定する
docker run -e [変数名=値]
mysqlのrootパスワードなどはこれで指定できます。
docker run -e MYSQL_ROOT_PASSWORD=root
起動中のdockerコンテナにアタッチする
docker attach [dockerコンテナID]
デタッチはdockerコンテナ内でショートカットキーのCTRL + P,Qでホストへ戻ります。
dockerコンテナ内でシェルコマンドを叩きたい
docker exec [dockerコンテナID] [/bin/bash など起動するシェル]
dockerコンテナを停止したい
docker stop [dockerコンテナID]
dockerコンテナを削除したい
docker rm [dockerコンテナID]
dockerコンテナを全部削除したい
docker rm $(docker ps -aq)
サブシェルでdockerコンテナのIDを取得する形です。docker psの-qオプションが一番輝く使い道ですね。
dockerイメージを削除したい
docker rmi [dockerイメージ名]
dockerコンテナの情報を知りたい
docker inspect [dockerコンテナID]
dockerコンテナで使われているIPアドレスを取りたい場合(余計な情報も付いてくるが、目的は達している)
docker inspect [dockerコンテナID] | grep IPAddress
以上です。