대략적인 시나리오는 이러하다.
도커 허브 리포지토리에 공간을 생성을하고 ( 도커 허브 가입 )
만든 이미지 파일을 업로드하여
배포 할 우분투 서버에 로그인 후 도커 허브에 접속을 하여
만든 도커 이미지 파일을 다운 받는다.
그 이미지 파일을 토대로 컨테이너를 만들고
서비스를 배포 할 생각이다.
자!! 생각대로 하나씩 해보자 ~~~~~
스프링 부트 ( 메이븐 ) 패키지화
배포 하려는 스프링 부트 프로젝트를 jar 로 만들어 보자.
1. < 메이븐 클린 >
클린을 클릭하게 되면 타겟 폴더가 삭제가 된다.
jar 파일을 생성하기 전에 깔끔하게 생성 되도록 하는 작업이다.
Q 등등 모든 것이 사라져서 빨간줄 떠도 신경 안써도 된다.
밑에 패키징을 하면 다시 Q 등등 생긴다.
2. < 메이븐 패키징 >
패키지를 클릭하게 되면 타겟 폴더가 새로 생성이 된다.
그리고 폴더 내 jar 파일이 생기는 것을 볼 수 있다.
이 파일을 실행 시켜서 프로젝트가 잘 작동 되는지 확인 해야한다.
실행법 ( 맥 기준 ) :
생성된 .jar 파일이 존재하는 디렉터리로 가서 터미널 실행
java -jar 파일이름.jar
ex ) java -jar shop-0.0.1-SNAPSHOT.jar
해당 구문을 입력하면 스프링 부트가 실행이 된다.
그리고 로컬호스트로 접속하면 프로젝트가 실행되는 것을 볼 수가 있다.
모든 기능이 정상적으로 작동되는지 확인 하면 다음 단계로 넘어가면 된다.
하지만... 필자는 갑자기 로그인이 되지 않았다.
https://dev-jwblog.tistory.com/40
[SpringBoot] thymeleaf 에러(Error resolving template)
1. 에러 발생 상황 - thymeleaf 를 사용하면서, Intelli J에서 개발할 때는 이상 없이 html 파일을 찾아가며 화면이 노출되었는데, 리눅스 환경(AWS)에서 jar로 build 하고 외부에서 실행하면 아래와 같은 에
dev-jwblog.tistory.com
해당 오류를 트러블 슈팅하기 위해 참고 하였다.
jar 파일이 잘 작동하면 도커 허브 계정을 가입하자!!
앞서 이야기한 공간을 만드는 작업이다.
Docker Hub Container Image Library | App Containerization
Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.
hub.docker.com
도커 이미지 파일을 빌드 해보자!!
< 도커 파일 생성 >
인텔리제이에서 새 파일을 만들고
이름을 Dockerfile로 하면 익숙한 고래 모양이 생긴다.
Dockerfile 이 target 디렉터리 안에 있어야 한다.
도커 빌드는 이것을 토대로 파일을 생성 해준다.
COPY shop-0.0.1-SNAPSHOT.jar /app/app.jar
WORKDIR /app
CMD ["java","-jar","app.jar"]
위에서부터 하나씩 설명해보자
자바버젼 jdk11
복사한다 만들어진 jar 파일을 도커 이미지파일 app경로 안에 app.jar에 복사한다.
작업실행디렉터리 /app 디렉터리
실행한다 java -jar app.jar 을
이렇게 작동하도록 이미지 파일을 빌드 하는 것이다.
자! 빌드 구문을 입력해보자
구문을 입력할 터미널 창을 띄워야한다.
지금 도커 파일이 있는 디렉터리인 target에서 구문을 입력해야한다.
ls cd ls cd 해도 되지만 단축키를 쓰도록 하자.
파인더로 가서 타겟 폴더를 찾는다
그리고 타켓 폴더를 클릭후에
컨트롤 + 옵션 + 커맨드 + O
를 입력하면 해당 위치에 맞게 터미널 창이 뜬다.
https://ifuwanna.tistory.com/261
[MacOS] 파인더에서 터미널 바로 열기
맥북이나 아이맥같은 Mac OS 환경에서는 윈도우 탐색기를 대체하는 파인더(Finder) 앱을 사용하는데 이때 특정 폴더에서 직접 콘솔 명령어를 바로 사용하고 싶을 때가 있습니다. 예를 들어 저 같은
ifuwanna.tistory.com
터미널 창이 열리지 않는 다면 이 설정을 하고 오자.
Maven 으로 작업을 하였으니. 그리하여
docker build -t kwaktoki/test-shop-project-g14 .
원래는 이렇게 구문을 입력한다.
그리고 필자는 이렇게 만들어진 이미지 파일을 우분투 서버에 올렸고
컨테이너를 실행시키자 오류를 내뿜었다.
그것은 플랫폼이 다르다고 하는 오류 였고 이를 해결하기 위해
아래의 방법을 알아냈다.
필자는 M1 pro 맥북을 쓰고 있다.
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v2) and no specific platform was requested
exec /usr/local/openjdk-11/bin/java: exec format error
도커 이미지파일을 빌드 시키면 저런 오류가 뜬다.
아마 애플 실리콘에서 파일을 빌드를 해서 모바일 칩셋인 arm 이 빌드가 된다.
그래서 도커 이미지 파일을 빌드를 할때
앞에다 플랫폼 설정인 --platform linux/amd64 설정을 기입 해준다.
docker build --platform linux/amd64 -t kwaktoki/test-shop-project-g14 . (꼭 띄우고 . 을 찍어야한다)
도커를 실행하지 않고 해당 구문을 입력할 경우 이미지 파일이 생성되지 않음
도커 허브 레파지토리 저장하기
docker push kwaktoki/test-shop-project-g14
해당 구문을 입력하면 레파지토리에 저장이된다.
잘 저장 되었는지 확인 하는 방법
도커 허브에 접속해서 리파지토리 메뉴로 접속한다.
해당 리포지토리에 접속을 하면 없었던 파일이 생겼는 것을 알 수가 있다.
올려진 이미지 파일의 종류와 용량을 간략히 볼 수가 있다.
우분투 서버로 접속한다
이제 도커 허브에 올려둔 도커 이미지 파일을 다운 받아 보자
우선
윈도우는 PuTTY 로 ssh 접속을 하고
맥은 터미널이나 아이템2 로 접속을 하면 된다.
우선 계정 로그인후 su ( 슈퍼 유저 권한 ) 으로 로그인 하자
docker pull kwaktoki/test-shop-project-g14
해당 구문을 입력하면 이미지 파일이 다운이 받아진다.
docker images -a
해당 구문을 입력해서 이미지 파일이 잘 저장 되었는지 확인 해보자
컨테이너를 생성하고 실행해보자
이미지 파일을 가져와서 컨테이너에 심어서 돌려보자
docker run -t -p 8083:8083 kwaktoki/test-shop-project-g14
해당 구문을 입력하면 스프링 부트 파일이 실행이 된다.
( 아직 필자는 잘 쓸 줄을 모른다... 분명 -t 를 붙이면
ssh 창 프로세스를 종료시켜도 유지가 되는 것으로 인터넷에 나와있었는데
역시나 창을 닫으니 스프링 부트 컨테이너가 꺼져 버리고 만다
그래서 완벽히 공부하기 위해서 교보문고에 가서 도커, 쿠버네티스 관련 서적을 샀다. )
하지만 치명적인 단점이 있었다.
도커 런 이후 해당 구문을 입력한 ssh 창을 꺼버리게 되면
화면과 같이 컨테이너도 종료가 된다.
내가 해결한 방법으로는 이 터미널 창을 종료한 후
다시 서버로 접속하여 컨테이너를 스타트 시키는 것이다.
docker start 이미지파일이름 ( 컨테이너 아이디 )
도커 이미지 실행
도커 명령어 ( 정리 )
도커 터미널 로그인
docker login
해당 구문을 입력하고 아이디와 비번을 입력하면 로그인이 된다.
docker ps -a
컨테이너 모두 조회
docker stop
컨테이너 실행 종료 ( 삭제를 할려면 실행을 종료 해야한다 )
docker rm 컨테이너 아이디
컨테이너 삭제
docker images -a
도커 이미지 보기
docker rmi 삭제할 이미지파일 아이디
도커 이미지 파일 삭제 방법
docker start 이미지파일이름
도커 이미지 실행
도커 런 이후 ssh 창을 꺼버리게 되면 같이 컨테이너가 종료가 된다.
컨테이너 모두 조회 => 컨테이너 실행 종료 => 컨테이너 삭제 => 도커이미지 보기 => 도커 이미지 삭제
참고한 사이트 목록 :
https://souljit2.tistory.com/74
[#4] Docker를 이용해 스프링부트 앱 배포하기
진행하고 있던 프로젝트가 기능 요구 사항을 어느 정도 구현하여서, 드디어 애플리케이션을 Dockerize 하여 Google Cloud Platform에 배포하였습니다. 축하해주세요! 🥳 이번 프로젝트에서 Docker를 처음
souljit2.tistory.com
https://rst0070.github.io/java/build-push-pull-run-spring-boot-image-by-docker.html
[Spring boot] Dockerfile로 image 생성하기
Maven으로 .jar파일 빌드 Dockerfile작성 도커이미지 생성하기 docker hub에 push하기 docker image 내려받고 실행
rst0070.github.io
'서버 > Docker' 카테고리의 다른 글
도커에 오라클 설치후 외부접속 (128) | 2024.03.11 |
---|---|
우분투 서버 램 증설 (0) | 2023.06.06 |
도커 설치 (1) | 2023.05.12 |
도커에 MySQL 설치후 외부접속 (0) | 2023.05.04 |
MySQL 유저 비밀번호 변경 (0) | 2023.05.04 |