こんにちは、たねやつです。
前回、Dockerfileを作成し、docker buildとdocker runを使ってアプリケーションをコンテナとして起動しました。
しかし、一度起動したコンテナはどのように管理すればよいのでしょうか?今回は、起動中のコンテナを確認したり、停止したり、ログを見たりといった、コンテナを管理・操作するための基本的なDockerコマンドを学びます。
前の記事
この記事でできること
- 起動しているコンテナの一覧を表示できる (
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.pyやrequirements.txtが見えるはずです。
コンテナから出るにはexitと入力します。
コンテナの停止と削除 (docker stop, docker rm)
不要になったコンテナは停止・削除してリソースを解放しましょう。
| コマンド | 説明 |
|---|---|
docker stop <コンテナ名> |
実行中のコンテナを停止します。 |
docker rm <コンテナ名> |
停止しているコンテナを削除します。 |
docker stopを実行した後、docker psを再度実行すると、コンテナが表示されなくなっていることが確認できます(docker ps -aには残っています)。
docker rmで完全に削除できます。
イメージを操作するコマンド
コンテナは削除しても、元になったイメージはPC上に残っています。
イメージの一覧表示 (docker images)
PC内に存在するDockerイメージの一覧を表示します。
docker images
fastapi-appや、そのベースとなったpythonイメージなどが表示されます。
イメージの削除 (docker rmi)
不要になったイメージを削除します。
docker rmi fastapi-app
最後に
お疲れ様でした!今回は、コンテナを管理するための基本的なDockerコマンドを一通り学びました。 これらのコマンドは、Dockerを扱う上で日常的に使用するものばかりです。
| 目的 | コマンド |
|---|---|
| 何が動いているか見る | docker ps |
| 中の様子を覗く | docker logs |
| 中に入って操作する | docker exec |
| 片付ける | docker stop, docker rm |
このサイクルを覚えておけば、大抵のコンテナ操作は問題なく行えるはずです。
次回は、複数のコンテナを連携させるためのツール、Docker Composeについて学びます。