- dockerfile을 작성한 후, 빌드하여 docker image를 생성한다.
- docker image 파일을 docker hub에 push한다.
- 서버(AWS EC2)에서 docker hub에 있는 docker image를 pull 받아온다.
- docker run 명령어로 docker image를 실행한다.
배포를 할 스프링 부트 프로젝트를 생성한다.
스프링 부트 프로젝트 생성 방법에 대해 궁금한 사람은 인텔리제이로 스프링부트 시작하기를 참고하자.
폴더 최상단에 Dockerfile
을 생성하고 아래와 같이 내용을 채워준다.
# open jdk 11 버전의 환경을 구성
FROM adoptopenjdk/openjdk11:latest
# build가 되는 시점에 JAR_FILE이라는 변수 명에 build/libs/*.jar 선언
# build/libs - gradle로 빌드했을 때 jar 파일이 생성되는 경로
ARG JAR_FILE=build/libs/*.jar
# JAR_FILE을 app.jar로 복사
COPY ${JAR_FILE} app.jar
# 운영 및 개발에서 사용되는 환경 설정을 분리
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "/app.jar"]
./gradlew build -x test
빌드를 하여 jar 파일을 생성한다.
Docker Hub에 들어가 Repository를 만들어준다.
이 때, visibility는 Public
으로 한다.
# docker build --build-arg DEPENDENCY=build/dependency -t (도커 허브 ID)/(Repository 이름) --platform linux/amd64 .
docker build --build-arg DEPENDENCY=build/dependency -t leeeeeyeon/docker-test --platform linux/amd64 .
맥북의 경우 --platform linux/amd64
옵션을 추가해주어야 한다.
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
도커 앱을 실행시켜주어서 해결하였다.
Can't add file /Users/leeeeeyeon/Desktop/demo/.gradle/7.6/executionHistory/executionHistory.bin to tar: io: read/write on closed pipe
구글링을 하여도 마땅한 자료가 나오지 않았다...
그래서 명령어를 다시 실행해보았는데, 두 번째로 실행하니 동작하였다.
왜 두 번째에는 됐는지 아직 원인을 찾진 못하였다 🥹
[internal] load metadata for docker.io/library/openjdk:11-jdk-alpine:
스택오버플로우를 참고하여 해결하였다.
Dockerfile을 작성할 때, openjdk 이미지를 정확히 입력해주어야 한다.
참고하는 블로그 글을 보며 단순히 숫자만 8→11로 바꿔준 것이 잘못이였다.
docker push leeeeeyeon/docker-test
방금 생성한 Repositorydml Tag 부분을 통해 push가 잘 된 것을 확인할 수 있다.
앞서 언급한 Docker를 활용한 배포 Flow 중, 하늘색 박스 친 부분까지 완료되었다.
이제 나머지 부분을 진행해보자 😄
아직 AWS EC2 인스턴스가 없다면 AWS EC2로 서버 환경을 만들어보자를 참고하자.
# 패키지 업데이트
sudo apt-get update -y
# 기존에 있던 도커 삭제
sudo apt-get remove docker docker-engine docker.io -y
# 도커 설치
sudo apt-get install docker.io -y
# docker 서비스 실행
sudo service docker start
# /var/run/docker.sock 파일의 권한을 666으로 변경하여 그룹 내 다른 사용자도 접근 가능하게 변경
sudo chmod 666 /var/run/docker.sock
# ubuntu 유저를 docker 그룹에 추가
sudo usermod -a -G docker ubuntu
# 패키지 업데이트
sudo yum update -y
# docker 설치
sudo yum install docker -y
# docker 서비스 실행
sudo service docker start
# ec2-user를 docker 그룹에 추가
sudo usermod -a -G docker ec2-user
sudo docker pull (도커 허브 ID)/(Repository 이름)
sudo docker run -p 8080:8080 (도커 허브 ID)/(Repository 이름)