Dockerイメージを保存しないで再起動して、設定が全部消えてしまった件。（原因と回避策）

Docker環境で、Ubuntuを動かして、色々と設定したのに、exitして再度、立ち上げたら、全部設定が消えてしまったと言う悲劇が起きたので、原因と回避策をさぐりました。
環境は、Mac　M１。


***
散々、試行錯誤しましたが、結論は下記。（これが本質）
■ 例えば、ubuntuのイメージに変更を加えたら、Tagでバージョン管理をする。
ubuntu:0.1.０みたいな感じで、バンバンとバージョンを指定する。
■ すると、スナップションとみたいに、沢山のバージョンが時系列的にできるので、キチンと時系列で管理できる。
***

下記を参考にしました。

【Docker】第3回　コンテナのライフサイクルとイメージの作成
https://www.public.ne.jp/2019/01/08/docker-3/

Dockerに慣れる : 変更したコンテナイメージを保存する
https://leico.github.io/TechnicalNote/Docker/basic-commit-container

＜発生した現象＞
下記の様に、Dockerイメージがあります。

```
test@test-mac ~ % docker images
REPOSITORY               TAG             IMAGE ID       CREATED             SIZE
ubuntu                   latest          a9ebd79b0af9   About an hour ago   65.7MB
ubuntu                   20.04           1095aea5bb8b   2 hours ago         65.7MB
test0329                 latest          7056fcb1b862   8 days ago          584MB
alpine                   latest          d74e625d9115   7 weeks ago         7.46MB
docker/getting-started   latest          289dc403af49   3 months ago        46.5MB
springci/graalvm-ce      java17-0.12.x   91af9a3fca9f   5 months ago        1.16GB
test@test-mac ~ % 
```
Ubuntu最新版のDockerイメージを起動します。

```
test@test-mac ~ % docker run -it ubuntu:latest
root@e3064d80e9b0:/# 
root@e3064d80e9b0:/# 
root@e3064d80e9b0:/# 
```
JDKの設定等を含めて、かなり時間を掛けて行ったが、再起動したら、全部消えてしまったと言う事例。

尚、イメージを消すときは、"docker rmi [IMAGE ID] --force"コマンド。 
```
 % docker rmi 004df6e255ed --force
```

＜原因＞
話は簡単で、「コンテナに内部変更を行いそれを残したい場合には、「新たなイメージとして保存」する必要がある。」と言うことだけ。
イメージとしては、こんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/7509acff-9c0c-a830-f24a-c685768a3355.png)


＜操作＞
① "docker ps -a"コマンドで、イメージを作成したいContainer IDを見つけた上で、
② "docker commit [Container ID] [保存イメージ名：タグ]"でイメージ保存。

こんな感じで、スナップショットが並んでいる。
```
test@test-mac ~ % docker ps -a  
CONTAINER ID   IMAGE   COMMAND  CREATED   
f98bea4d7ca2   ubuntu:latest   "/bin/bash"   About a minute ago   
7fa578e17825   da8d2bf0633b    "/bin/bash" 　　　1 hour ago
```

こんな感じで、イメージ保存。
今回は、"ubuntu:0.1.4" で保存する。
```
test@test-mac ~ % docker commit f98bea4d7ca2 ubuntu:0.1.4
sha256:006b5819e4b3fe0beadb5baa5753d1654e39d0da4046cd3a3223c9f24ca79ef3
test@ytest-mac ~ % 
```

もう一度、やってみます。そして、本当に保存されているか？　　も確認してみます。

まず、"docker run -it ubuntu:0.1.4"で、Dockerイメージを起動します。
```
test@test-mac ~ % docker images
REPOSITORY               TAG             IMAGE ID       CREATED          SIZE
ubuntu                   0.1.4           de7c3ccaa93f   11 minutes ago   69.2MB
ubuntu                   latest          26b24c9b8227   10 hours ago     69.2MB
alpine                   latest          1b0be3b64950   2 days ago       7.46MB
docker/getting-started   latest          289dc403af49   3 months ago     46.5MB
springci/graalvm-ce      java17-0.12.x   91af9a3fca9f   5 months ago     1.16GB
test@test-mac ~ %
test@test-mac ~ %
test@test-mac ~ % docker run -it ubuntu:0.1.4
root@07e3cf260a71:/# 
root@07e3cf260a71:/# 
````

/opt/jvmの直下に、現時点で2つのファイルがありますが、３つ目のファイルを足してみます。(xyz.txtです。）
```
test@test-mac ~ % docker run -it ubuntu:0.1.4  
root@07e3cf260a71:/# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@07e3cf260a71:/# cd opt
root@07e3cf260a71:/opt# cd jvm
root@07e3cf260a71:/opt/jvm# ls
addtest.txt  test0411z.txt
root@07e3cf260a71:/opt/jvm# touch xyz.txt
root@07e3cf260a71:/opt/jvm# 
root@07e3cf260a71:/opt/jvm# 
````

"Control + P +Q" で抜けて、一旦、ホストに戻ります。
現在、起動しているのは、ubuntu:0.1.4ですから、これを下記コマンドで、ubuntu:0.1.5として保存します。
"docker commit magical_visvesvaraya ubuntu:0.1.5" 
(因みに、# "docker run -it f3b2048369e5 ubuntu:0.1.5"としても同じ。 )
```
test@test-mac ~ % docker ps                                  
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
07e3cf260a71   ubuntu:0.1.4    "/bin/bash"   38 seconds ago   Up 38 seconds             magical_visvesvaraya
0960ac4cad6e   ubuntu:latest   "/bin/bash"   3 hours ago      Up 3 hours                kind_kepler
test@test-mac ~ % 
test@test-mac ~ % docker commit magical_visvesvaraya ubuntu:0.1.5
test@test-mac ~ % 
test@test-mac ~ % 
````
ubuntu:0.1.5として、保存出来た筈です。
```
test@test-mac ~ % 
test@test-mac ~ % docker images
REPOSITORY               TAG             IMAGE ID       CREATED          SIZE
ubuntu                   0.1.5           f3b2048369e5   19 seconds ago   69.2MB
ubuntu                   0.1.4           de7c3ccaa93f   20 minutes ago   69.2MB
ubuntu                   latest          26b24c9b8227   10 hours ago     69.2MB
alpine                   latest          1b0be3b64950   2 days ago       7.46MB
docker/getting-started   latest          289dc403af49   3 months ago     46.5MB
springci/graalvm-ce      java17-0.12.x   91af9a3fca9f   5 months ago     1.16GB
```

ubuntu:0.1.5では、３つのファイルがある事が確認できます。（正常です。）
```
test@test-mac ~ % docker run -it ubuntu:0.1.5  # "docker run -it f3b2048369e5 ubuntu:0.1.5" でも同じ。
root@23c2599454f4:/# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@23c2599454f4:/# cd opt
root@23c2599454f4:/opt# cd jvm
root@23c2599454f4:/opt/jvm# ls
addtest.txt  test0411z.txt  xyz.txt
```
因みに、ubuntu:0.1.4では、2つのファイルがある事が確認できます。（これも正常です。）
```
test@test-mac ~ % docker run -it ubuntu:0.1.4
root@47b34bfe6def:/# 
root@47b34bfe6def:/# 
root@47b34bfe6def:/# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@47b34bfe6def:/# cd opt
root@47b34bfe6def:/opt# cd jvm
root@47b34bfe6def:/opt/jvm# ls
addtest.txt  test0411z.txt
root@47b34bfe6def:/opt/jvm# 
```

完