삽질의 첫 시작, GCP 배포.
로컬 환경에서 docker 를 편리하게 설치하고 실행하기 위해 Docker Desktop 설치하자 (설치 방법은 생략)
터미널에 $ docker
명령어를 입력하여 정상적으로 설치되었음을 확인한다.
Docker가 정상적으로 설치가 완료 되었다면, 해당 springboot 프로젝트의 루트 폴더에 Dockerfile
을 생성하고 아래 내용을 작성한다.
반드시 해당 프로젝트에 맞는 jdk 버전을 선택한다
Dockerfile 을 작성하였으니, 프로젝트를 build 하여 생성된 docker image 를 Docker Hub에 push 해야한다.
따라서, Docker Hub 애 접속하여 회원 가입을 하고, 이미지를 업로드할 리포지토리를 생성한다.
리포지토리 이름은 m1nddoong/ecology_map
으로 하였다.
$ ssh -i ~/.ssh/gcp-key m1nddoong0321@xx.xxx.xxx.xxx
sudo docker --version
명령어로 확인$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
$ sudo mkdir -m 0755 -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$ sudo docker --version
# 결과
Docker version 24.0.6, build ed223bc
$ sudo apt install -y openjdk-17-jdk
$ java -version
# 결과
openjdk version "17.0.8.1" 2023-08-24
OpenJDK Runtime Environment (build 17.0.8.1+1-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 17.0.8.1+1-Ubuntu-0ubuntu120.04, mixed mode, sharing)
도커를 더 편리하게 쓸 수 있게 해주는 docker-compose를 설치합니다.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
% sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ docker-compose -v
# 결과
docker-compose version 1.27.4, build 40524192
sudo vim docker-composer.yml
로 실행하여 오류를 저장 닫기가 되지 않는 오류를 해결ESC
+ !wq
로 저장합니다.version 3
: docker composer 파일의 버전은 3 사용services
: application 서비스 정의image
: application 서비스에 사용할 도커 이미지를 지정한다. environment
: 다음 환경 변수를 설정하여 Springb Boot 애플리케이션에서 DB 연결에 필요한 정보를 전달한다.restart
: always 컨테이너가 종료되었을 때 자동으로 다시 시작되도록 지정container_name
: ecology_map 이라는 컨테이너를 참조할 수 있도록 지정ports
: 호스트의 8080 포트와 컨테이너 내부의 8080 포트를 매핑하므로서, 호스트에서 localhost:8080 으로 접근하면 컨테이너 내부의 애플리케이션에 연결할 수 있다.IntelliJ 에서 bootJar 실행을 통한 jar 빌드
docker login 하기
username : m1nd*****
password : ecom*******
Docker Desktop 실행
docker buildx build 사용
--push
옵션으로 Docker Hub Repository 로 자동 push 해준다.docker buildx build --platform=linux/amd64,linux/arm64 -t m1nddoong/ecology_map . --push
입력docker buildx build --platform=linux/amd64,linux/arm64 -t m1nddoong/ecology_map . --push
buildx 설정
ARM64 칩을 가진 M1 노트북에서 빌드한 것을 배포하면 VM상 플랫폼과 충돌하여 정상 빌드되지 않기 떄문에
빌드된 이미지가 호스트의 영향을 받지 않도록 빌드할 때 --platform 옵션을 추가해서 처리
호스트 서버가 Ubuntu(linux/amd64)를 지원하므로 --platform linux/amd64 옵션을 붙여 빌드
1. builder 생성 및 사용하기
2. Buildx로 multi-platform image 만들기
--platform=linux/amd64,linux/arm64
:amd64와 arm64를 모두 지원하는 이미지를 빌드--load
: 이미지를 만들고 호스트 docker image에 저장--push
: --load옵션과 반대로 docker registory로 바로 push 하는 옵션
도커 데스크탑에도 들어옴
로컬 환경에서 JAR 파일로 빌드하고, 도커 이미지 생성 및 push 하였다. 이제는 GCP 인스턴스에 접속 후 도커로 로그인하여 배포 서버상으로 도커 이미지를 pull 해오는 과정을 진행하겠다.
docker login
sudo docker pull 계정명/리포지토리명
sudo docker pull m1nddoong/ecology_map
sudo docker iamges
로 도커 허브에서 pull 해온 이미지가 잘 들어왔는지 확인sudo docker tag pull한 이미지 만들이미지
sudo docker tag m1nddoong/ecology_map ecology_map
sudo docker-compose up
GCP를 이용하여 DB를 바꾸고, 서버배포까지 그 과정은 기나긴 여정 같았지만 배포를 성공해서 뿌듯하긴하다.
위 과정을 통해서 어떻게 docker 로 이미지를 생성하여, 컨테이너를 생성해 실행시키는지를 배울 수 있었고 GCP 가 아닌 AWS 에 대해서도 공부하고싶다는 생각이 들었다. -끝-
[참고 사이트]
https://velog.io/@baeyuna97/exec-user-process-caused-exec-format-error-%EC%97%90%EB%9F%AC%ED%95%B4%EA%B2%B0
https://velog.io/@inyong_pang/Devops-Docker-buildx-at-M1-Macbook
https://choo.oopy.io/5c999170-dde5-4418-addc-00a0d263287c#63362673-217c-4d31-aefd-2c3314d575d6
https://velog.io/@codesusuzz/GCP-Docker-%EC%9D%B4%EC%9A%A9-Spring-boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0
https://hun-dev.tistory.com/13
https://velog.io/@leeeeeyeon/Docker%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-Spring-Boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-EC2-%EB%B0%B0%ED%8F%AC
출처 https://souljit2.tistory.com/74
글 잘 읽었습니다!
여담이지만 iterm2 테마 어떤건지 알 수 있을까요?