Dockerfile 추가
FROM gradle:7.4-jdk11-alpine as builder
WORKDIR /build
# 그래들 파일이 변경되었을 때만 새롭게 의존패키지 다운로드 받게함.
COPY build.gradle settings.gradle /build/
RUN gradle build -x test --parallel --continue > /dev/null 2>&1 || true
# 빌더 이미지에서 애플리케이션 빌드
COPY . /build
RUN gradle build -x test --parallel
# APP
FROM openjdk:11.0-slim
WORKDIR /app
# 빌더 이미지에서 jar 파일만 복사
COPY --from=builder /build/build/libs/*-SNAPSHOT.jar ./app.jar
EXPOSE 8080
# root 대신 nobody 권한으로 실행
USER nobody
ENTRYPOINT [ \
"java", \
"-jar", \
"-Djava.security.egd=file:/dev/./urandom", \
"-Dsun.net.inetaddr.ttl=0", \
"app.jar" \
]
.gitlab-ci.yml
stages:
- dockerbuild-push
package:
only:
- main
image: docker:latest #도커 위에서 빌드를 한다
stage: dockerbuild-push
services:
- docker:dind #도커 안에서 도커를 빌드할 때 주는 옵션
variables:
IMG_TAG: ${CI_REGISTRY_IMAGE}:latest #환경 변수 설정, CI_REGISTRY_IMAGE : 이미지에 사용하는 이름
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker build -t $IMG_TAG .
- docker push $IMG_TAG
after_script:
- docker logout
V2
stages:
- dockerbuild-push
package:
image: docker:latest
stage: dockerbuild-push
services:
- docker:dind
before_script:
- docker login registry.gitlab.com -u $GITLAB_USER -p $GITLAB_PASSWORD
script:
- docker build -t registry.gitlab.com/$GITLAB_USER/$PROJECT_NAME .
- docker push registry.gitlab.com/$GITLAB_USER/$PROJECT_NAME
after_script:
- docker logout
crontab -e // crontab 설정 입력 파일
crontab -l // crontab 내용 확인
crontab -r // crontab 내용 삭제
* * * * *
분 시 일 월 요일

* * * * * sh /home/ubuntu/deploy.sh > /home/ubuntu/deploy.log

deploy.sh
#!/bin/bash
set -ex
docker pull registry.gitlab.com/seotg/pro | grep "Image is up to date" && pull_status="already_pulled" || pull_status="newly_pulled"
echo $pull_status
if [ "$pull_status" = "newly_pulled" ]; then
docker stop pro
docker rm -f pro
docker run -d -p 8080:8080 --name pro -e SPRING_DATASOURCE_URL=jdbc:mysql://ec2-3-34-122-205.ap-northeast-2.compute.amazonaws.com:3306/pro -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=12345678! registry.gitlab.com/seotg/pro
docker image prune -f
fi
deploy.sh 양식
#!/bin/bash
set -ex
docker pull registry.gitlab.com/<사용자ID>/<프로젝트이름>:latest | grep "Image is up to date" && pull_status="already_pulled" || pull_status="newly_pulled"
echo $pull_status
if [ "$pull_status" = "newly_pulled" ]; then
docker stop <컨테이너이름> ==> 아래 빨간색 동그라미
docker rm -f <컨테이너이름> ==> 아래 빨간색 동그라미
docker run -p 8080:8080 --name <컨테이너이름> ==> 아래 빨간색 동그라미 -e SPRING_DATASOURCE_URL=<url/DB명> ㅇ<password> \
-d registry.gitlab.com/<사용자ID>/<프로젝트이름>
docker image prune -f
fi

안될경우
- docker logs [컨테이너id OR NAMES] 를 사용하여 로그를 확인
docker ps 해보면 컨테이너가 내려가 있다
deploy.sh의 명령어 대로 순서대로 실행 해본다
docker pull registry.gitlab.com/<사용자ID>/<프로젝트이름>
denied: access forbidden 에러나면 밑에 참고
=⇒ 실행 후 docker images 명령어를 쳐보면

[registry.gitlab.com/seotg/pro](http://registry.gitlab.com/seotg/pro) 이미지 생성

denied: access forbidden
docker login 명령어를 쳐서 로그인을 한번 해야된다.
=⇒ docker login registry.gitlab.com/seotg/pro
username : seotg
비밀번호 : 깃랩비밀번호
The driver has not received any packets from the server.
.yml에서 드라이버 추가
driver-class-name: com.mysql.cj.jdbc.Driver
.yml
server:
port: 8080
servlet:
encoding:
force-response: true
charset: UTF-8
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
profiles:
active: ec2
datasource:
username:
password:
driver-class-name: com.mysql.cj.jdbc.Driver ////이거 추가함
url:
jpa:
hibernate:
ddl-auto: create
show-sql: true