Docker

docker 이미지 생성, docker hub 업로드, docker springboot mysql 연동

pepega 2021. 10. 22. 16:16

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://sungwookkang.com/1301

 

Docker Image 생성 및 docker hub에 이미지 업로드

Docker Image 생성 및 docker hub에 이미지 업로드 ·         Version : Docker 컨테이너는 기본적으로 이미지를 사용하여 생성하며, 컨테이너 생성 후 사용자 변경 부분에 대해서는 필요에 따라 새로운

sungwookkang.com

https://galid1.tistory.com/726

 

Docker - Spring Boot Application Docker로 배포하기 및 Mysql 연동

spring boot 배포 및 mysql 연결 이번 포스팅에서는 docker를 이용해, Database를 이용하는 Spring Boot 어플리케이션을 배포하는 방법을 알아보도록 하겠습니다. (docker가 설치된 환경으로

galid1.tistory.com