도커를 현업에 도입하기 위해서 작업 중 테스트 하면서 정리한 기록들을 남김.
[목표]
1 . github -> master 커밋
2. dockerhub maven build 및 docker 이미지 파일 생성
3. 생성된 이미지를 서버에서 실행
4. nginx 자동 반영
1번 부터 4번까지 자동으로 실행이 된다면 무중단 배포가 됨
1번과 2번 사이에 젠킨스를 끼어 넣어야 되겠지만. 우선 젠킨스 없이 진행 함.
젠킨스가 필요 하다면 추후 넣을 예정
현제 회사에서는 빌드툴로 maven을 사용하고 있고 1번과 2번은 간단하게 도커허브에서 바로 연동가능합니다.
2번 과정에서 도커파일을 maven을 이용해서 컴파일 하는 스크립트 입니다.
가장 중요한 부분은 FROM을 통해서 메이븐 빌드영역과
자바를 실행하는 zulu-openjdk 영역이 다릅니다.
copy때 이 부분 때문에 많은 시간을 소비 했습니다. ㅜㅜ
Dockerfile
###########################################
#maven build 영역
###########################################
FROM maven:3.6.3-openjdk-11 as builder
ENV APPNAME testapp
RUN adduser $APPNAME
WORKDIR /home/$APPNAME
COPY pom.xml .
COPY src ./src
RUN mvn -f pom.xml package -Dmaven.test.skip=true -Dfile.encoding=UTF-8
################################################
#실행영역
################################################
FROM azul/zulu-openjdk-centos:11.0.9-11.43.21
ENV APPNAME testapp
WORKDIR /home/$APPNAME
COPY --from=builder /home/$APPNAME/target/*.jar /home/$APPNAME/boot/app.jar
LABEL maintainer="webmaster@fourfree.com"
EXPOSE 8080
ENTRYPOINT ["java","-Dserver.port=8080","-Dspring.profiles.active=prod","-jar", "boot/app.jar" ]
가장 중요한 부분은
COPY --from=builder
논리적으로 메이븐 빌드하는 영역과 jar실행하는 영역이 다름으로 위와 같이 as builder 선언 후 copy --from 명령을 통해서 복사 합니다.
[3번]도커허브에 생성된 이미지를 실행하는 부분
start.sh 쉘 스크립트 입니다.
docker container stop testapp
docker rm testapp
docker pull fourfree/testapp
docker run -d -p 8902:8080 -v /home/esjob/logs:/home/testapp/logs -it --name testapp -e TZ=Asia/Seoul fourfree/testapp:latest
- 우선 구동되고 있는 testapp 컨테이너 stop
- testapp 컨테이너 삭제
- testapp-> 도커허브에서 latest파일 다운로드 ( 이미 최신 버전이면 다운로드 하지 않습니다.)
- -e TZ=Asia/Seoul 옵션을 반드시줘야 timezone-> 서울로 생성됨
나머지 부분은 추후 더 추가할 예정
'Docker' 카테고리의 다른 글
docker rabbitmq 설치 (0) | 2021.01.15 |
---|---|
docker , redis설치 (0) | 2021.01.14 |
도커허브에서 빌드된 이미지 다운로드 (0) | 2020.12.11 |
도커허브 로그인 (0) | 2020.12.11 |
centos7 docker 설치 , docker install (0) | 2020.12.08 |