TIL96. Weterest Project:DockerによるEC 2、RDSの配備


📌 この文書では、Dockerを使用してEC 2およびRDSを配備する手順をまとめた.
🌈 DockerによるEC 2、RDSの導入
🔥 Dockerイメージの作成
🔥 EC 2からDocerを配備
🔥 環境変数の使用方法
1.Dockerイメージの作成
🤔 Docker Fileの作成
✔Dcker Fileを作成すると簡単に画像を作成できます.
✔Docker Fileを作成する前に注意しなければならない点はmy settginsです.pyでは、データベースの設定をAWS RDSに合わせます.
DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '[RDS db 이름]',
        'USER': 'root',
        'PASSWORD': '[RDS db 비밀번호]',
        'HOST': '[RDS db 엔드포인트]',
        'PORT': '3306',
	'OPTIONS': {'charset': 'utf8mb4'}
    }
}
勘定科目の勘定科目AWS RDSは、RDSエンドポイントに接続され、DBが作成され、データが注入されます.
✔AWS DB作成方法
mysql>>createデータベース[AWS db名]文字セットutf 8 mb 4 collate utf 8 mb 4 general ci;
✔DB Dumpの昇り方
(ローカル)$mysqldump-uルート-p[データベース名]>[ファイル名].sqlパスワードを入力
✔DB注入方法
(ローカル)$mysql-h[端点貼り付け]-u root-p[AWS db名]<[ファイル名]です.sqlパスワードを入力
🤔 requirement.txt
✔¥Dockerイメージ、イメージ実行中の要求.DockerFileを作成してtxtを自動的にインストールするため、漏れたライブラリがあるかどうかを確認する必要があります.
✔¥Dockerで実行するとバックグラウンドでGunicornモードでミドルウェアが実行されるので、予めインストールする必要があります.txtに追加します.
🤔 DockerFileの作成
✔DockerFileはブランチに沿って生成されます.
✔️ manage.pyが存在するレイヤにDockfileというファイルを作成し、次のように入力します.
✔」まずPythonバージョンを調整し、作業ディレクトリを設定します.
✔¥以降のリクエスト.txtを再帰的にインストールし、すべてのソースファイルをイメージにコピーします.
このベースにポート転送を行います.
最後にgunicornをwsgiに貼り付けてバックグラウンドで実行します.
#./Dockerfile
FROM python:3.8
#기반이 될 이미지
# 작업디렉토리(default)설정
WORKDIR /usr/src/app 
## Install packages
#현재 패키지 설치 정보를 도커 이미지에 복사
COPY requirements.txt ./ 
#설치정보를 읽어 들여서 패키지를 설치
RUN pip install -r requirements.txt
## Copy all src files
#현재경로에 존재하는 모든 소스파일을 이미지에 복사
COPY . . 
## Run the application on the port 8080
#8000번 포트를 외부에 개방하도록 설정
EXPOSE 8000   
#CMD ["python", "./setup.py", "runserver", "--host=0.0.0.0", "-p 8080"]
#gunicorn을 사용해서 서버를 실행
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "config.wsgi:application"]  
🤔 Dockerイメージの作成
✔Dockerデフォルトコマンド
docker ps # 👈 실행중인 컨테이너를 보여주는 커맨드
docker ps -a # 👈 실행이 종료된 것을 포함해서 모든 컨테이너를 보는 커맨드 및 옵션
docker images # 👈 생성된 혹은 다운로드 된 이미지를 보여주는 커맨드
docker images -a # 👈 모든 이미지를 보여주는 커맨드 및 옵션
docker rm $(docker ps -a -q) # 👈 Mac 컨테이너 전부 삭제 명령어
sudo docker rm $(sudo docker ps -a -q) # 👈 UBUNTU 컨테이너 전부 삭제 명령어
docker rmi $(docker images -q) # 👈 Mac 이미지 전부 삭제 명령어
sudo docker rmi $(sudo docker images -q) # 👈 UBUNTU 이미지 전부 삭제 명령어
✔Dockerイメージの構築
$docker build-t[マイアカウント]/[プロジェクト名]:バージョン.
ex) docker build -t jewon119/weterest:0.1.0 .
2.EC 2にDockerを配備する
🤔 EC 2 Dockerのインストール
✔EC 2インスタンスの作成方法は、以前のリリースを参照してください.EC 2に入るコマンドは以下の通りです.
$ssh-i[ファイル名.cer]ubuntu@[公認IP]👈 EC 2インスタンスのIpv 4パブリックIPアドレスの確認
✔EC 2に入っている場合はDockerをインストールします.
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
✔Dockerログインはdocker loginコマンドで行えます.ユーザー名とpwはdockerサイトのidとpwです.
🤔 Dockerイメージの取得
✔¥ローカルで生成されたDockerイメージを取得する方法は以下の通りです.
$ (aws) docker pull [image name]
🤔 Docker Run
ААААААААААААААААコンテナ名は直接指定すればいいです.
$(aws)docker run--name[コンテナ名]-d-p[ホストポート]:[コンテナポート][イメージ名]
ex) docker run --name weterest01 -d -p 8000:8000 jewon119/weterest:0.1.0
✔¥構築されたイメージに様々な理由で問題がある場合は、docker ps-aコマンドで確認すると、彫像が存在することがわかります.画像に問題があるのでdocker psで確認できません.
АААААААААААААААただし,ここでは修正を解決するのではなく,再修正してから画像を生成する必要がある.
$ (aws) docker run -it jewon119/weterest:0.1.0/bin/bash
3.環境変数の使用方法
🤔 my_settings.pyではなく環境変数を使用している場合は?
環境変数として✔zshrcを使用してDBまたは複数の値を格納してサーバを構築した場合、イメージ作成時にEC 2に対応する環境変数が見つかりません.
✔EC 2設定環境変数に入ってもDockerはファイル管理を推奨しますので不可能です.
ААААААААААААААААА
✔¥АААААААААААshを生成して、必要な環境変数を収容します.ここで注意したいのは、値「」をすべて削除することです.
# env.sh
SECRET_KEY = [시크릿키]
ALGORITHM = HS256
DB_NAME = [AWS db 이름]
DB_USER = root
DB_PASSWORD = [AWS db pw]
DB_HOST = [AWS 엔드포인트]
PORT = 3306
AWS_ACCESS_KEY_ID = [AWS S3 ID]
AWS_SECRET_ACCESS_KEY = [AWS S3 PW]
✔️ env.もしあなたが私にshを書いてくれたら、次のコマンドenvを使ってください.shを先に実行し、イメージを実行します.
$ (aws) docker run --env-file ./env.sh --name weterest01 -d -p 8000:8000 jewon119/weterest:0.1.0