
도커 컴포즈는 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구
아래 링클로 접속해 1번, 2번 모두 ec2에 서버에 설치하기
Install Docker Engine on Ubuntu
docker --version
docker compose version
위 명령어로 잘 깔렸는지 확인하면 ec2 서버에 docker 설치 완료
version: '3'--
services:
trothcam:
image: kusitms/ggeok
container_name:컨테이너명
restart: always
ports:
- 8080:8080
저장하고 나가기 : esc > :wq
저장하지 않고 나가기 : esc > :q

위치 잘 확인 후 Dockerfile 추가
# open jdk 17 버전의 환경을 구성
FROM openjdk:17-jdk
#gradle로 빌드했을 때 jar 파일이 생성되는 경로 작성
ARG JAR_FILE=./build/libs/server-0.0.1-SNAPSHOT.jar
# JAR_FILE을 app.jar로 복사
COPY ${JAR_FILE} app.jar
# 운영 및 개발에서 사용되는 환경 설정을 분리
ENTRYPOINT [ "java", "-jar", "-Dspring.profiles.active=prod", "/app.jar" ]
! jar 파일 위치 및 명칭 확인 후 작성하기 : ARG JAR_FILE 부분에 jar파일 빌드하면 build>libs에 jar 파일이 생김. 그 경로를 넣으면 됨
<jar 파일 빌드 방법>
./gradlew build
# github repository actions 페이지에 나타날 이름
name: CD
# event trigger
# main 브랜치에 push가 되었을 때 실행
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
## jdk setting - github actions에서 사용할 JDK 설정 (프로젝트나 AWS의 java 버전과 달라도 무방)
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
## gradle caching - 빌드 시간 향상
- name: 🧁 Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: 🧁 application.yml 파일을 생성 합니다.
run: |
cd ./src/main/resources
touch ./application.yml
echo "${{ secrets.PROPERTIES }}" > ./application.yml # github actions에서 설정한 값을 application.yml 파일에 쓰기
shell: bash
#Gradle을 사용하여 프로젝트를 빌드
- name: 🧁 gradle build를 위한 권한을 부여합니다.
run: chmod +x gradlew
- name: 🧁 gradle build 중입니다.
run: ./gradlew build
shell: bash # ci는 여기까지
## Docker 이미지를 빌드하고 Docker Hub로 푸시
- name: 🧁 docker image build 후 docker hub에 push합니다.
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile -t ${{ secrets.DOCKER_REPOSITORY }}/${{ secrets.DOCKER_IMAGE }} .
docker push ${{ secrets.DOCKER_REPOSITORY }}/${{ secrets.DOCKER_IMAGE }}
- name: 🧁 docker hub에서 pull 후 deploy합니다.
uses: appleboy/ssh-action@master
with:
username: ubuntu
host: ${{ secrets.AWS_HOST }} # EC2 퍼블릭 IPv4 DNS
key: ${{ secrets.AWS_KEY }}
script: |
sudo docker pull ${{ secrets.DOCKER_REPOSITORY }}/${{ secrets.DOCKER_IMAGE }}
sudo docker rm -f $(docker ps -qa) #
docker compose up -d
docker image prune -f
| EC2_HOST | 탄력적ip |
|---|---|
| EC2_USERNAME | ubuntu |
| EC2_PRIVATE_KEY | pem키 |
| DOCKER_USERNAME | 도커 유저명 |
| DOCKER_PASSWORD | 도커 비밀번호 |
| DOCKER_REPOSITORY | 레파지토리 이름 |
| DOCKER_IMAGE | 도커 이미지 이름 |
| PROPERTIES | application.yml 파일 |
Error: Cannot perform an interactive login from a non TTY device
-> github secret의 USERNAME 잘못되어있었음
ERROR: failed to solve: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount2939804424/Dockerfile: no such file or directory
-> dockerfile 경로가 잘못되어 있었음
2번에 yml에
trothcam은 서비스 이름을 넣는다네요. 쏘울라이브로 하시죠