📀

EC2の環境をそのままDockerのイメージにする

2023/09/18に公開

はじめに

EC2で使っているAmazon Linuxが古過ぎて(!)使っているChrome Driverのバージョンが合わせられず環境の統一ができず困ったのでそれならばとイメージ化して使うことにしました。

概要

基本的にはLinuxのシステムDirを固めてイメージにするだけです。

どうやる

必要なディレクトリは人やシステムによって違うのでその辺は適宜除いたり追加したりしてください。
※これはRHEL系です。Ubuntuだとまたちょっと構成違います。

ディレクトリを追加して、excludeで不要なものを除くイメージです。
logみたいな容量を食うものは取り除いたりしたので何度かやり直しました。
それでも最終的には数GBになって結構容量を食うので、EFSマウントしたところで作業しました。
EC2で容量あまりとってなかったりするといっぱいになってしまうと思うので注意です。
あと権限も基本的にrootじゃないとできないです。

rsync -avz /* /<EFSマウント先>/image --exclude '/dev' --exclude '/proc' --exclude '/sys' --exclude '/run' --exclude '/mnt' --exclude '/data' --exclude '/var/log' --exclude '/usr/local/var/log' --exclude '/var/spool' --exclude '/var/lib/mysql' --exclude '/var/cache'

出来上がったディレクトリをtarボールにします。

cd <EFSマウント先>
tar -czvf custom-image.tar.gz -C image .

出来上がったtarボールを元にイメージを立ち上げます。

FROM scratch

ADD docker/local/app/my-linux.tar.gz /
...起動させるコマンドとか...

どうなる?

元にしたEC2とかと同じ環境で上がってくると思います。
EC2に限らなくてもほとんどの場合使えるやり方だと思います。

それで?

環境再現系のバグとか、本番環境はあるけどローカル開発環境がないからDocker化したいとか、割と使える場面はあるけど常に使うようなものでもないので覚えていれば役に立つくらいのものかもですね。

ほかには?

ECSに移行するときとかにももしかしたら使えるかも?

さいごに

大体の場合pullしてくるものより大きくなっちゃうと思うのでできるならゼロからちゃんと構築し直したいところですね。

Discussion