Docker Ubuntu 復習 - docker run と exec で新しいコンテナを動かす
参考
過去の自分の記事
ファイルとイメージとコンテナってなんだっけ?
Dockerfile から Docker Image を作成してそれを走らせると Docker Container になる
プログラムを走らせるとプロセスになる感じか...?
イメージが残っているか確認
docker images ubuntu latest adafef2e596e 9 months ago 73.9MB
9 ヶ月前に起動した ubuntu のが残っていた
他にもたくさんある
コンテナが残っているか確認
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 84a68690ab25 adminer "entrypoint.sh docke…" 5 months ago Up 13 days 0.0.0.0:8080->8080/tcp docker-mysql_adminer_1 632563fd4842 mysql "docker-entrypoint.s…" 5 months ago Up 13 days 3306/tcp, 33060/tcp docker-mysql_db_1
docker ps で確認すると mysql と adminer があった。
確かこれは動いてるコンテナだったはず...
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5e8f213f6a6f postgres:latest "docker-entrypoint.s…" 4 months ago Exited (255) 2 weeks ago 0.0.0.0:5432->5432/tcp introductiontoblitz_db_1 84a68690ab25 adminer "entrypoint.sh docke…" 5 months ago Up 13 days 0.0.0.0:8080->8080/tcp docker-mysql_adminer_1 632563fd4842 mysql "docker-entrypoint.s…" 5 months ago Up 13 days 3306/tcp, 33060/tcp docker-mysql_db_1 10075622af77 ubuntu "bash" 6 months ago Exited (0) 6 months ago elegant_euler
-a をつけて確認すると止まってるコンテナも見えた。
全部は載せないが、 mysql, adminer, それから ubuntu がいた。
コンテナが既にあればイメージは必要ない。
この ubuntu コンテナに再度 in したい
docker run -it でコンテナを動かす
docker run コンテナ名 だけではダメで、引数が必要
-i が inter-active, 相互的。つまりこちらからも入力ができるようになる
-t が tty, 端末。これがないと bash が開けない。
--rm をつけると終わった後にコンテナが消滅する。一時的な利用のインスタンスの場合は
docker ps -a | grep ubuntu 10075622af77 ubuntu "bash" 6 months ago Exited (0) 6 months ago elegant_euler
起動していない ubuntu の コンテナがあるのを確認
新しく run --rm でコンテナインスタンスを作る
docker run -it --rm ubuntu root@d10ba802160b:/#
新しいコンテナがイメージから作成されてインした。
touch testFile0407.text
vi はないので touch で今日の日付のファイルを作成
exit docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 84a68690ab25 adminer "entrypoint.sh docke…" 5 months ago Up 13 days 0.0.0.0:8080->8080/tcp docker-mysql_adminer_1 632563fd4842 mysql "docker-entrypoint.s…" 5 months ago Up 13 days 3306/tcp, 33060/tcp docker-mysql_db_1
docker ps をするとちゃんと --rm が効いているのか消えている。
今度は --rm なしでうごかす
新しくコンテナを作る
docker run -it ubuntu root@6063ce36303c:/# ls exit docker ps -a | grep ubuntu 6063ce36303c ubuntu "/bin/bash" 56 seconds ago Exited (0) 17 seconds ago gallant_easley 10075622af77 ubuntu "bash" 6 months ago Exited (0) 6 months ago elegant_euler
今回はさっき作った ubuntu が残っている
しかし docker ps では出なかった。--rm をつけなくても、Ubuntu コンテナから exit すると停止するということらしい。 サービスじゃなくてシェルなんだからそれはそうか。
run -d で裏で新しくコンテナを立ち上げる
docker run -dit ubuntu 5a8638528c62a9e935517a9060bbd27fa143dea90bc1c296cf9e435b484a6832
-d を追加して実行すると裏で動くので、コンテナ ID だけが表示される。
稼働中のコンテナリストを見てみると
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5a8638528c62 ubuntu "/bin/bash" 26 seconds ago Up 26 seconds goofy_mclaren 84a68690ab25 adminer "entrypoint.sh docke…" 5 months ago Up 13 days 0.0.0.0:8080->8080/tcp docker-mysql_adminer_1 632563fd4842 mysql "docker-entrypoint.s…" 5 months ago Up 13 days 3306/tcp, 33060/tcp docker-mysql_db_1
ubuntu が稼働中になっているのが確認できる
この状態なら exec で入れる。
これも新しくコンテナを作る操作なので、既にある停止中のコンテナを再稼働させルことはできない。そちらは後で調べる
docker exec -it YourContainerID YourCmd で動いているコンテナを使う
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec は動いているコンテナでコマンドを実行したり、そのコンテナに入るコマンド。
-d で裏で起動させたコンテナにインしてみる
docker exec -it 5a8638528c62 ls bin dev home lib32 libx32 mnt proc run srv tmp var boot etc lib lib64 media opt root sbin sys usr
コンテナの指定は ubuntu ではダメだった。あれはイメージの名前だからだろう。 コンテナ ID を指定しなければならない。
これで指定した稼働中のコンテナでコマンドが実行できた。
この ls を bash にすれば
docker exec -it 5a8638528c62 bash root@5a8638528c62:/# ```` 稼働中 (running) のコンテナの bash に入ることができた。 ## これから 辿り着いたのはイメージから新しく立ち上げるコマンドばかりで、既存の停止したコンテナを再稼働させるやり方がわかってないのでそれをまとめる。