コンテナは実行するプロセスをひとまとまりに保管しておく箱のようなものです。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(またはコンテナ名) リポジトリ名(:タグ)