🚨 스프링 부트 프로젝트를 만드는 과정은 생략합니다.
(리눅스는 별도로 설치해야함)
$ docker -v
Docker version 20.10.17, build 100c701
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
(생략해도 됩니다!)
build.gradle
에 아래 코드를 추가하면 해당 이름으로 jar 파일이 생성됩니다.bootJar{
archiveFileName = 'pharmacy.jar'
}
$ ./gradlew clean build
build/libs
├── pharmacy-project-0.0.1-SNAPSHOT-plain.jar
└── pharmacy.jar
java -jar
명령어로 jar 파일을 실행합니다.java -jar build/libs/pharmacy.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.9)
[생략]
2023-03-21 18:09:15.744 INFO 54721 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-03-21 18:09:15.744 INFO 54721 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 970 ms
2023-03-21 18:09:16.076 INFO 54721 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-03-21 18:09:16.085 INFO 54721 --- [ main] c.f.pharmacy.PharmacyProjectApplication : Started PharmacyProjectApplication in 1.819 seconds (JVM running for 2.292)
touch Dockerfile
명령어로 Dockerfile을 생성하고, 아래 내용을 추가합니다.$ FROM openjdk:17-alpine
$ ARG JAR_FILE=build/libs/pharmacy.jar
$ COPY ${JAR_FILE} ./pharmacy.jar
$ ENV TZ=Asia/Seoul
$ ENTRYPOINT ["java", "-jar", "./pharmacy.jar"]
FROM:
새로운 이미지를 생성할 때, 기반으로 사용할 이미지를 지정ARG:
이미지 빌드 시점에서 사용할 변수 지정COPY:
호스트에 있는 파일, 디렉토리를 Docker 이미지의 파일 시스템으로 복사ENV:
컨테이너에서 사용할 환경변수 지정ENTRYPOINT:
컨테이너가 실행될 때 실행될 때 항상 실행되어야 하는 명령어 지정docker build
명령어를 실행하면, Dockerfile을 읽어서 이미지를 만들어줍니다.$ docker build -t spring-project-test .
$ docker images
-p:
컨테이너는 기본적으로 외부와 격리
되어 있기 때문에, 호스트와 컨테이너 port 포워딩 처리를 통해 외부에서 접속이 가능하도록 해줍니다.$ docker run spring-project-test -p 8080:8080
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.9)
2023-03-21 18:27:55.335 INFO 1 --- [ main] c.f.pharmacy.PharmacyProjectApplication : Starting PharmacyProjectApplication using Java 17-ea on 55f0ff799e0d with PID 1 (/pharmacy.jar started by root in /)
2023-03-21 18:27:55.345 INFO 1 --- [ main] c.f.pharmacy.PharmacyProjectApplication : No active profile set, falling back to 1 default profile: "default"
2023-03-21 18:27:57.780 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-03-21 18:27:57.803 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-03-21 18:27:57.804 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.71]
2023-03-21 18:27:57.969 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-03-21 18:27:57.969 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2499 ms
2023-03-21 18:27:58.784 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-03-21 18:27:58.803 INFO 1 --- [ main] c.f.pharmacy.PharmacyProjectApplication : Started PharmacyProjectApplication in 4.608 seconds (JVM running for 5.303)