3.Wantedlab-Dockerへの配備(会社情報を管理するAPI)


今回は機能実装ではなく、Dockerを利用して導入環境を作成します.RDSを使用せずにDocker-Composeを使用することを決定し、MySQLサーバコンテナとAPIサーバコンテナを同時に実行します.

課題項目の概要


チャレンジレコードライブラリリンクの発行
APIドキュメントリンク

開発プロセス


1日目-DockerとMySQL


  • 機能実装チームの開発では、FastAPIチュートリアルを使用して簡単なAPIを作成し、ローカル環境でDockerを使用してサーバを起動することを決定します.接続mysqlはsqlalchemy ormを使用します.

  • 環境変数を管理するために、.envファイルをローカルとデプロイに分割します.composeフォルダを作成し、ローカル開発環境と導入環境に分けてDockerfileを作成します.docker-composeのために作成されたymlファイルも環境に応じて区分され、このプロセスによって環境に応じて異なる設定を管理する方法がわかります.

  • FastAPIの学習と比較して、アプリケーションとDBサーバを同時に導入することを目標としています.問題はMySQLですが、appに正しく接続されていないデータベース権限の問題が発生しています.docker-composeファイルのDB関連設定では、この項目にユーザーとパスワードが設定されていますが、適用されないようです.数回の検索なしにコンテナを実行すると、MySQLサーバにappに接続されたユーザーとパスワードが生成されます.実行コンテナはdbユーザを自動的に生成しません.
    MySQL権限の問題は次のように解決されます.
  • docker execコマンドを使用してdockerコンテナにアクセスし、MySQLにログインします.
  •      docker exec -it <컨테이너 이름> bash
  • コンテナを実行する場合は、指定したrootパスワードを入力します.
  •       mysql -u root -p
  • (コンテナ内)のデータベースとユーザーを生成し、MySQLで認証します.
  •       mysql> CREATE USER '유저이름'@'%' IDENTIFIED BY '패스워드';
          Query OK, 0 rows affected (0.00 sec)
          
          mysql> GRANT ALL PRIVILEGES ON *.* TO '유저이름'@'%';
          Query OK, 0 rows affected (0.00 sec)
          
          mysql> flush privileges;
          Query OK, 0 rows affected (0.00 sec)

    2日目-DjangoプロジェクトDocker Componentに配備


  • FastAPIとMySQLを使用しているので、簡単に導入できます.上記で確認した不許可操作エラーも、ユーザーの作成と権限の付与によって直ちに解決されます.

  • 配布するときに気になるのは、秘密やデータベースのパスワードなどの機密情報をどのように管理するかです.envファイルに単独で記述し、docker-composeファイルでenv_file:オプションのロード方法を選択します.配備はGithubにプロジェクトを公開しEC 2でクローン化するように行われ、envファイルを公開リポジトリにアップロードできないため、READMEを作成し、EC 2で直接作成して使用する.
    ある意味では、他の人がプロジェクトをプレゼンテーションするときは面倒かもしれませんが、秘密情報を分離して管理する必要があると思います.
  • 感じと改善


    DockerとNetworkについて


  • Dockerの概念と役割を理解し、導入を試みることができます.しかし,コンテナの操作原理や各種ファイルパスについては,さらに学習する必要がある.Docker fileのWORKDIRとdocker-compose fileのvolumesに関する項目はよく理解できず、参考資料を見て、その通りにするところが大きいです.

  • これまで8000個のポートがローカルで使用され、dbタイプに応じてmysqlは3306個のポートが使用されていた.host ipはコンピュータのアドレスとして理解され、portはそのコンピュータから接続するプログラムのアドレスとして理解される.
    最初はdocker-composeファイルにポート8000:8000が設定されず、:8000のみが設定された結果、dockerは任意にポートが設定され、サーバは実行中であったがブラウザから接続できなかった.ある意味では、ネットワークに対する理解が欠けているため、エラーが発生する簡単な問題です.
  • EC 2サーバでDockerコンテナはどのように動作しますか?コンテナのフォルダ構造はどうですか.dbボリュームのパスはどのような基準で指定しますか.導入されたサーバとコンテナはどのように通信しますか?
    ->ドッキングステーションをよりよく利用するためには、まずこれらの質問に答えるべきです.

    DBサーバの配備:RDSとDocker?


  • Dockerを使用しない場合、従来の導入方法はAWSにEC 2とRDSを作成し、これらのRDSをアプリケーションDB設定に追加することです.RDSはローカルでも接続可能であるため、DBのダンプが容易である.

  • 今回はRDSではなく、DBサーバをコンテナとして実行します.

  • DBによると、毎回RDSを作成する必要はありません.RDSでサポートされていないタイプのDBをパッケージ化することもできます.

  • コンテナとして動作するDBサーバ上のデータの管理方法ダンプできますか?
    ->dumpファイルをサーバに配置し、docker-composeファイルのdbのvolumes:部分にdumpを設定します.これにより、コンテナが動作すると、データはdbにダンプされます.


  • DBを実行する3つの方法
  • EC 2にDB,2を取り付けます.RDS,3に接続します.EC 2ビットコンテナを使用してDBを実行
  • ビットの3つの方法の長所と短所を見つけた.
  • Use RDS or a container (ECS) for database? Advantages and disadvantages
    データをダンプする過程で、確かにRDSを使う時よりもDBアクセスに慣れていないことに悩んでいます.稼働しているDBコンテナとEC 2サーバの間でデータ通信を行う方法を知りたいです.共有フォルダを介して接続されている通路があるが、時間の関係でよく理解できなかったことが分かった.分散データベース・サーバのデータを管理する必要があるので、この部分をさらに理解します.

  • コメントリスト
    なぜドック(コンテナ)を使わなければならないのですか?
    ポイントコンピューティングを使用して完全な開発環境を構成
    DockerによるMySQLのインストール