サンプルのリポジトリ
イメージ関連
Dockerfileを元にイメージを作成
// docker build -t <イメージ名> <ビルドコンテキスト>
docker build -t api .
ビルドコンテキストとDockerFileのパスを別で指定する場合は以下
// docker build -t <イメージ名> -f <Dockerfileのパス> <ビルドコンテキスト>
docker build -t api -f docker/Dockerfile .
イメージ一覧
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
api latest 7ef4afc493e4 2 minutes ago 471MB
...
イメージ削除
// docker rmi <イメージID>
docker rmi d69bc9d9b016
未使用のイメージを全て削除
docker image prune -a
コンテナ関連
コンテナ起動
- バックグラウンドで実行する場合は、-dをつける(コンソールが占有されず、続けて他のコマンドが実行できる)
- ホストからコンテナにアクセスできるようにするには、ポートフォワーディングが必要。-pで指定可能
- --restart alwaysはDockerデーモンの起動時に自動でコンテナを再起動させることが可能になる
- -itでコンテナを常時起動できる
// docker container run --name <コンテナ名> <イメージ名>
docker container run -d -p 18080:8080 --restart=always -it --name mycontainer api
上記コンテナ起動のコマンドに加え、-v <マウントしたいホストのパス:マウントしたいコンテナのパス>とすることで、ホストとコンテナでディレクトリやファイルをマウントして共有すること可能
// docker container run -v <ホストのパス:コンテナのパス> -p <ホストのport:コンテナのポート> --name <コンテナ名> <イメージ名>
docker container run -v /Users/usename/・・・/api:/usr/api -d -p 18080:8080 --restart=always -it --name mycontainer api
コンテナ一覧
docker container ls で起動中のコンテナを一覧表示。-aを最後につけると、停止中のコンテナも含め全て表示
docker container ls
コンテナに入る
docker container exec -it <コンテナ名 or コンテナID> /bin/bash
XXX@:/opt/app#
コンテナを指定してホスト側でコマンドを実行
/bin/bash -cでbashコマンドとして実行してあげれば、複数コマンドを繋げて実行することも可能
docker container exec <コンテナ名 or コンテナID> /bin/bash -c "npm ci && npm run dev"
コンテナ削除
docker container rm -f <コンテナ名 or コンテナID>
コンテナの情報を表示
IPアドレスや他のコンテナと通信するためのAlias、Port番号のなどのコンテナに関する詳細情報が確認できる
docker inspect <コンテナ名 or コンテナID>
起動に失敗したコンテナの調査方法
コンテナのログを確認し、原因がわかるか確認する。
docker logs <コンテナ名 or コンテナID>
わからなければ続けて以下を行う。
exitedしたコンテナに入る
docker commitでexitedしたコンテナから仮のイメージを作成
docker commit <exitedしたコンテナID> <適当なイメージ名>
以下コマンドで、作成した適当なイメージ名からコンテナを起動し内部に入って調査する
docker run --rm -it 適当なイメージ名 bash
クリーンアップ
以下を一括で削除
- 停止しているコンテナ
- 使用されていないネットワーク
- 使用されていないイメージ
- buildキャッシュ
docker system prune
まとめ
いかがでしたでしょうか。本記事では、エンジニアなら最低限押さえておきたいDockerコマンドついて紹介しています。Dockerを用いた環境構築などの際に知っておいた方がいいコマンドをよく使うものを中心にピックアップして紹介していますのでぜひ参考にしてみてください