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を更新し、ビルドしなおすのが良いです。