application.yml 혹은 application.properties 파일 수정
우선 local에서 작업한 springboot 프로젝트를 docker 이미지로 뽑아내기 위해
application.yml 혹은 application.properties 파일을 수정해야한다.
//application.properties
spring.datasource.url=jdbc:mysql://my_mysql:3306/mydatabase?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
application.properties 내용에 위 내용 말고도 다른 내용이 많을 것으로 예상된다.
localhost 혹은 127.0.0.1 -> my_mysql로 수정하였다.
my_mysql은 docker mysql 이미지 이름이다. 뒤에 더 나올 것이다.
bootJar Gradle Task .jar 파일 빌드
springboot 프로젝트를 bootJar Gradle Task를 이용하여 .jar 파일을 생성한다.
E:\프로젝트명>gradlew bootJar
build가 정상적으로 되면 libs 폴더 안에 .jar 파일이 생성된다.
docker java11 이미지를 활용한 springboot 빌드
local에서 docker를 설치하고
springboot를 빌드하기 위해 docker java 이미지를 설치한다.
docker search java11
docker pull lpicanco/java11-alpine
libs 안에 Dockerfile 생성하기
반드시 "Dockerfile" 라는 이름으로 파일을 생성해야한다.
FROM lpicanco/java11-alpine
ARG JAR_FILE=/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
FROM lpicanco/java11-alpine
docker pull로 설치한 이미지를 기본 이미지로 설정한다.
ARG JAR_FILE=/*.jar
JAR_FILE 이라는 변수에 /*.jar 이라는 값을 넣는다.
COPY ${JAR_FILE} app.jar
현재 Dockerfile이 존재하는 경로에 있는 .jar 확장자를 가진 파일을 app.jar 라는 이름으로
새로 만들어질 도커 이미지에 포함시킨다.
ENTRYPOINT ["java", "-jar", "/app.jar"]
컨테이너 실행 시 java -jar /app.jar 명령어를 실행한다.
Dockerfile 빌드하기
docker build -t gudrb963/my_project:0.4 .
Dockerfile, .jar 파일이 위치한 경로에서 위와 같은 명령어를 입력한다.
위에서 0.4라고 적었는데
내가 임의로 버전 명을 입력한 것이다.
0.1부터 시작했고 지금 0.4까지 왔다.
docker network 생성
docker network create springnetwork
컨테이너간 통신을 위해서 custom network를 생성해야한다.
springnetwork 안에 springboot, mysql 이미지를 추가하여 통신할 수 있도록 할 것이다.
mysql 컨테이너 이미지 다운 및 실행
docker run -d --name my_mysql -e MYSQL_ROOT_PASSWORD=p@ssw0rd -p 3306:3306 --network springnetwork mysql
위 명령어를 활용해 mysql 컨테이너를 우선 실행한다.
원래는 이미지를 다운받아야 하는데
해당 이미지가 docker 컨테이너에 존재하지 않는 경우
docker가 자동으로 docker hub에서 찾고
해당 이미지가 존재한다면 다운을 받아준다.
-d : 백그라운드에서 컨테이너가 실행되도록 한다.
-e : 컨테이너 생성 시 필수적으로 넘겨 줄 파라미터를 지정한다.
mysql 컨테이너는 MYSQL_ROOT_PASSWORD를 필수적으로 지정하도록 설정되어있다.
-p : 컨테이너가 외부에 노출 할 포트와 mysql 포트에 연결하기 위해 docker host에서 사용할 port를 지정한다.
--network : 우리가 생성한 costom network를 입력한다.
--name : 컨테이너에서 통신하기 위해 사용할 이름을 부여한다. (my_mysql)
database 생성
spring boot application 생성 시, 연결을 위해 입력했던 database를 생성해줘야한다.
docker exec -it my_mysql /bin/bash
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 89
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
이제 database를 생성하여 application.properties에 입력한다.
Application 실행 및 확인
생성한 Application docker 이미지를 활용해 컨테이너를 실행한다.
docker run -it --name pepes_spring --network springnetwork -p 8080:8080 gudrb963/my_project:0.4 /bin/bash
--network 옵션을 이용해 mysql 컨테이너와 같은 network에 컨테이너를 실행시킨다.
springboot application 생성 시 application.properties 에서 지정한 port를 외부로 노출시킨다.
IT WORKS!
만든 이미지 docker hub에 배포
로컬에서 생성된 이미지를 공유하려면 repository가 있어야 한다.
docker hub는 누구나 가입해서 무료로 repository를 이용할 수 있다.
무료 계정은 public만, 유료계정은 private도 가능하다.
이제 내가 원하는 이미지를 docker hub repository에 push 할 것이다.
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gudrb963/my_project 0.4 58a3b405d1d1 18 minutes ago 122MB
<none> <none> 32f7979a8682 48 minutes ago 122MB
gudrb963/pepe 0.2 4f8dcd9fd118 3 days ago 122MB
gudrb963/pepe 0.1 4fe4c1423c23 3 days ago 122MB
gudrb963/spring 0.3 f0ab11cd82d4 3 days ago 108MB
gudrb963/spring 0.1 0d6ba42ce4b9 3 days ago 108MB
gudrb963/spring 0.2 0d6ba42ce4b9 3 days ago 108MB
mysql latest 5c62e459e087 3 weeks ago 556MB
gudrb963/mysql latest 5c62e459e087 3 weeks ago 556MB
mysql <none> d757c3ddbb3b 3 months ago 546MB
lpicanco/java11-alpine latest 25d68f7e74ef 21 months ago 69.8MB
명령어를 치면 자신이 가지고 있는 이미지들이 나온다.
Syntax : docker tag image username/repository:tag
docker tag gudrb963/my_project:0.4 gudrb963/myfirsthub:0.4
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gudrb963/myfirsthub 0.4 58a3b405d1d1 18 minutes ago 122MB
Syntax : docker push username/repository:tag
docker push gudrb963/myfirsthub:0.4
IT WORKS!
이제 자신이 원하는 서버에 가서
컨테이너를 실행시키면 된다 :)
출처
https://galid1.tistory.com/726
'Docker' 카테고리의 다른 글
Docker로 프로젝트(Springboot), DB(Postgres), 캐시(Redis) 연동하기 (0) | 2022.07.15 |
---|---|
docker 삭제, docker reinstall, docker uninstall (0) | 2021.11.05 |
Docker 설치 mysql 설치 및 실행하기 Ubuntu 18.04 (0) | 2021.10.22 |
docker mysql Unknown or incorrect time zone : 'Asia/Seoul' (0) | 2021.10.22 |
docker tomcat HTTP 상태 404 – 찾을 수 없음 (0) | 2021.10.22 |