Trouble Shooting - Docker 빌드할때 운영체제를 꼼꼼히 봐야한다.
✏️ 개요
지금 하고 있는 사이드 프로젝트에서 문제가 생겼다.
기존에 Git Action을 통해 CI/CD를 구축하였다. flow는 다음과 같다.
- 프로젝트를 빌드한다.
- 도커 허브에 프로젝트 빌드를 push한다.
- 서버가 떠 있는 aws EC2에서 도커허브에 있는 빌드된 파일을 pull을 통해 받아오고, 서버를 띄운다.
나는 도커에 대해 많이 알지 못하므로, 팀원에게 CI/CD구축을 맡겼다.
왜냐하면, EC2 + docker + RDS + S3등을 연동해야했기에, docker라는 것 때문에 이를 유기적으로 연결할 생각을 무서워서 못했기 때문이다.
결과적으로, 이번 문제를 팀원과 같이 해결하면서 docker에 대한 이해도가 어느정도 늘었다고 생각한다.
✏️ 문제
문제는 빌드 파일을 pull로 가져오는건 되는데, 서버가 뜨지 않는다는 것이다.
jolly_montalcini라는 랜덤으로 설정된 컨테이너는 내가 수동으로 서버를 띄워본 빌드파일이다.
수동으로 서버를 띄웠을때 잘 되고, 왜 도커 허브에서 받은 파일로 서버를 띄우면 안되는 것인가?
처음에는 gitAction에서 err
라는 문구를 출력하길래 이걸 뜯어봐야한다고 생각했다.
근데, 이 문구는 Action이 성공했을때도 떴기에 일단 다른 부분을 체크하기로 했다.
✏️ 로그확인
그 다음 든 생각은 로그를 보자. 찾아보니 docker-comose로 띄운 컨테이너를 다음 명령어를 통해 로그를 확인할 수 있다고 했다.
1
2
3
sudo docker-compose logs 컨테이너이름
//
sudo docker-compose logs web
그렇게 이 명령어를 통해 확인해보니
이 에러는 빌드한 이미지와 서버의 운영체제가 다를때 뜨는 에러라고 한다.
알고보니, 팀원은 M1맥북으로 자바 파일 이미지를 최초에 빌드했고, 이를 계속 EC2 ubuntu 환경인 AMDx86에서 arm에서 빌드한 파일을 빌드하고 서버를 띄우려고 하니, 에러가 발생하는 것이다.
즉, 윈도우에서 최초 이미지를 빌드하던가 해야하는데.. 도커허브에 일단 들어가 보았다.
보아하니, main
은 AMD64로 계속 허브에 올라오고 있었고, latest
는 9일 전 그러니까 최초에 올라오고 그 이후에는 푸시되고 있지 않았다.
gitAction은 자동으로 latest
를 배포하고 있었다.
그렇기에 Ec2에는 latest
가 계속 배포되고 있었고, 이를 main
으로 바꾸면 해결될 거라 생각했다.
이는 간단하다.
기존 docker-compose.yml 파일은 이렇게 되어있었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3'
services:
web:
container_name: web
image: teambpm2023/dnd-bpm
expose:
- "8080"
ports:
- "8080:8080"
nginx:
depends_on:
- web
restart: always
build:
dockerfile: Dockerfile
context: ./config/nginx
ports:
- "80:80"
여기서 image: teambpm2023/dnd-bpm
이 부분을 image: teambpm2023/dnd-bpm:main
으로 바꾸면 된다.
그리고 GitAction을 다시 돌리면..
서버가 자동으로 잘 뜨게 된다.
도커에 대해 조금 더 알게되긴 하였고, 더 공부하고 싶은 생각이 들었다.