コンテナの管理

コンテナは実行するプロセスをひとまとまりに保管しておく箱のようなものです。1つのdocker imageから、用途に合わせて複数のコンテナを作成できます。

例えば、Ubuntuのdocker imageから、機械学習用のコンテナとサーバー用のコンテナを作成したとします。機械学習で実行されるプロセスと、サーバーで実行されるプロセスは異なりますが、起動されているUbuntuというOSは同じです。共通部分(OS)はimageから起動していて、差分はコンテナから起動しているような感じだと理解していただければ十分です。

docker imageからコンテナを実行する

docker run リポジトリ名(:タグ)
docker run ubuntu:latest

コンテナ実行時によく使うパラメータ:

# コマンドを指定して実行する(imageの後にコマンドを指定)
docker run -it ubuntu bash

# コンテナの名前を指定する(--name)
docker run --name sample_container -it ubuntu bash

# コンテナにホストのフォルダをマウントする(-v)
docker run -it --name sample_container -v //c/Users/greg/git/sample-repo:/mnt/sample-repo ubuntu bash

# 外部からアクセスできるよう、ホストのポートをコンテナのポートにつなげる(-p)
docker run -it -p 8888:8888 jupyter/datascience-notebook bash

# バックグラウンドで動かす(-d)
docker run -d ubuntu

# コンテナが使用できるCPUとメモリの上限を設定(--cpus, --memory)
docker run -it --cpus 1 --memory 2g ubuntu bash

# コンテナの実行完了後にコンテナを即削除する
docker run --rm ubuntu

コンテナの一覧を確認する

docker ps

# 非アクティブなものも含める
docker ps -a

コンテナからホストに戻る

コンテナを停止してホストに戻る場合:

exit

コンテナを停止せずにホストに戻る場合:

Ctrl + p の後に Ctrl + q

ホストからコンテナに戻る

停止されているコンテナを再度起動する場合:

docker restart コンテナID(またはコンテナ名)

起動されているコンテナに戻る場合:

docker attach コンテナID(またはコンテナ名)

# 特定のプロセスを動かす(例:bash)
docker exec -it コンテナID(またはコンテナ名) bash

ホストから起動されているコンテナを停止する

docker stop コンテナID(またはコンテナ名)

コンテナを削除する

docker rm コンテナID(またはコンテナ名)

# 全ての止まっているコンテナ、タグなしイメージ、未使用ボリューム、未使用ネットワークを一括削除する
docker system prune

コンテナからdocker imageを作成する

docker commit コンテナID(またはコンテナ名) リポジトリ名(:タグ)