どんな事でもお気軽にお問い合わせください
0120-803-656
24時間受付いたします

こうしたいんだぜ! という時の逆引きdockerコマンド


こんにちは。
開発チームのワイルド担当、まんだいです。

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

 

 
以上です。


お問い合わせ 採用情報 エンジニアブログ
ISO27001認証
Contact PageTop
株式会社ビヨンド

© beyond Co., Ltd. All rights reserved.