【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【9,800円/回】Webサイト自動診断サービス「クイックスキャナー」

【9,800円/回】Webサイト自動診断サービス「クイックスキャナー」

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【次世代】ゲーム専用データ分析エンジン『ThinkingEngine』

【次世代】ゲーム専用データ分析エンジン『ThinkingEngine』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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

GRED Web改ざんチェック Cloud

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

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

 

 
以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
2
読み込み中...
2 票, 平均: 1.00 / 12
5,916
facebook twitter はてなブックマーク
【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

萬代陽一

ソーシャルゲームのウェブ API などの開発がメイン業務ですが、ありがたいことにマーケティングなどいろんな仕事をさせてもらえています。
なおビヨンド内での私の肖像権は CC0 扱いになっています。