やりたいこと
通常、開発をDockerを使ってローカル環境で行ってるんですが、諸事情によりEC2環境上にローカルと同じ環境を構築したいということで作業したところ、リポジトリにローカルコンテナの環境記述してあるし、すぐできるでしょ、と思っていたらいくつか詰まったポイントがありましたので備忘録として残しておきます。
前提
普段、Macを使ってローカル環境で、Docker composeを使ってコンテナを立ち上げて作業してます。
これを、Amazon Linux 2023上で再現するということ。
AWS側のネットワークやセキュリティグループなどについては適切に設定が行えるという前提で、割愛させていただきます。
AWS console上での作業
EC2インスタンスを新規に立ち上げます。
当然ながらAMIやインスタンスタイプを指定して起動することになりますが、このとき、ローカル環境をMacで作業しているような場合は、アーキテクチャでArm64を指定しておくようにしましょう。
ここを間違えると、後々、つまづきます。
必要なソフトウェアのインストール及び設定
開発に必要となるミドルウェア系のソフトをインストールおよび設定します。
- ssh などでインスタンスに接続し、dnfでアップデートした後、git と docker をインストール
- sudo dnf update
- sudo dnf install git docker
- 必要ならmake のインストール
- sudo dnf install make
- dockerの設定
- sudo usermod -aG docker $USER
- dockerを実行する権限を、一般ユーザー(EC2の場合、だいたいec2-user)に与える
- sudo systemctl start docker
- sudo systemctl enable docker
- dockerデーモンを起動した後、インスタンス起動時に自動起動するように設定。
- sudo usermod -aG docker $USER
- docker compose のインストール
-
sudo curl -SL https://github.com/docker/compose/releases/download/v2.36.1/docker-compose-linux-aarch64 -o /usr/libexec/docker/cli-plugins/docker-compose
-
このときの対象ファイルの指定に注意するポイントが3つ。
-
まず、バージョンの指定。執筆時点での最新が 2.36.1 ですが、必要に応じて古いものなり、更に新しいものへ変更を。
-
続いてアーキテクチャの指定ダウンロード対象の最後にある linux-aarch64 がLinuxのArm64のアーキテクチャ。他にもWindowsのx86やdarwinのarmなど、複数のパターンがあるので、公式GitHubのリリースノートのAssets を確認して、自分が必要とするものを指定する。
-
最後にファイルを保存する場所。公式GitHubのREADMEでは
/usr/local/lib/docker/cli-plugins OR /usr/local/libexec/docker/cli-plugins /usr/lib/docker/cli-plugins OR /usr/libexec/docker/cli-plugins
という4パターンの記載があるが、私が試したときには、何故か
/usr/local/libexec/docker/cli-plugins
ではうまく動かなかった。原因は追求していないが、確認したところ、dockerをインストールした時点で自動的に作られるフォルダは/usr/libexec/docker/cli-plugins/
だったのでこちらを利用したところ適切に動いた。 -
-
-
sudo chmod +x /usr/libexec/docker/cli-plugins/docker-compose
- 最後に対象ファイルに実行権限を付与して完了。
-
エラーが起きたとき
例えばdocker-composeをダウンロードするときにアーキテクチャの指定を間違えたりしている場合、 docker -v
コマンドは正常に動く(バージョンを返してくる)が docker compose version
を実行したときには
docker: 'compose' is not a docker command.
See 'docker --help'
と、composeをインストールする前と全く変わらない挙動でエラーを返してきて???となった。
この場合 /usr/libexec/docker/cli-plugins/docker-compose
のように、インストールした docker-compose
ファイルを直接実行すると
-bash: /usr/libexec/docker/cli-plugins/docker-compose: cannot execute binary file: Exec format error
のように、ファイルフォーマットが間違えている、というメッセージを返してくれるので、OSやアーキテクチャを確認して、再度ファイルをダウンロードすれば良し。
最初これに気づかず、インストールしたはずなのに、パスが通ってない??とかしばらく悩んでました…。
ここまでくれば、あとは普段ローカル環境でやるように、コンテナをビルドして起動してやれば、普通に環境が動いてくれるはずです。
参考サイト
https://zenn.dev/kun432/scraps/1078b45bf8d250
https://qiita.com/MasahitoShinoda/items/d0c0c5b011b33c27be5c