Dockerを使用してDocker]Springプロジェクトを配備
正式に説明する前に。
この記事では、Dockerを使用して以前作成したプロジェクトをアップロードする方法について説明します.
配置方法が違うので、最初から説明します.もちろん、ec 2の作成方法は説明しません.
説明の過程で、多くの部分を省略する場合がありますが、下記のリンクの文章のように比較すれば問題ないと思います.
スプリングサイレント配置-EC 2を作成し、GitHubにコードを配布します。
本格的に始めましょう!
👉 次の例が必要です。
自分はカードでも大丈夫、お金を最大限に節約したいなら、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で使用する方法について説明します.
次のポスターで会おう!
Reference
この問題について(Dockerを使用してDocker]Springプロジェクトを配備), 我々は、より多くの情報をここで見つけました https://velog.io/@18k7102dy/Docker-Spring-프로젝트를-Docker를-이용해서-배포해봅시다テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol