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

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

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

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

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

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

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

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

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

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

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

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

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

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

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【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
6,869
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

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

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

この記事をかいた人

About the author

萬代陽一

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