Dockerで888ポートをLISTENするサーバーを起動して、$ curl localhost:8888
で叩いて動作確認したい。
Dockerfile内でサーバーの起動設定と、Exposeで8888ポートをLISTENする設定を行なっているものとする。
# イメージをビルドしておく
$ docker image build -t app_image .
docker container runコマンドを使ってコンテナの作成と起動を同時に行うパターン
docker container runコマンドはコンテナの作成と起動を同時に行う。また、指定したイメージがローカルになければダウンロードも行う。
シンプルにrunする
$ docker container run --name app_run -p 8888:8888 app_image
# 別セッションから動作チェックする
$ curl localhost:8888
Hello World!
# 事後処理としてコンテナを停止して削除する
## 停止と削除を行わずにもう一度runコマンドを打つと、同じ名前のコンテナを作成しようとして
## The container name "/app_run" is already in use by container xxxとエラーになるため。
## 起動中のコンテナを確認する
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ad5f2b083bb app_image "node" 5 minutes ago Exited (0) 3 minutes ago app_run
$ docker container stop app_run
$ docker container rm app_run
## コンテナが削除されたことを確認する
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
停止後に自動でコンテナを削除する
–rmオプションをつけて起動する。
# ーーrmオプションを付与する
$ docker container run --rm --name app_run -p 8888:8888 app_image
# 別セッションから動作チェックする
$ curl localhost:8888
Hello World!
docker container createでコンテナを作成し、docker container startで起動するパターン
# コンテナを作成する
$ docker container create --name app_create -p 8888:8888 app_image
# コンテナを起動する
$ docker container start app_create
app_create
# 動作チェックする
$ curl localhost:8888
Hello World!
# 事後処理としてコンテナを停止し、削除する
## 起動中のコンテナを確認する
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ad5f2b083bb app_image "node" 5 minutes ago Exited (0) 3 minutes ago app_run
$ docker container stop app_run
$ docker container rm app_run
## コンテナが削除されたことを確認する
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
おわりに
普段WebアプリケーションをDockerで起動する場合はdocker-composeを利用することが多いので、あまりこの辺りのコマンドについて調べたことがなかった。
Dockerを使ってワンライナーを叩くときは $ docker container run --rm
を利用することが多い。
参考: Docker コンテナで起動したシェルに接続する (docker container run/start/exec/attach)