TIL 27. WeAreBnB(2番目のプロジェクト):Dockerを使用して配置


Dockerイメージの作成
Docker Fileを作成すると簡単に画像を作成できます.
my_settgins.pyでデータベースを設定する
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'}
    }
}
DB Data DumpとInjection
AWS RDSに設定すると、RDSエンドポイントに接続し、データベースを作成してデータを注入する必要があります.
  • DB Data Dump
  • $ mysqldump -u root -p [DB이름] > [파일명].sql ⇢ 비밀번호 입력
  • DB Data injection
  • $ mysql -h [엔드포인트 붙여넣기] -u root -p [AWS db이름] < [파일명].sql ⇢ 비밀번호 입력
    requirement.txt確認
    画像をDockerにする場合は、画像を実行するときに実行する必要があります.DockerFileを作成してtxtを自動的にインストールするため、漏れたライブラリがあるかどうかを確認する必要があります.
    Dockerで実行する場合、Gunicornを使用してバックグラウンドでミドルウェアを実行するため、事前にインストールする必要があります.txtに追加します.
    DockerFileの作成
  • の新しいブランチを生成し、DockerFileを生成します.
  • manage.pyが存在するレイヤにDockfileというファイルを作成します.
  • Pythonバージョンをカスタマイズし、作業ディレクトリを設定します.
  • requirements.txtを再帰的にインストールし、すべてのソースファイルをイメージにコピーします.
  • ポートは、後で実行するときにポート転送を行うために8000回露出する必要があります.
  • 最後に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 build -t [내 계정]/[프로젝트명]:'버전' .
    ex) docker build -t hanasmile/wearebnb:0.1.0 .
    EC 2からDockerを配備
    EC 2 Dockerのインストール
  • EC 2
  • に入る
    $ ssh -i [파일명.cer] ubuntu@[Ipv4 퍼블릭 IP] # EC2 인스턴스에서 Ipv4 퍼블릭 IP 주소 확인
  • 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画像を取得します.
    $ (aws) docker pull [image name]
    Docker Run
    Dockerイメージを引き出し、イメージを実行してコンテナにします.コンテナ名は直接指定すればいいです.
    $ (aws) docker run --name [컨테이너명] -d -p [호스트 포트]:[컨테이너 포트][이미지명]
    ex) docker run --name wearebnb00 -d -p 8000:8000 hanasmile/wearebnb:0.1.0
    構築した画像が様々な理由で問題が発生した場合、docker ps-aコマンドで表示すると、彫像が存在することがわかります.画像に問題があるのでdocker psで確認できません.
    この場合、画像に基づいてコンテナを実行して接続し、問題を確認できます.ただし、ここで修正しても問題は解決しないので、修正して画像を再生成する必要があります.
    $ (aws) docker run -it hanasmile/wearebnb:0.1.0 /bin/bash
    my_settings.pyではなく環境変数を使用する場合
    zshrcを環境変数としてデータベースまたは複数の値を格納してサーバを構築する場合、EC 2はイメージの実行中にその環境変数を見つけることができません.
    EC 2に入って環境変数を設定してもDockerはファイル管理をサポートしません.したがって、画像をローカルに作成し、EC 2で上記の手順と同じ手順を実行することができる.
    同じ場合、EC 2でenv.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 wearebnb00 -d -p 8000:8000 hanasmile/wearebnb:0.1.0