DockerをEC2にデプロイ
やろうとしていること
ローカルで作った仮想通貨botをEC2で起動させたい。
環境
Windows11 + WSL(Ubuntu)
Docker Desktop
VS Code
ディレクトリ構成
project_directory/
├── app/
│ ├── Dockerfile
│ ├── requirements.txt
│ └── main.py
├── .env
└── compose.yaml
Dockerfileやcompose.yamlの中身は割愛
SSHキーペアの作成(ローカル)
ssh-keygen -t ed25519 -f /path/to/private/key -C "名前"
/path/to/private/key は秘密鍵のパス。VS Codeなら .sshの中にあり
-t ed25519 は暗号化形式を指定(ecdsaはEC2に登録出来なかった)
-C "名前" はコメント。なくても良い
.pubがついてるほうが公開鍵
EC2インスタンスを建てる
AWSアカウントの作成
割愛
キーペアの登録
EC2ダッシュボードのキーペア→アクション→キーペアのインポート
名前は任意→公開鍵の中身を貼り付け→キーペアをインポート
EC2インスタンスを建てる(Launch an instance)
名前は任意
マシンイメージはUbuntuにした。Amazon Linuxで別にいい。
インスタンスタイプはデフォルト
キーペアは先程インポートしたやつを選択
ネットワークは3つすべてチェック(後からちゃんと設定したい)
ストレージはデフォルト
インスタンスを起動
SSHキーの指定(ローカル)
ssh -i /path/to/private/key User@HostName
Userはインスタンスのユーザー名。Ubuntuならubuntu、Amazon Linuxならec2-user。
HostNameはインスタンスのパブリック IPv4 アドレス
SSHでログイン(ローカル)
ssh User@HostName
dockerのセットアップ(EC2)
sudo apt update && sudo apt install -y docker.io \
&& sudo systemctl enable --now docker \
&& sudo usermod -aG docker $USER
Ubuntuの場合はapt、Amazon Linuxはyumかな?
コマンドの解説は追記予定
docker composeのセットアップ(EC2)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
上のdockerのインストールだけでは使えなかったので、追加でインストール
コマンドの解説は追記予定
SSHエージェントを起動し、秘密鍵を追加(ローカル)
eval $(ssh-agent)
ssh-add /path/to/private/key
毎回これをしないとローカルからEC2にログインできない
この作業を自動化する方法もあるが割愛
ローカルからEC2にファイル転送(ローカル)
rsync -avz -e "ssh -i /path/to/private/key" /path/to/local/file your_username@your_ec2_public_dns_or_ip:/path/to/destination
ローカルのディレクトリをEC2に送る。
解説は追記予定
dockerを起動
docker-compose up --build -d
docker compose up --build では無理。
-d はバックグラウンドで起動
Portainerでコンテナを管理
クラウド版のDocker Desktopみたいなやつ
GUI でログ監視、コンテナの実行管理ができる
セキュリティグループの作成
EC2ダッシュボードのセキュリティグループをクリック
セキュリティグループ:任意
説明:任意
VPC:デフォルト
インバウンドルールでルールを追加
タイプ:カスタムTCP
ポート範囲:9000
ソース:カスタムを選択し、「0.0.0.0/0」と入力(本当はちゃんと設定したほうがいい)
説明:任意
セキュリティグループを作成
インスタンスから立ち上げたインスタンスをクリック
アクション→セキュリティ→セキュリティグループを変更をクリック
先程作成したPortainer用のセキュリティグループを選択し、セキュリティグループを追加をクリック
保存
Portainerのインストールと設定(EC2)
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Portainerコンテナをデタッチモードで起動し、ホストのポート9000をコンテナのポート9000にマッピング。
Dockerソケットをコンテナにマウントし、Portainerのデータを永続化するためにportainer_dataという名前のボリュームを作成
ウェブブラウザで http://<EC2-instance-public-IP>:9000 にアクセス
管理者ユーザーのパスワードを設定し、Portainerにログイン