たねやつの木

Photographs, Keyboards and Programming

【Dockerを知る:第4回】 基本的なDockerコマンドを使いこなす

こんにちは、たねやつです。

前回、Dockerfileを作成し、docker builddocker runを使ってアプリケーションをコンテナとして起動しました。 しかし、一度起動したコンテナはどのように管理すればよいのでしょうか?今回は、起動中のコンテナを確認したり、停止したり、ログを見たりといった、コンテナを管理・操作するための基本的なDockerコマンドを学びます。

前の記事

www.taneyats.com

この記事でできること

  • 起動しているコンテナの一覧を表示できる (docker ps)
  • コンテナのログを確認できる (docker logs)
  • 起動中のコンテナに入ってコマンドを実行できる (docker exec)
  • コンテナを停止・削除できる (docker stop, docker rm)
  • PC上に存在するコンテナイメージを管理できる (docker images, docker rmi)

事前に必要なもの

  • 前回の記事でビルドしたfastapi-appイメージと、起動中のmy-fastapi-containerコンテナ

コンテナを操作するコマンド

コンテナの一覧表示 (docker ps)

まず、現在どのコンテナが動いているのかを確認しましょう。

# 起動中のコンテナのみ表示
docker ps

# 停止中のコンテナも含めてすべて表示
docker ps -a

docker psを実行すると、前回docker runで起動したmy-fastapi-containerの情報が表示されるはずです。CONTAINER ID, IMAGE, STATUS, PORTSなどの列があり、コンテナの状態を一目で把握できます。

コマンド 説明
docker ps 現在実行中のコンテナのリストを表示します。
docker ps -a 停止しているコンテナも含め、すべてのコンテナのリストを表示します。

コンテナのログ確認 (docker logs)

アプリケーションがコンテナ内で正しく動いているか、何かエラーが出ていないかを確認するにはログを見るのが一番です。

コマンド 説明
docker logs <コンテナ名> コンテナの標準出力を表示します。
docker logs -f <コンテナ名> -f (follow) オプションでログをリアルタイムに監視します。

-f (follow) オプションを付けて実行した状態で、ブラウザから http://localhost:8000 に何度かアクセスしてみてください。Uvicornのアクセスログがリアルタイムでターミナルに表示されるのがわかります。

INFO:     172.17.0.1:47512 - "GET / HTTP/1.1" 200 OK
INFO:     172.17.0.1:47512 - "GET /favicon.ico HTTP/1.1" 404 Not Found
INFO:     172.17.0.1:50468 - "GET / HTTP/1.1" 200 OK
INFO:     172.17.0.1:50468 - "GET /docs HTTP/1.1" 200 OK
INFO:     172.17.0.1:50468 - "GET /openapi.json HTTP/1.1" 200 OK

コンテナ内でのコマンド実行 (docker exec)

コンテナは隔離された環境ですが、その中に入って直接コマンドを実行することもできます。デバッグなどで非常に役立ちます。

コマンド 説明
docker exec <コンテナ名> <コマンド> コンテナ内で指定したコマンドを実行します。
docker exec -it <コンテナ名> /bin/bash -itオプションでインタラクティブなシェルを起動し、コンテナ内に入ります。

-itオプションを付けてbash(またはsh)を実行すると、コンテナのLinux環境にログインしたような状態になります。 lsコマンドを打てば、Dockerfile/appにコピーしたmain.pyrequirements.txtが見えるはずです。 コンテナから出るにはexitと入力します。

コンテナの停止と削除 (docker stop, docker rm)

不要になったコンテナは停止・削除してリソースを解放しましょう。

コマンド 説明
docker stop <コンテナ名> 実行中のコンテナを停止します。
docker rm <コンテナ名> 停止しているコンテナを削除します。

docker stopを実行した後、docker psを再度実行すると、コンテナが表示されなくなっていることが確認できます(docker ps -aには残っています)。 docker rmで完全に削除できます。

コンテナIDの先頭数文字を指定するだけでも、コンテナを特定できます。 `docker stop 2c6` のように、一意に特定できる長さであればOKです。

イメージを操作するコマンド

コンテナは削除しても、元になったイメージはPC上に残っています。

イメージの一覧表示 (docker images)

PC内に存在するDockerイメージの一覧を表示します。

docker images

fastapi-appや、そのベースとなったpythonイメージなどが表示されます。

イメージの削除 (docker rmi)

不要になったイメージを削除します。

docker rmi fastapi-app
注意: そのイメージを使っているコンテナが存在する(停止中でも)場合は、イメージを削除できません。先に`docker rm`でコンテナを削除する必要があります。

最後に

お疲れ様でした!今回は、コンテナを管理するための基本的なDockerコマンドを一通り学びました。 これらのコマンドは、Dockerを扱う上で日常的に使用するものばかりです。

目的 コマンド
何が動いているか見る docker ps
中の様子を覗く docker logs
中に入って操作する docker exec
片付ける docker stop, docker rm

このサイクルを覚えておけば、大抵のコンテナ操作は問題なく行えるはずです。

次回は、複数のコンテナを連携させるためのツール、Docker Composeについて学びます。

次の記事

www.taneyats.com