π Spring Boot + Docker + AWS EC2 λ°°ν¬νκΈ°(Mac M1)
μλ νμΈμ, μ΄λ² μκ°μλ μ€νλ§ λΆνΈ μ ν리μΌμ΄μ μ AWS EC2μ λ컀λ₯Ό ν΅ν΄ λ°°ν¬ν΄λ³΄λλ‘ νκ² μ΅λλ€.
β» νλ¦° λ΄μ©μ΄ μ‘΄μ¬ν μ μμΌλ μ°Έκ³ ν΄μ λ΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€ :)
μμ±ν μ½λλ κΉνλΈ μμ νμΈν μ μμ΅λλ€ :)
μ μ νκ²½ μ€μ μ λ€μκ³Ό κ°μ΅λλ€.
- Mac OS(M1), μΈν 리μ μ΄, Spring Boot, Java 8, Gradle
λν μ΄λ²μ M1μμ λ°°ν¬λ₯Ό ν λ, κΈ°μ‘΄ λΈλ‘κ·Έ λ΄μ©λλ‘ μμ μ νλ λμ€ μλ¬κ° λ°μνκ³ μ½κ°μ μ½μ§μ΄ μμλλ°μ .. π
κ°λ΅ν μ 리ν΄λ³΄λλ‘ νκ² μ΅λλ€.
λλ΅μ μΈ κ³Όμ μ μμ κ°μ΅λλ€.
- Dockerfile μ build ν΄μ docker image νμΌμ μμ±ν©λλ€.
- docker image νμΌμ dockerhubμ push ν©λλ€.
- μλ²(AWS EC2)μμ dockerhubμ μ‘΄μ¬νλ docker image νμΌμ pullλ‘ λ°μμ΅λλ€.
- docker run λͺ λ Ήμ΄λ₯Ό ν΅ν΄ docker image νμΌμ μ€νν©λλ€.
π― μ€νλ§ λΆνΈ νλ‘μ νΈ μμ±
μ€νλ§ λΆνΈ νλ‘μ νΈλ₯Ό μμ±νκ³ , κ°λ¨νκ² Controller μμ±ν λ€ μμ κ°μ΄ μμ±ν©λλ€.
(μ€νλ§ λΆνΈ νλ‘μ νΈμ μμ± λ°©λ²μ λν΄μλ μλ΅νκ² μ΅λλ€.)
π― Dockerfile μμ±
μ μ¬μ§κ³Ό κ°μ΄ νλ‘μ νΈ νμμ Dockerfile μ΄λΌλ νμΌμ μμ±νκ³ μλ λ΄μ©μ μμ±ν©λλ€.
FROM openjdk:8-jdk-alpine
// FROM amazoncorretto:11 ==> amazon corretto 11 μ¬μ©ν κ²½μ°
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
// ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","/app.jar"]
// => μ€μ νμΌμ λΆλ¦¬ν΄μ μ¬μ©ν λ
// java -jar -Dspring.profiles.active=prod app.jar
μ μ½λμ λν μ€λͺ μ κ°λ΅ν λνλ΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
FROM openjdk:8-jdk-alpine
- open jdk java8 λ²μ μ νκ²½μ ꡬμ±ν©λλ€.
- Amazonμ corretto λ²μ μ μ¬μ©ν κ²½μ°, μ£Όμμ²λ¦¬ ν λΆλΆμΌλ‘ μ¬μ©νλ©΄ λ©λλ€.
ARG JAR_FILE=build/libs/*.jar
- buildκ° λλ μμ μ JAR_FILE μ΄λΌλ λ³μλͺ μ build/libs/*.jar ννμμ μ μΈνλ€λ μλ―Έμ λλ€.
- build/libs κ²½λ‘λ gradleλ‘ λΉλνμ λ jar νμΌμ΄ μμ±λλ κ²½λ‘μ λλ€.
- Mavenμ κ²½μ° target/*.jar λ‘ μ€μ ν΄μ£Όμλ©΄ λ©λλ€.
COPY ${JAR_FILE} app.jar
- μμ μ μΈν JAR_FILE μ app.jar λ‘ λ³΅μ¬ν©λλ€.
ENTRYPOINT ["java","-jar","/app.jar"]
- jar νμΌμ μ€ννλ λͺ λ Ήμ΄(java -jar jarνμΌ) μ λλ€.
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod","/app.jar"]
- μ΄μ λ° κ°λ°μμ μ¬μ©λλ νκ²½ μ€μ μ λΆλ¦¬ν΄μ μ¬μ©ν κ²½μ°, μμ κ°μ΄ ENTRYPOINTλ₯Ό μ€μ ν μ μμ΅λλ€.
π― gradle λΉλ
./gradlew build -x test (-x test: ν μ€νΈ μ€ν X)
μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λΉλνλ©΄ μλμ κ°μ΄ build/libs κ²½λ‘μ jar νμΌμ΄ μμ±λ©λλ€.
π― Docker Hub
μ μ¬μ΄νΈμ λ€μ΄κ°μ νμκ°μ μ νκ³ λ‘κ·ΈμΈμ ν©λλ€.
κ·Έ ν Repositories > Create Repository λ‘ λ€μ΄κ°μ λ컀 λ ν¬μ§ν 리λ₯Ό μμ±ν©λλ€.
Repository μ΄λ¦κ³Ό PublicμΌλ‘ μ€μ νκ³ Create λ₯Ό ν΄λ¦ν©λλ€.
π― Docker Image build
νΈμ₯μ λμ»€κ° μ€μΉλμ΄μμ§ μλ€λ©΄ μλ μ¬μ΄νΈλ₯Ό ν΅ν΄ λ¨Όμ λ컀λ₯Ό μ€μΉν΄μ£ΌμΈμ :)
μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ dockerfile -> docker image λ‘ λΉλλ₯Ό μ§νν©λλ€.
// gradle
docker build --build-arg DEPENDENCY=build/dependency -t λ컀νλΈ ID/Repository --platform linux/amd64 .
// maven
docker build -t λ컀νλΈ ID/Repository --platform linux/amd64 .
- κ°μ₯ λ§μ§λ§ μ (.) λ ν¬ν¨ν΄μΌ ν©λλ€.
- λ§₯λΆ M1μ κ²½μ° --platform linux/amd64 μ΅μ μ λ§μ§λ§μ μΆκ°ν΄μ£Όμ΄μΌ ν©λλ€.
λ§μ½ --platform linux/amd64 μ΅μ μ μΆκ°νμ§ μκ³ λΉλλ₯Ό νλ©΄ μλμ κ°μ μλ¬κ° λ°μν©λλ€. π
μ λ¬Έμ λ κΉνλΈμ μμΈν λμμμ΅λλ€.
μ ν M1μ κ²½μ° λ컀 μ΄λ―Έμ§λ‘ λΉλν λ --platform μ΅μ μ μ¬μ©ν΄μΌ ν©λλ€.
π― Docker Image push
μμμ μμ±ν docker image νμΌμ Docker Hubμ pushλ₯Ό ν΄μ€λλ€.
push λͺ λ Ήμ΄λ docker hubμ Repositoryμ 보면 νμΈν μ μμ΅λλ€.
λ§μ½ μμ κ°μ΄ denied: requested access to the resource is denied λΌλ λ¬Έκ΅¬κ° λμ€λ©΄ λ‘κ·ΈμΈμ ν΄μ£Όμ΄μΌ ν©λλ€.
docker login λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λ‘κ·ΈμΈμ ν λ€ λ€μ pushνλ©΄ μ μμ μΌλ‘ pushκ° λκ³ , docker hubμ Repositoryμ
μλ‘μ΄ TAG(latest)κ° μμ±λ κ±Έ νμΈν μ μμ΅λλ€.
νμ¬ μνλ μμ κ°μ΄ Dockerfile μ ν΅ν΄ docker imageλ‘ λΉλνκ³ , docker hubμ pushν μνμ λλ€.
μ΄μ μλ²(AWS EC2)μμ λ컀λ₯Ό μ€μΉνκ³ , μ ν리μΌμ΄μ μ λ°°ν¬νλ©΄ λμ λλ€ !
π― AWS EC2
μλ λ§ν¬λ₯Ό ν΅ν΄ AWS EC2 μΈμ€ν΄μ€λ₯Ό μμ±νκ³ , λ컀λ₯Ό μ€μΉν ν μ ν리μΌμ΄μ μ λ°°ν¬ν΄λ³΄λλ‘ νκ² μ΅λλ€.
AWS EC2 μΈμ€ν΄μ€ μμ±νκΈ°
λ컀 μ€μΉ
- $ sudo yum install docker
λ컀 μ€ν
- $ sudo systemctl start docker
λ컀 νλΈμ μ‘΄μ¬νλ μ΄λ―Έμ§ νμΌ pull
- $ sudo docker pull juhyun419/sample
λ컀 μ΄λ―Έμ§λ₯Ό ν΅ν΄ μ€νλ§ λΆνΈ μ ν리μΌμ΄μ λ°°ν¬(μ€ν)
- $ sudo docker run -p 8080:8080 juhyun419/sample
λ컀 μ΄λ―Έμ§λ₯Ό ν΅ν΄ μ€νλ§ λΆνΈ μ ν리μΌμ΄μ μ΄ μ μμ μΌλ‘ μ€νμ΄ λ©λλ€.
μ΅μ’ μ μΌλ‘ AWSμ IPλ‘ μ μν΄λ³΄λ©΄ μμ κ°μ΄ μ μμ μΌλ‘ λ°°ν¬κ° λ κ±Έ νμΈν μ μμ΅λλ€.
References
- https://itkoo.tistory.com/10
- https://spring.io/guides/gs/spring-boot-docker/
- https://sas-study.tistory.com/399
- https://class101.net/products/5fc4a3b4fc231b000d85661b
- https://www.pinterest.co.kr/pin/984881012230730727/
- https://docs.aws.amazon.com/ko_kr/corretto/latest/corretto-11-ug/docker-install.html
'DevOps' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
GitHub-Actionsλ‘ CI/CD ꡬμΆνκΈ°(AWS, Docker, SpringBoot) (18) | 2022.05.03 |
---|---|
GitHub Actionμ ν΅ν CI ꡬμΆνκΈ° (SpringBoot + Maven) (2) | 2021.05.14 |
[Apache Kafka] μΉ΄νμΉ΄ Window μ€μΉ & ν μ€νΈ (0) | 2021.02.06 |
λκΈ