Dockerを使用してDocker]Springプロジェクトを配備


正式に説明する前に。


この記事では、Dockerを使用して以前作成したプロジェクトをアップロードする方法について説明します.
配置方法が違うので、最初から説明します.もちろん、ec 2の作成方法は説明しません.
説明の過程で、多くの部分を省略する場合がありますが、下記のリンクの文章のように比較すれば問題ないと思います.
スプリングサイレント配置-EC 2を作成し、GitHubにコードを配布します。
本格的に始めましょう!

👉 次の例が必要です。

  • Dockerコンテナは、カードなしで十分なEC 2容量が必要です.だからt 2を選んだmediumに基づいてec 2が作成されました.
    自分はカードでも大丈夫、お金を最大限に節約したいなら、Pretty段階で提供するt 2.Microを利用してついてきても大丈夫です
  • まずEC 2環境を設定します。


    まずec 2を作成した場合はgitを更新してインストールします.
    # ec2 업데이트
    sudo yum update -y
    # git 설치하기
    sudo yum install git
    次にjdkをインストールします.
    # aws coreetto 다운로드
    sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm -o jdk11.rpm
    
    # jdk11 설치
    sudo yum localinstall jdk11.rpm -y
    
    # jdk version 선택
    sudo /usr/sbin/alternatives --config java
    
    # java 버전 확인
    java --version
    
    # 다운받은 설치키트 제거
    rm -rf jdk11.rpm
    上のすべてのコードを入力し、java--versionで次のように表示すると、成功します.
    openjdk 11.0.15 2022-04-19 LTS
    OpenJDK Runtime Environment Corretto-11.0.15.9.1 (build 11.0.15+9-LTS)
    OpenJDK 64-Bit Server VM Corretto-11.0.15.9.1 (build 11.0.15+9-LTS, mixed mode)

    今からDockerFileを作成します。


    以前に作成したプロジェクトにDockerfileを追加しましょう.次のようにDockerfileを追加します.
    FROM openjdk:11-jdk
    
    # JAR_FILE 변수 정의 -> 기본적으로 jar file이 2개이기 때문에 이름을 특정해야함
    ARG JAR_FILE=./build/libs/DevopsTestKotlin-0.0.1-SNAPSHOT.jar
    
    # JAR 파일 메인 디렉토리에 복사
    COPY ${JAR_FILE} app.jar
    
    # 시스템 진입점 정의
    ENTRYPOINT ["java","-jar","/app.jar"]

    👉 に注意


    今回私が使用したプロジェクトは、以前Javaで作成したプロジェクトをKotlinに変換し、DeopsTestKotlinを使用します.この部分はあなたたちのプロジェクトとは違うかもしれません.
    私が書いたDockerfileについてお話しします
    FROM openjdk:11-jdk
    上のコマンドは、Dockerをアップロードするときにjdk 11バージョンを使用してアップロードするコマンドを宣言します.
    ARG JAR_FILE=./build/libs/DevopsTestKotlin-0.0.1-SNAPSHOT.jar
    上のコマンドは、環境変数としてJARファイルの場所を宣言します.プロジェクトを構築する場合、build/libs/xxxx.jarとしてjarファイルが作成され、変数として保存されます.
    COPY ${JAR_FILE} app.jar
    上記のコマンドは、プロジェクト内のjarファイルの場所を参照し、jarファイルをコンテナのルートディレクトリにインポートします.jarの名前でコピーするコマンド.
    ENTRYPOINT ["java","-jar","/app.jar"]
    上のコマンドは、ドッキング・ファイルがドッキング・エンジンを介してコンテナにアップロードされると、ドッキング・コンテナのシステム・エントリ・ポイントがどこにあるかを宣言するコマンドです.
    上のコマンドラインでjava-jarコマンドを使用してコンテナルートディレクトリのappを位置決めします.jarを実行するコマンドを表します.
    上記のDockerfileの作成が完了した場合はgit commit and pushを実行し、ec 2にコードを移行するだけです.この部分は次の文章でよく紹介されているので省略しました.
    スプリングサイレント配置-EC 2を作成し、GitHubにコードを配布します。

    Docker-Compose


    まず、プロジェクトがec 2にコピーされたとします.
    私たちはnginxを使用してspring-bootプロジェクトを配置するので、docker-composeを使用してnginxのイメージと一緒に使用します.ymlファイルを作成しdocker-composeにアップロードします.
    まずec 2にdockerとdocker-composeをインストールします
    sudo yum install docker
    
    # 잘 설치가 되었는지 확인
    sudo docker --version
    Dockerのバージョンを確認すると、次のように表示されます.
    Docker version 20.10.7, build f0df350
    次にdocker-composeをインストールします.
    sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    そしてバージョンを見て
    docker-compose --version
    バージョン確認コードを入力すると次のように表示されます.
    docker-compose version 1.28.2, build 67630359
    ここまでならdocker-作曲.プロジェクトのルートディレクトリにymlを作成し、次のように作成します.
    version: "3"
    services:
      web:
        image: nginx
        ports:
          - 80:80
        volumes:
          - ./nginx/conf.d:/etc/nginx/conf.d
        depends_on:
          - spring
      spring:
        build: .
        ports:
          - 8080:8080
    上のdocker-composeファイルについて説明しましょう.
    nginxイメージの場合、インバウンドに入った80番ポートをdocker container内部に挿入された80番ポートに転送できます.これは、Http要求をnginx内部に保持することを意味する.
    また、ec 2上のnginxプロファイルをコンテナの/etc/nginx/conf.dフォルダにボリュームを移動して実行することもできます.
    しかし、depende onというプロパティが表示されます.これは、nginxの実行時にspringがコンテナに昇格することを意味します.
    そしてspringはとても簡単です.これは、現在のディレクトリのDockerイメージを構築し、8080ポートに入った信号をコンテナの8080ポートに挿入することを意味します.
    しかし、nginxのプロファイルは作成されておらず、作成されていません.したがって、nginxのプロファイルconf.dを作成します.
    まず、次のコマンドでnginx/conf.dフォルダにappを配置します.confを作成します.
    mkdir nginx
    mkdir nginx/conf.d
    cd nginx/conf.d
    sudo vim app.conf
    そしてappconfは以下のように記述される.
    server {
        listen 80;
        access_log off;
    
        location / {
            proxy_pass http://spring:8080;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    上の内容を大まかに説明します.
    nginxはまず外部80ポートの信号を読み出す.その後、信号を通過するとspringの8080ポートに転送され、通過する.また、このような信号はspringの立場ではインバウンドに相当するので、上にdocker-composeがあります.ymlを作成するようにspringは対応する信号を8080ポートに転送し、コンテナに挿入する.
    次の3行はproxyにheaderのコードを入力します.

    今から本格的にアップロードしましょう


    次のコマンドでプロジェクトを構築しましょう.
    # gradlew의 권한 변경
    sudo chmod + ./gradlew
    
    # 빌드
    ./gradlew build
    次にdockerを実行します.
    sudo systemctl start docker
    次にdockerが正常に動作しているかどうかを見てみましょう.
    systemctl status docker
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
       Active: active (running) since 수 2022-04-20 17:48:42 UTC; 51s ago
         Docs: https://docs.docker.com
      Process: 3380 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
      Process: 3379 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
     Main PID: 3384 (dockerd)
        Tasks: 8
       Memory: 119.3M
       CGroup: /system.slice/docker.service
               └─3384 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536
    今docker-composeでプロジェクトをアップロードします.
    # docker-compose를 백그라운드에서 동작시키기
    docker-compose up --build -d
    Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
    Creating network "order-example-kotlin_default" with the default driver
    Building spring
    Sending build context to Docker daemon  45.52MB
    Step 1/4 : FROM openjdk:11-jdk
    11-jdk: Pulling from library/openjdk
    6aefca2dc61d: Pulling fs layer
    967757d56527: Pulling fs layer
    c357e2c68cb3: Pulling fs layer
    c766e27afb21: Pulling fs layer
    a747e81e6111: Pulling fs layer
    2859d18181fd: Pulling fs layer
    3c6d59134c80: Pulling fs layer
    c766e27afb21: Waiting
    a747e81e6111: Waiting
    3c6d59134c80: Waiting
    2859d18181fd: Waiting
    c357e2c68cb3: Verifying Checksum
    c357e2c68cb3: Download complete
    967757d56527: Verifying Checksum
    967757d56527: Download complete
    6aefca2dc61d: Verifying Checksum
    6aefca2dc61d: Download complete
    a747e81e6111: Verifying Checksum
    a747e81e6111: Download complete
    2859d18181fd: Verifying Checksum
    2859d18181fd: Download complete
    c766e27afb21: Verifying Checksum
    c766e27afb21: Download complete
    3c6d59134c80: Verifying Checksum
    3c6d59134c80: Download complete
    6aefca2dc61d: Pull complete
    967757d56527: Pull complete
    c357e2c68cb3: Pull complete
    c766e27afb21: Pull complete
    a747e81e6111: Pull complete
    2859d18181fd: Pull complete
    3c6d59134c80: Pull complete
    Digest: sha256:95b2daeb07a18121a4309a053ff99aa741888528e5da068beef36db092a03e25
    Status: Downloaded newer image for openjdk:11-jdk
     ---> e67a33049aa6
    Step 2/4 : ARG JAR_FILE=./build/libs/DevopsTestKotlin-0.0.1-SNAPSHOT.jar
     ---> Running in a1ebd6481830
    Removing intermediate container a1ebd6481830
     ---> e448756e884e
    Step 3/4 : COPY ${JAR_FILE} app.jar
     ---> 1c1a9cfead2f
    Step 4/4 : ENTRYPOINT ["java","-jar","/app.jar"]
     ---> Running in 7dfbfc10fc7e
    Removing intermediate container 7dfbfc10fc7e
     ---> e1bfd62d0398
    Successfully built e1bfd62d0398
    Successfully tagged order-example-kotlin_spring:latest
    Pulling web (nginx:)...
    latest: Pulling from library/nginx
    1fe172e4850f: Pull complete
    35c195f487df: Pull complete
    213b9b16f495: Pull complete
    a8172d9e19b9: Pull complete
    f5eee2cb2150: Pull complete
    93e404ba8667: Pull complete
    Digest: sha256:694f2ecdb88498325d70dbcb4016e90ab47b5a8e6cd97aaeec53f71f62536f99
    Status: Downloaded newer image for nginx:latest
    Creating order-example-kotlin_spring_1 ... done
    Creating order-example-kotlin_web_1    ... done
    幸福史
    そして正常な動作があるか確認します

    はい.正常に動作していることがわかります.
    次の記事では、上記の方法よりずっと簡単で、直感的に導入できるAWSを通じて提供されるfargateというサービスをDocker imageで使用する方法について説明します.
    次のポスターで会おう!