見出し画像

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 でログ監視、コンテナの実行管理ができる

セキュリティグループの作成

  1. EC2ダッシュボードのセキュリティグループをクリック

  2. セキュリティグループ:任意

  3. 説明:任意

  4. VPC:デフォルト

  1. インバウンドルールでルールを追加

  2. タイプ:カスタムTCP

  3. ポート範囲:9000

  4. ソース:カスタムを選択し、「0.0.0.0/0」と入力(本当はちゃんと設定したほうがいい)

  5. 説明:任意

  6. セキュリティグループを作成

  1. インスタンスから立ち上げたインスタンスをクリック

  2. アクション→セキュリティ→セキュリティグループを変更をクリック

  3. 先程作成したPortainer用のセキュリティグループを選択し、セキュリティグループを追加をクリック

  4. 保存

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にログイン

参考


いいなと思ったら応援しよう!