환경 :: Ubuntu 18.04
참고사이트 :: (도커(Docker) 입문편 컨테이너 기초부터 서버 배포까지)
https://www.44bits.io/ko/post/easy-deploy-with-docker
강사 :: 김도커님 (실명 거론은 좀 그래서... 닉네임으로 ^^)
Front단 배포
윈도우 이클립스에서 war파일로 배포해서 Ubuntu 로컬에 넣기 전에
EC2에서 사용할 수 있게 EC2에 할당된 탄력적 IP 주소로 코드를 다 바꾸었다.
도커 톰캣 컨테이너 진입 ::
docker exec -it tomcat bash
war파일 docker 톰캣 컨테이너에 배포
톰캣 컨테이너에 배포만 하면 알아서 구동시켜준다
이렇게 셋팅한 도커 컨테이너를 Docker Hub에 내 계정 밑에 tracycle_front이란 이름으로 local태그를 붙여 커밋한다.
(로컬에서만 돌아가는 ip주소로 설정되어있기 때문에 local이라고 태그이름 붙임)
이미지가 생성되었다.
그리고, 컨테이너 삭제 해줬다.
그리고, 커밋했던 이미지 구동
컨테이너가 생성되어 잘 구동됐다는 결과나오고 페이지도 뜬다.
컨테이너 내부에 진입해보니
이렇게 파일이 잘 배포되어있음을 확인했다.
컨테이너도 생성되어 잘 돌아가고 있다.
도커 로그인
로그인 성공
이미지 push
id 저장소 밑에 repository에 local 태그로 넣는다고 해서.. 이렇게
내 계정 밑에 넣으려면 이렇게 해야만 한다
Docker Hub에 잘 Push 되었다.
EC2에서 사용할 이미지는 위와 같은 과정으로 똑같이 진행해서 PUSH까지 하면 된다.
테스트를 위한 웹 요청은 똑같이 localhost로 요청하면 된다.
오른쪽 파이어폭스 브라우저 화면과 같이 이렇게 잘 나오면 테스트 완료
Push가 잘 되었다면 이렇게 지정해서 Push했던 태그명으로 추가되었음이 확인된다.
Back단 배포
SpringBoot 서버
로컬에서 프로젝트 압축파일을 가져왔다.
back 폴더로 옮겨서 압축 풀어주었다.
sudo vi pom.xml 명령어 입력해서 vi 편집기로 pom.xml 열어서
war를 jar로 바꿔주었다.
잘 바뀐것을 확인했다.
이제 maven을 설치한다. (이미 설치되어있다면 필요 없는 부분)
maven 설치완료되었고 target 폴더 안에 파일들 확인했다.
pom.xml이 있는 폴더 안에서
sudo mvn package 명령을 쳐서 빌드를 진행한다.
빌드가 끝났고 target 폴더에 빌드 파일들이 배포된 것을 확인했다.
그리고 sudo vi Dockerfile 해서
오른쪽 표시한 터미널 창과 같이 Dockerfile을 작성하고 저장해준다.
저장 확인했다.
잘 작성된 것도 확인했다.
(From 부분 의미는 openjdk 8버전 기반으로 한다는 걸 설정해준것임)
(Copy는 recycle 뭐시기.jar 파일을 app.jar 라는 이름의 파일로 복사하겠다는 얘기)
(Entrypoint 는 .jar를 실행시켜주라는 의미)
위 명령어로 도커파일로 이미지를 빌드하도록 해준다.
local . 을 붙여줘야지 그 밑에 있는 것을 전부 빌드한다.
도커 이미지로 도커에 빌드를 완료했고, 확인되었다.
(openjdk 설치되있는 이유는 아까 Dockerfile에서 openjdk 기반으로 한다는 걸 설정해줬기 때문)
(Copy는 recycle 뭐시기.jar 파일을 app.jar 라는 이름의 파일로 복사하겠다는 얘기)
(Entrypoint 는 .jar를 실행시켜주라는 의미)
위와 같이 docker run 시킨다.
back 컨테이너가 잘 작동되고 있다.
log 확인 명령어로 서버가 잘 구동되었는지 확인했다.
(fea는 컨테이너ID 명 앞 3글자를 지정, 해당 컨테이너 로그를 보여주도록 명령함)
이제 Docker Hub에 Push해준다.
도커 내부에 진입해서 파일들 확인함
<EC2용 Spring Boot 서버 빌드해서 Docker Hub에 배포하기>
sudo vi application.properties 명령어로 vi 편집기 열고
ip를 EC2 ip주소로 바꿔준다.
그리고 cd config 해서 config 폴더로 이동하고
sudo vi dbconn.properties 명령어를 쳐서 vi편집기를 들어간다.
그리고 ip주소를 EC2 주소로 바꿔준다.
나머지는 로컬로 했던 과정과 동일한 방식으로 진행하면 된다.
Docker Hub에 Push까지 진행했고, 위와 같이 잘 Push되었음을 확인했다!
Flask 서버
김도커님의 Flask서버 Docker 이미지 다운
(시간과 AWS 프리티어 사양 관계로 이미지만 받아서 로컬에서 돌릴듯?)
다운 완료
ubuntu 로컬에 docker-compose.yml 파일을 넣어주었다.
sudo apt install docker-compose 명령어로 docker compose를 설치한다.
vi docker-compose.yml 명령어를 쳐서 vi 편집기로 들어간다.
docker-compose.yml 파일을 위와 같이 내가 지정한 Docker 이미지에 맞게 설정을 작성해준다.
그리고 docker-compose.yml 파일이 있는 곳에서
docker-compose up 명령어를 쳐서 compose를 해준다.
(오류때문에 AWS ec2로 이동해서 Front와 Springboot 이미지만 pull해서 위 과정 진행함)
(Flask 서버는 용량이 너무 커서 AWS EC2 프리티어로는 택도 없음...)
※ 여기서 참고사항
docker-compose stop 이나 restart 로 하면 컨테이너가 안내려간 채로 정지되거나 재시작한다.
(멈췄다가 다시 시작할 계획이 있을 때는 꼭 이 명령어를 쳐야한다)
아예 중단하면서 컨테이너도 함께 내릴 때는 docker-compose down 명령어를 사용한다.
내려져 있는 상태에서 로그 출력 없이 다시 실행할 때는 docker-compose up -d 명령어를 사용한다.
EC2 서버에 요청한 페이지가 DB데이터와 함께 잘 나오는 것을 확인했다.
++ 추가
모든 컨테이너 삭제하기
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
모든 이미지 삭제하기
docker rmi $(docker images -q)
Exit 상태의 모든 컨테이너 삭제하기
docker rm $(docker ps --filter 'status=exited' -a -q)
선택지우기
docker rmi 이미지id or 이름
docker image rm 이미지id or 이름