Dockerのimageを再ビルドせずに新しいパッケージを使う(docker commit)
Dockerfileに書いていないパッケージを追加したい
Docker(docker-compose)、Python、FlaskでWebアプリを作ってます。
DockerfileにRUN pip3 install -r requirements.txt
と記述し、アプリで使用するPythonのパッケージをインストールしているのですが、初心者なので必要なパッケージがわからず、開発が進むにつれてアレもコレも入れなくちゃ…となることがありました。
その際requirements.txt
にパッケージ名を追記し、Dockerのイメージを再ビルドしていましたがめちゃくちゃ面倒です。
そういう時はcommitを使えばいいよと教わったので、手順をメモ。
手順
docker-compose up
でコンテナを立ち上げ、
docker exec -it コンテナID bash
でコンテナ内のbashを開きます。
(コンテナIDはdocker ps
で確認)
そこでpip3 install 必要なパッケージ
を実行し、必要なものをインストールします。
終わったらCtrl+D
でコンテナを抜けておきます。
そしてdocker commit コンテナ名 新しく作るイメージ名
とすると、必要なパッケージがインストールされた新しいイメージが作成されます。
後はdocker-compose.ymlのimage名をその新しいものに置き換えるだけ。
以上です。イメージのビルドと違って一瞬で終わります。便利〜
最終的に改めてDockerfileを更新し、ビルドしなおすのが良いです。