質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

2314閲覧

Dockerでコンテナ再作成後も変更を維持する方法

univ_esuty

総合スコア27

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/11/13 09:35

編集2021/11/13 11:37

コンテナを削除して再度作成した際に、Dockerのコンテナ内でapt-get等によりインストールした物の変更を保持させたい。
特にPythonなどをインストールしてpip等で入れたライブラリやanaconda3などで作成した仮想環境もすべて保持させたい。

◆ やりたいことの簡単な具体例

1. コンテナ内にて以下のような命令を実行

bash

1$ apt-get install python3.8 2$ python3.8 3>>> 'hello world' 4'hello world' 5>>> ## pythonが実行できる

2. コンテナを削除→作成すると

bash

1$ python3.8 2python3.8 command not found.

当然ですが、pythonは削除されています。
ここで、削除前の変更分を別途どこかに記録するなどして、再作成後に簡単に読み込み再構築することで、pythonを保持してすぐに使えるようにしたい!

Dockerfileにインストール命令を書くのが一般的かと思われますが、Pythonなどで使用するライブラリを頻繁に変更させるため、あまりやりたくありません。それに2度手間になりすごく面倒です。

何か良いアイデアはありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

イメージの作り方

https://docs.docker.jp/engine/reference/commandline/commit.html
コンテナのコミットを参照

vimのあるコンテナを作るサンプル

1.コンテナを作る&プロセス確認する

docker run --name testpine -it -d alpine:latest docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ced094511c0 alpine:latest "/bin/sh" 41 seconds ago Up 40 seconds testpine

2.(b)ashでコンテナに入ってvimが無い事を確認する

docker exec -it testpine ash / # vim ash: vim: not found

3.vimをインストールして、コンテナを抜けて、もう一回入ってvimがある事を確認する

/ # apk add vim fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz (1/5) Installing xxd (8.2.3437-r0) (2/5) Installing lua5.3-libs (5.3.6-r0) (3/5) Installing ncurses-terminfo-base (6.2_p20210612-r0) (4/5) Installing ncurses-libs (6.2_p20210612-r0) (5/5) Installing vim (8.2.3437-r0) Executing busybox-1.33.1-r6.trigger OK: 25 MiB in 19 packages / # which vim /usr/bin/vim / # exit docker exec -it testpine ash / # which vim /usr/bin/vim ※当然vim見つかる / # exit

4.イメージを作る&イメージを作れたことを確認する

docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ced094511c0 alpine:latest "/bin/sh" 4 minutes ago Up 4 minutes testpine docker commit 3ced094511c0 testpine:1.0 docker images|findstr testpine testpine 1.0 a3601fa6e12e 22 seconds ago 24.6MB

5.作ったイメージを元にコンテナを作り、vimがある事を確認する

docker run --rm -it testpine:1.0 ash / # which vim /usr/bin/vim ※無事にvimは見つかる

旧回答

コンテナ再起動後にも保持させたい。

再起動(stop→start)ではコンテナの状態は消えません
再起動と勘違いして再作成(コンテナ削除→コンテナ作成)をしているのではないですか?

https://docs.docker.jp/engine/reference/commandline/stop.html
https://docs.docker.jp/engine/reference/commandline/start.html
https://docs.docker.jp/engine/reference/commandline/restart.html

投稿2021/11/13 11:10

編集2021/11/13 13:29
hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

univ_esuty

2021/11/13 11:27

すみません、説明不足でした。ここでは、「再起動=コンテナ削除→作成」の意味で使用しておりました。コンテナを削除して再度作成する際に、削除前の変更を別のディスク(HDD等)に自動で保存して再度作成されたときに読み出して再構築するといったことを実現したいです。
hentaiman

2021/11/13 11:34

その操作だと状態が消えるのが正常な動作なので、保持したい状態つまりaptコマンドなど色々打った後のコンテナから新たにイメージを作るしかありません https://docs.docker.jp/engine/reference/commandline/commit.html それも避けたいなら既に質問に質問者自身で書いてある「Dockerfileにインストール命令を書く」しかありません
univ_esuty

2021/11/13 12:45 編集

docker commit は知りませんでした。調べてみたところ、やりたいことに非常に近いことが実現できそうです。ベストアンサーとしてのせたいので、commit に関しての参照リンクとできれば簡単な説明を回答に追記お願いできますか?
hentaiman

2021/11/13 13:30 編集

なんの説明して欲しいのか分からないけど、使い方がいまいち分からないって感じでしょうかね? そういう意味だと思って参考用にホストとコンテナのコマンド手順ぽいもの載せますね ホストがwindowsなのでmacじゃ使えないコマンド混ざってますが
univ_esuty

2021/11/13 13:56

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問