Docker

【Docker】よく使うコマンド

docker_icon

はじめに

Dockerで個人的によく使うコマンドを目的別に記載します。
基本的にDockerのコマンドではなく、docker compose のコマンドを利用しています。

最初は「コンテナ起動~停止」だけ使えればいいと思います。
自分でDocker構築したり、その他情報がしりたくなったら他のコマンドが必要になる感じです。

どのコマンドも cd で docker-compose.yml があるフォルダに移動して、行うことは共通になります。

別記事でDockerで以下の環境を作成するチュートリアル記事も書いてますので、よかったら見てみてください。

  • windows pc
  • php 8.0.23
  • composer 2.4.1
  • nginx 1.22.0
  • MySQL 8.0.30
  • Laravel 6.20.44
  • phpMyAdmin最新

用語

先によく出てくる用語だけ記載しておきます。
作業中にわからなくなったら見てください。

ホストOS 作業側のパソコン。ローカルともいう
Dockerfile イメージをビルドで作るためのDockerの設定ファイル
イメージ コンテナを作成するためにDockerfileからビルドで作成されたもの。
Dockerhubで配布されている公式のイメージもある。
ビルド Dockerfileからイメージを作成する事
コンテナ イメージから作成された各機能のこと。
サービスとも呼ばれる。
このコンテナの集まりで環境が構築される
docker-compose 複数のコンテナを一気に作成したりできる一元管理機能。
Dockerを使う場合実質必須になります。
docker-compose.yml 複数のコンテナを一気に作成、起動したりできるdocker-composeの一元管理ファイル。
docker-composeをインストールしてdocker-compose.ymlを作成してdocker composeコマンドで実行して利用します。

 

コンテナ起動~停止

普段一番使うコマンドです。

Dockerの設定ファイルが出来たらあとは環境を起動、停止して開発をすすめるという流れになるので、基本的にこれしか使わなくなります。

※コマンドじゃなくても、Docker Desktopアプリでもスタート、停止できます。

1.コンテナ起動

以下のコマンドを実行するとコンテナが起動します。

docker-compose up -d

※このコマンドはビルド( docker-compose build )+スタート( docker-compose start )を行っています。
※ -d はバックグラウンド実行になり、コマンドプロンプトの占有を防ぐためのオプションです。

2.コンテナ停止

稼働中のコンテナを停止します。

docker-compose stop

※コンテナの削除はしません。
※docker-compose start または docker-compose up で再起動できます。

起動しているコンテナの一覧を確認

今起動しているコンテナを確認したい場合は以下のコマンドで確認できます。

docker-compose ps

※コマンドじゃなくても、Docker Desktopアプリでも確認できます。
※起動していないコンテナも確認したい場合は -a オプションを使います。

コンテナ内でコマンドを実行したい

docker-compose exec サービス名 実行したいコマンド

※このコマンドは docker exec と同じです
※ -it オプションでコンテナの中の環境に入って、対話モードでコマンドできるようにできます。抜けるときはexitでOKです。

例)コンテナ内で bash (コマンドプロンプトの一種)を起動して、MySQLに接続するコマンド

$ docker-compose exec DBのサービス名 bash
[db]:/$ mysql -u ユーザ名 -p
// パスワードを求められるので入力

//データベース指定
[db] mysql> use database;

//テーブル表示
[db] mysql> show tables;

 

イメージからコンテナ(環境)を作り直したい

1.今いるディレクトリに対してイメージ、コンテナの削除

Dockerの設定ファイルを書き直したり、イメージをつくりなおして再度コンテナを起動したい場合は、よく以下のコマンドを使い削除します。

docker-compose down --rmi all --remove-orphans

このコマンドを使うことで、Docker内のキャッシュなどの影響で起こるよくわからないエラーなども回避しつつ、再構築ができます。

要約すると以下のことを行います。
今いるディレクトリに対してコンテナ停止、削除、ネットワーク、イメージ、未定義のコンテナを削除してきれいにする

各オプションなどについて↓

  • docker-compose down は docker-compose up で作成したコンテナとネットワークを停止、削除
  • –rmi all オプションで全イメージを削除
  • –remove-orphans オプションでComposeファイルで定義していないサービス用のコンテナも削除

よくでてくる「docker system prune」はディレクトリ関係なく、使われてないイメージ、コンテナ、ネットワークを削除(prune)するコマンドです。

Docker全体に対するお掃除という感じです。

■ボリュームについて
※いつか別記事移行するかも…

Dockerはメモリ上で動くため、コンテナを削除した時点で作業した内容が消えてしまいます。
そのためボリュームという機能をつかってファイルやDBの情報を永続化し消えないようにします。

主に以下のように使われます。

・バインドマウント
主に作業ファイルを残したいときに使います。
ローカルにコンテナ側を同期してパソコン内に作業ファイルを保存します。
削除タイミングは自分でフォルダを消すときになります。

・名前付きボリューム
DBのデータなどを残したいときに使います。
Docker内で保持されるので、一見するとどこに行ったかわからなくなりますが、Docker Desktop アプリや docker volume ls コマンドで確認できます。

削除タイミングは docker-compose down や docker system prune でボリュームオプションを指定したタイミングです。

※匿名ボリュームというのもありますが、基本的に名前付きがつかわれます。

ボリュームの実際の書き方は以下のdocker-compose.ymlのコメントを参考にしてください。
docker-compose.ymlを作成

ボリュームはしれっとたまっていくので定期的にお掃除する必要があります。
作業データがいらなくなったときに、以下どちらを使い用途に応じて削除するといいと思います。

1.

今いるディレクトリに対してコンテナ停止、削除、ネットワーク、イメージ、ボリューム、未定義のコンテナを削除する

docker-compose down --rmi all --volumes --remove-orphans

2.
ディレクトリ関係なく、起動していない、ボリューム、イメージ、コンテナ、ネットワークを削除(prune)する

docker system prune --volumes
または
docker volume prune

 

2.コンテナ再起動

docker-compose up -d

 

【おまけ】その他のコマンド

必要になったときに見てください。
基本は上記の内容で事足りると思います。

コンテナ停止

docker-compose stop

コンテナ削除

docker-compose rm

※起動しているコンテナは削除できません

コンテナ再起動

docker-compose restart

 

今あるイメージを確認

docker images

※docker compose ではなく docker のコマンド

 

対象のイメージを削除

docker rmi イメージ名 or イメージID

※docker compose ではなく docker のコマンド
※コンテナがあるイメージは削除できません
※強制削除もあるが今回はなし

docker-compose.ymlで管理されているサービス1つを指定してコマンドを実行する

docker-compose run サービス名 コマンド

※ビルド前でも実行可能なコマンド。一時的にコンテナ作成してコマンドを実行できる

例)
docker-composeのvolumeでフレームワークのフォルダが事前に必要な場合に
先にフレームワークのインストールだけしておく際などに使える。
フォルダが先にないとエラーが出たりする

この記事でLaravelをインストールするときに使ってます。
2.Laravelのインストールコマンドを実行

Docker コンテナの詳細情報確認

docker inspect コンテナ指定

※docker compose ではなく docker のコマンド
※よくみるのは
mount :どこのvolumeをマウントしてるか
config:だれがもってるかとか、環境変数とか、Cmdとか
network setting:コンテナのUPAddress(ホストからつなげるIP)の確認もできる
※IPは docker-compose ps のコンテナ一覧でみることが多いです

イメージの履歴を確認

docker history イメージ名:タグ

※docker compose ではなく docker のコマンド
※他人が作ったイメージの更新履歴を知りたいときに使う

 

Dockerコンテナのログを出力

docker logs コンテナ指定

※docker compose ではなく docker のコマンド
※アクセスログ、不明な停止の原因を確認した時に使う
※リアルタイム監視でログをだすにはオプション -f を使います。
作業中をリアルタイムで追えるようになります

 

Docker 全体のお掃除

docker system prune

※docker compose ではなく docker のコマンド

 

ディレクトリ関係なく、イメージ、コンテナ、ネットワークを削除(prune)する
ボリュームはデフォルトでは削除されないため、–volumes フラグを使う必要があります。
※使用中のものは消されないのでstopしないといけない
※docker compose ではなく docker のコマンド

※オプション -a
既存のコンテナ~使われていないイメージすべてを削除する
なぜかイメージが消えない時はこれ。全部消えるので注意

さいごに

たか
たか
正直自分のためのメモでもある!おまけは覚えなくていいし、困ったら見てください。

ちなみにdockerコマンドとdocker-composeコマンドは同じことができるコマンドがあったりするので、好きな方を使うでOKです。