Dockerコマンド一覧
更新日 : 2023/9/2
これまでコンテナやDockerを使ったプロジェクトに参加したこともあるものの、
「各々のPC環境に依存せず、ソフトが使える便利なもの」
程度にしか理解できておらず、どこかで学びたいと思っていました。
ちょうど時間があって勉強してみたので、メモ程度に簡単にまとめます。
Dockerコマンド一覧
▼Dockerイメージからコンテナを作成
$ docker create イメージ名
このコマンドを実行することで、コンテナで使用するファイルシステムが作成されます。また、実行後、作成されたコンテナのコンテナIDが表示されます。
▼Dockerコンテナを起動
$ docker start コンテナID
「docker start -a コンテナID」と入力することで起動時のログが出力されるようになります。また、「docker run」コマンドでは起動時コマンドを指定できますが、この「docker start」では指定することはできません。
▼Dockerイメージの起動
$ docker run イメージ名
「docker create」と「docker start」コマンドをまとめて実行する挙動になります。まずローカルのキャッシュ領域に該当するイメージがあるか確認し、なければDockerHubに該当する名前のイメージを探しに行きます。
該当するイメージがあった場合、実行されます。
▼デフォルトの起動コマンドを上書きしてイメージを実行
$ docker run イメージ名 コマンド
Dockerイメージは「起動時コマンド」なるものをイメージの一部として保持しており、名前の通りイメージ実行時にそのコマンドを実行します。そのコマンドを上書きしてイメージを実行するコマンドです。
▼コンテナを実行して、実行と同時にシェルに接続
$ docker run -it イメージ名 sh
コンテナを立ち上げてすぐに、コンテナ内でコマンド操作したい場合はこのコマンドを使いましょう。 サンプルとして、「docker run -it alpine sh」のように入力すると、プレーンのaplineイメージでコンテナが作成され、同時にシェルが開かれます。▼ポートマッピングを作成してコンテナを起動
$ docker run -p PC側のポート番号:コンテナ側のポート番号 イメージID
例えば、ローカルPC上のコンテナのポート8080番にアクセスしようとする時、「localhost:8080」へブラウザでアクセスすれば良さそうですが、実は普通にdocker runコマンドを実行するだけではできません。そのような場合は、こちらのコマンドでローカルPCとコンテナのポートを紐付ける必要があるんですね。
ちなみにローカルPCのポート番号と、コンテナのポート番号は別に一致していなくても問題ありません。
▼ローカルのファイルシステムをコンテナにマウントしてコンテナを起動
$ docker run -v PC側のフォルダパス:/コンテナ側のフォルダパス イメージID
ローカルPCのファイルシステムをマウントすることで、ローカルPCで何かしらファイルを変更した時、再ビルドをわざわざ行わなくてもよくなります。「PC側のフォルダパス」には、絶対パスや「"$(pwd)"」などを設定することが可能です。(pwdなどを使う場合はダブルコーテーションで囲むことをお忘れなく)
「コンテナ側のフォルダパス」には、「/var」など指定しましょう。
また、コンテナ内の特定のファイルはマウントしたくない場合は以下のコマンドを使いましょう。
$ docker run -v コンテナ内のフォルダパス(またはファイルパス) -v PC側のフォルダパス:/コンテナ側のフォルダパス イメージID
1つ目の -v コマンドが追加されていますが、この1つ目の -v で指定したコンテナ内のフォルダ(もしくはファイル)はマウント対象から除外されます。要するに -v オプションでは「:/」の有無で、ローカルのファイルをマウントするのか、コンテナ内でファイルを固定するのかが決まるということですね。
▼実行中のコンテナ一覧を表示
$ docker ps
起動しているコンテナがない場合は、表示される項目の項目名しか表示されません。▼これまでに作成した全てのコンテナ一覧を表示
$ docker ps --all
▼実行中以外のコンテナを削除
$ docker system prune
このコマンドはDockerHubからダウンロードされてきたビルドキャッシュも削除されるのでその点は注意しましょう。▼コンテナの実行ログを表示
$ docker logs コンテナID
「docker run」コマンド実行時に表示されるようなログが表示されます。▼起動中のコンテナを停止
$ docker stop コンテナID
▼起動中のコンテナを強制終了
$ docker kill コンテナID
このコマンドはコンテナを強制終了させます。基本的には上記の「docker stop」コマンドを実行するようにして、どうしても固まってしまって動かない場合などにこのコマンドを実行しましょう。
▼起動中のコンテナ内部でコマンドを実行
$ docker exec -it コンテナID 実行したいコマンド
コンテナを起動した上で、そのコンテナ上で何らかのコマンドを実行したい場合に使用します。ここで「-it」とは、「-i」と「-t」の合体バージョンであり、
「-i」は、コンテナ内のターミナルを自分で操作しているターミナルへ表示する(接続する)ためのオプションで、
「-t」は、コンテナと接続したターミナルを綺麗に見やすく表示する(コマンド入力する際の左のインデントなどを表示する)ためのオプションです。
▼起動中のコンテナをターミナルで操作
$ docker exec -it コンテナID sh
指定したコンテナをターミナルで操作することができます。接続先はLinuxになっていることをお忘れなく。
▼Dockerイメージファイルを作成
$ docker build .
「Dockerfile」という名前のファイルに対して実行します。Dockerfileの書き方については別の記事にてまとめます。(→こちらにまとめています)
▼Dockerイメージファイルを名前付きで作成
$ docker build -t イメージ名:タグ名 .
イメージ名もタグ名の任意の文字列を設定することができます。このコマンドで作成したイメージは「docker run イメージ名:タグ名」で実行できます。
▼Dockerfileを指定してイメージファイルを作成
$ docker build -f ファイル名 .
「Dockerfile」以外のファイル名で作成したファイルを使って、Dockerイメージを作成します。▼起動中のコンテナからDockerイメージファイルを作成・保存
$ docker commit -c 'CMD ["コマンド"]' コンテナID
CMDの後のコマンドは、コンテナ実行時起動コマンドです。 具体的には「docker commit -c 'CMD ["redis-server "]' abcdef」のようなコマンドになります。コマンドは他にもありますが、以上です。
複合型コマンドメモ
コマンドは複数まとめて実行することもあるので、使いそうなものをまとめます。
▼ローカルPCとコンテナとポートをマッピングしつつ、ローカルのファイルシステムをコンテナへマウントしてコンテナ起動
$ docker run -p ローカル側のポート番号:コンテナ側のポート番号 -v ローカルPC側のフォルダパス:/コンテナ側のフォルダパス イメージID
実際に値を埋めると以下のような感じです。$ docker run -p 8080:8080 -v "$(pwd)":/var kreu243fmlfd
その他メモ
以下、その他個人的なメモです。
- WindowsやMacOSでDockerを動かす場合、Windows/MacOS上でLinuxの仮想マシンが立ち上がり、その上で各プロセスが実行される
- 「docker run イメージ名 コマンド」で実行する場合、指定したイメージに含まれていないコマンドは実行することができない。(例:指定したイメージが「HelloWorld」と表示するプログラム1つしか含んでいないイメージの場合、そのDocker上で「ls」や「echo」コマンドは実行できない)
最後に
以上、Dockerのコマンドについて簡単でしたがまとめてみました。
それでは!