KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Docker Ubuntu 復習 - docker run と exec で新しいコンテナを動かす

参考

過去の自分の記事

kei-s-lifehack.hatenablog.com

ファイルとイメージとコンテナってなんだっけ?

hacknote.jp

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 コンテナ名 だけではダメで、引数が必要

qiita.com

-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...]

www.memotansu.jp

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 に入ることができた。

## これから

辿り着いたのはイメージから新しく立ち上げるコマンドばかりで、既存の停止したコンテナを再稼働させるやり方がわかってないのでそれをまとめる。