본문 바로가기
AWS CLOUD SERVER 배포 (feat. UBUNTU)

도커 /클라우드서버(AWS lightsail + 우분투 ) 를 이용한 배포 -최종(6)-

by Digital Audio Player 2021. 9. 16.

1. Dockerfile 생성

Dockerfile 에 위와 같이 기술 (도커는 gradle 에 의해 빌드 된 jar를 바탕으로  도커이미지를 생성한다)

                                             우선 이렇게 작성 후  2번으로 넘어감

 

2. jar 로 빌드하기 

show view -> gradle task

show view -> gradle Executions 

 

콘솔창 있는 곳에서 옆의 gradle task 탭을 누른 후 먼저 build 를 더블클릭한다

빌드가 완료되면 순서대로 bootJar 더블클릭 

완료

 

완료되면 해당 프로젝트 경로 /build/libs 에 두 개의 jar파일이 생성됨 

 

 

3. sts 에서 터미널을 실행

 

* 먼저 여기서 https://hub.docker.com/ 도커허브 사이트를 가입하고 repository 를 생성한다 *  (별도 검색요망 )

                                                      빨간박스에는 [사용자 ID] / [ 레포지토리 명]                                                        파란 박스는 빌드된 도커 이미지를 PUSH 하면 업로드 됨

   다시 STS 로 돌아와서 

      프로젝트 우클릭 > show in local terminal > terminal  

      아래 terminal 탭 클릭 

      프로젝트 경로가 지정되어 있는데 이제 도커이미지를 생성할 차례 . 

       이제 아래의 도커이미지 생성 명령문 입력 ( 맨 뒤에 . 도 한칸 띄어서 입력해야 함 ) 

      docker build --build-arg DEPENDENCY=build/dependency -t [도커허브아이디]/[도커허브 레포지토리] . 

결과

완료되면 도커허브에 푸시 

    docker push [도커허브아이디]/[도커허브 레포지토리]

결과

도커허브 사이트에 푸시 되어 있는지 확인 

파란박스가 푸시 결과

 

 

 

4. 도커허브 업로드 된 이미지를 클라우드 서버에서 pull 

 

클라우드 서버로 돌아와서 ..

# 도커 이미지 생성 ( 스프링부트 )

docker pull  [도커허브아이디]/[도커허브 레포지토리]

docker images 

도커 이미지 목록

# 도커 컨테이너 생성 

docker run --name springboot-pj  -d --network test -p 80:80 tmdwns0531/simple-spring-boot bash

docker ps -a 

docker ps 

( docker ps -a 와 docker ps 결과값이 같으면 성공  )

 

 

docker start [스프링부트 컨테이너이름] 

docker start [mysql 컨테이너이름]

 

 

여기까지 성공하면 정상적으로 웹서비스를 시작 할 수 있다. 

이제 등록한 DNS (도메인) 로 브라우저 주소창에 입력

 

 

 

+ PS ) 

      # docker ps -a 와 docker ps 차이점 

 docker ps 는 현재 가용가능한 컨테이너 목록 

docker ps -a 는 전체 컨테이너 목록 (에러 발생한 컨테이너도 포함)

 

     #컨테이너 목록에서 status 가 exited 가 보인다면 ?

     위와 같이 Exited 가 있으면 docker start [컨테이너이름] 으로도 실행불가 . 

 docker logs [컨테이너이름] 으로 에러로그확인가능 

 

 

#docker run --name springboot-pj  -d --network test -p 80:80 [도커허브아이디]/[도커허브 레포지토리] bash 은 각각 무슨 뜻인가 ? 

    run 은 컨테이너생성 / name 은 컨테이너이름 /

-d 는 백그라운드실행 (없으면 컨테이너 접속함 . docker exec -it [컨테이너이름] bash 를 수행 )  / 

 --network 는 컨테이너 끼리 통신하는 id / -p 는 port번호이며 여기서 80 : 80 은 요청받는 host 서버 포트와 컨테이너 포트 매핑 (mysql 이나 스프링부트는 host 서버가 아닌 컨테이너 안에서 동작하기 때문에 매핑필요 )

 

 

 

 

CI/CD 툴 젠킨스 관련은 다음에 .. 

수고하셨습니다