π 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
Docker Hub Container Image Library | App Containerization
We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy
hub.docker.com
μ μ¬μ΄νΈμ λ€μ΄κ°μ νμκ°μ μ νκ³ λ‘κ·ΈμΈμ ν©λλ€.
κ·Έ ν Repositories > Create Repository λ‘ λ€μ΄κ°μ λ컀 λ ν¬μ§ν 리λ₯Ό μμ±ν©λλ€.
Repository μ΄λ¦κ³Ό PublicμΌλ‘ μ€μ νκ³ Create λ₯Ό ν΄λ¦ν©λλ€.
π― Docker Image build
νΈμ₯μ λμ»€κ° μ€μΉλμ΄μμ§ μλ€λ©΄ μλ μ¬μ΄νΈλ₯Ό ν΅ν΄ λ¨Όμ λ컀λ₯Ό μ€μΉν΄μ£ΌμΈμ :)
MAC M1 Docker μ€μΉ λ°©λ²
1. λ컀(Docker)λ? 컨ν μ΄λ κΈ°λ°μ μ€νμμ€ κ°μν νλ«νΌ 컨ν μ΄λλΌκ³ νλ©΄ νλ¬Όμ μμ‘νλ λ°μ€κ° λ μ€λ¦ λλ€. κ·Έλ° μ»¨ν μ΄λμλ μ·, κ³ΌμΌ, μ ν λ± λ€μν νλ¬Όμ λ£μ μ μκ³ , κ·κ²©νλ
itkoo.tistory.com
μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ 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 |
λκΈ