ECSとDockerの使い方-第1部:ECS&Dockerハンマー
Dockerizing
まず、Dockerを使用してサーバイメージを構築します.
構築する画像には、2つのサーバのコンテナ画像と、2つのリポジトリのフロントエンドで使用されるnginxコンテナ画像が含まれます.
nginxを使用する主な目的は「開発とテスト」です.実際には、セキュリティとパフォーマンスの問題のため、本番環境の一部の高度な公式ドキュメントではrunserverの使用は推奨されません.
(出典:https://docs.djangoproject.com/en/2.2/ref/django-admin/#runserver)
したがって、runserverの代わりにWebサーバゲートウェイインタフェース(WSDi)のuWSDiを使用して障害を実行します.
ここで「なぜwsgiを使うのですか?」疑問が生じるかもしれません.
各画像を作成するには、次の手順に従います.
1. django application
Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1
ENV PATH="/scripts:${PATH}"
ENV ENV=dev # 환경에 따라 각각 다른 태그를 부여합니다.
WORKDIR /app
COPY . .
COPY ./scripts /scripts
RUN pip install -r requirements.txt --no-cache-dir
RUN chmod +x /scripts/*
RUN mkdir -p /vol/web/media
RUN mkdir -p /vol/web/static
RUN adduser user --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
RUN chown -R user:user /vol
RUN chmod -R 755 /vol/web
USER user
CMD ["entrypoint.sh"]
なぜ日立runserver
--gecos
コードをユーザーに選択させたのですか?¥¥¥¥¥¥¥¥¥
--disabled-password
オプションでユーザーのその他の情報を設定します.--disabled-password
オプションはありませんが、githubアクションを使用して管理するので、gecosに値を割り当てて、ユーザーに関連する不要なエラー出力を設定しないようにします.entrypoint.sh-migrateやuwsgiなどのコマンドを1つのファイルで管理する
#!/bin/sh
set -e
python manage.py collectstatic --noinput
python manage.py migrate --noinput
uwsgi --socket :8000 --master --enable-threads --module (파일명).wsgi
次のDockerfileパスでbuildコマンドを入力します.docker build . (-t 태그) (-f 도커파일명)
2. nginx
Dockerfile
FROM nginxinc/nginx-unprivileged:1-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./uwsgi_params /etc/nginx/uwsgi_params
USER root
RUN mkdir -p /vol/static
RUN chmod 755 /vol/static
USER nginx
default.confserver {
listen 8080;
location /static {
alias /vol/static;
}
location / {
uwsgi_pass 127.0.0.1:8000;
include /etc/nginx/uwsgi_params;
}
}
次のDockerfileパスでbuildコマンドを入力します.docker build . (-t 태그) (-f 도커파일명)
これにより、ユーザは8080ポートを介してnginxコンテナに接続し、nginxコンテナは8000ポートを介してdjangoコンテナに接続することができる.ECS cluster - Fargate vs EC2
生成された画像をECRにプッシュする前に、ターゲットとなるクラスタを作成する必要があります.
AWSでは、EC 2、Fargateでクラスタインフラストラクチャを選択できます.
EC 2は、CPU利用率が予測可能で安定したシステムにおいてより高い効率を提供し、fargateは負荷の変化が大きい環境においてより高い効率を提供する.
infockリンクは常にスケーリングされ、通常はワークロードが比較的低いため、最終的にfargateが選択され、低CPU単位(0.25)を使用することができる.
ここで、作成した画像をECRにプッシュします!
イメージをリポジトリにアップロード(feat.m 1)
(環境でm 1チップを使用しない場合は、この手順をスキップできます.おめでとうございます!)
これは私たちがこのプロジェクトで出会った最も困難であり、最も時間のかかる画像アップロードでもあります.🥲
通常、
--gecos
符号化を使用して画像を構築することができる.ただし、m 1チップの場合、構築されたイメージを使用してクラスタ上でタスクを実行すると、次のエラーが発生します.
これは,ECSタスクとm 1チップによって構築されたイメージのアーキテクチャが異なるためである.
ECSタスクのアーキテクチャは
--gecos
に設定され、m 1チップによって構築されたイメージのアーキテクチャはdocker build ~
に設定される.Linux/X86_64
コードを使用して、この問題を解決できます.arm64
はdockerコマンドの拡張プラグインであり、マルチアーキテクチャイメージの構築に使用できます.必要な機能を含むカスタムコンストラクタを使用して、必要なフォーマットの画像を作成することもできます.Docker Buildx
docker buildx
オプションを使用すると、必要なアーキテクチャを指定できます.docker buildx build --platform linux/amd64 (-t 태그) . (--no-cache) (-f Dockerfile 이름)
参考リンク(多くの達人たちに感謝します)stackoverflow - standard_init_linux.go:178: exec user process caused "exec format error"
Docker Buildxを使用したマルチアーキテクチャ画像の構築
M 1 MacBookユーザーに対してEKSを導入する際に発生したエラーに対して、
[Devops] Docker buildx build(at M1 Macbook)
これらの手順により、サーバイメージとnginxイメージを作成し、ECRを正常にリフレッシュできます.
二部では、生成された画像からタスクとサービスを作成し、最終的にCodeDeployを行います!
さらに詳細な内容とエラーについては、ここです。も参照できます.
Reference
この問題について(ECSとDockerの使い方-第1部:ECS&Dockerハンマー), 我々は、より多くの情報をここで見つけました https://velog.io/@gouz7514/ECS와-Docker-사용기-1부-ECS-Docker-박치기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol