[Docker] 독허

LILO Ghim·2021년 12월 23일
0

새벽 3시 첫 Docker 배포를 성공하고, 신나서 1시간 반동안 블로그를 쓰고 그대로 날림,,,,,

그냥 되는 법이 없지 :-)
그냥 이제는 뭐가 되면 의심부터 함

이렇게 딱 2주전, AWS EC2와 RDS로 첫 배포를 성공하고 좋아만했지,
응? Docker? 독ㄱ,,,,?
이거 얘기 된거야?


AWS / EC2 / RDS / DOCKER


Docker. 가상화 기술.
내 로컬 서버 가상 환경을 연결하고, 도커 허브에 image를 push하고, EC2서버에서 pull 받아서 사용 할 수 있다!
가상환경 설치하고, 초기 환경 세팅할 필요없이! image를 pull 받고 실행만 시키면 로컬에서 처럼!
db는 dump를 떠서 RDS에 넣고 사용하면 된다.


  1. Docker hub에 signup 하고,
    회원가입만 1시간 걸림 ㅘ,,, 비밀번호 50번 쳤,,, 된게 신기하다

  2. Docker 설치를 하면 된다.

    응? 어떻하라고,,,? 그냥 쳐다보고 있었던 내 모습이 떠오른다.
    1초도 안걸림

  3. DockerFile
    EC2 서버에서는 깃에서 모든 소스를 클론받아서 했다면, Docker에서는 DockerFile이면 그냥 OK라고 보면 된다

# dockerfile
FROM ubuntu:20.04

WORKDIR /usr/src/app

COPY requirements.txt ./requirements.txt

RUN apt-get update \
    && apt-get install python3.9 -y \
    && apt-get install python3-pip -y \
    && apt-get install libmysqlclient-dev -y

RUN pip install --upgrade pip

RUN pip install -r requirements.txt

COPY . .

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "airpnp.wsgi:application"] 

requirements.txt에 설치해야 할 것들 잘 적어주고!

이렇게 DockerFile을 작성하고 빌드를 하면 되는데, 여기서부터

대.에.러

docker buildx build --platform=linux/amd64 -t ghimlilo/airpnpproject3rd:0.1.0 .

1) 가장 끝에 ' . '을 찍지 않아서 arguments error 부터 출발
2) 드디어 M1이 문제가 되는데(라고 착각)

platform does not match.....
구글링해서 나오는건 다 해보자! 라며 HJ님과 미친듯이 빌드를 하고 지우고 빌드하고 지우고,,,

docker buildx build --platform=linux/arm64/v8 -t ghimlilo/airpnpproject:0.1.0 .

v8로도 시도를 하고! 여기서부터 나의 말도 안되는 v8 고집이 시작.

3) gunicorn 에러도 나오는데, requirements에 gunicorn을 적긴 적었으나 버전이 달랐고, 설치도 되어 있지 않았음?

4) DockerFile에서 처음에 FROM python:3 으로 작성했다가 FROM ubuntu:20.04로 변경하면서 용량을 거의 50%를 줄였고,

5) 그리고 말도 안되는 에러를 마주하게 되는데, 'docker_train' module 에러가 나질 않나, 'docker' module 에러가 나질 않나,,,

도대체 도커 트래인은 또 뭔데,,,? 게다가 분명 Docker를 설치를 했는데도 불구하고 Docker 에러가 나서 HJ님의 DockerFile으로 수정을 해보기도하고, 그래도 또!!! 도커가 없대,,,,,

수 십번을 물어보셨다.
설치할 때 뭐 건드렸냐고, 딴거 뭐 했냐고,,,ㅋㅋㅋㅋㅋ
왜 도커 자체를 인식을 못하냐고,,,

그.런.데.이. 때.

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "docker_train.wsgi:application"] 

응?

"docker_train.wsgi:application"

.......???


"docker.wsgi:application"

.......


(HJ님 거의 포기 할 것 같아서 너무 무서웠다, 아니 구글링해도 이런 에러는 안난다면서,,,,, 그리고 찾고 나서 "HJ아" 이러시는거 너무 욱겼음 ㅠㅠ 내가 싫다.....)

결과적으로 빌드 명령어는 amd64를 쓰던지 v8을 쓰던지 둘 중에 뭘 쓰든지 전혀 상관이 없었고, 아, 전.혀.는 아니고, warning 정도,

하지만 EC2에서 pull 받을 때는 결국 문제가 생겼다!
그건 아래에서 다시 언급 하는 걸로,

그리고,,, run을 하게 되면 로컬과 docker와 연결

docker run -p 8000:8000 ghimlilo/airpnpproject3rd:0.1.0

자!

여기서 한 가지 더 놓치지 않아야 하는 부분은
my_settings.py에서
'HOST' : 'host.docker.internal',라고
설정을 해줘야 data를 잘 꺼내온다!

처음 멘토님의 가이드는,

이렇게 적어주시고는
"자 실습 깃 클론 할 필요없고 바로 해보고 이 때 오세요"였는데
이미 시작부터 도커트래인으로 3시간 날리고 여기까지 옴 :-)

심지어 host를 RDS로 연결을 해둬서 그냥 데이터가 아주 잘 나오는 바람에 얼떨결에 되버렸;


그리고 나의 v8 고집,,, 끝까지 v8로 빌드하겠다고 우김
에러 싫어, 워닝 싫어,,,,,
HJ님 : O_O? 그래 어디 해봐
딱 이 느낌 ㅋㅋㅋㅋㅋㅋㅋㅋ


사실 에러와 3시간을 싸울 수 있었던 건 SH님이 라이브코드 딱 3시간 노쇼하시는 바람에 얼떨결에 시도해서 여기까지 온 것도 있; (그래서 캐쉬공부는 언제 봐주ㅅ,,, ㅠㅠ,,,)

와 저 docker train은 다시 봐도 너무 욱기네


EC2 / RDS


이게 끝인 줄 알았지,
외부에서 내 서버로 통신을 하려면
EC2서버로 docker image를 실행 시켜야 하는 것!

조금만 생각이라는 것을 했으면 그런 말도 안되는 질문으로
밤 12시에 멘토님께 dm을 보내지 않았을텐데,,,,,



...죄송합니닷... 그리고 진짜 사진 전송이 안되고 질문은 간 줄 알았어여...


처음에는 로컬에서 한 것과 같이 EC2에서도 똑같이 image를 띄우는건가? 싶었는데,
-> 실제로 동기들이 이 질문을 나한테 했었음


그러면 그냥 EC2에서 깃클론 받아서 서버 띄우는거랑 다를게 없는데?
왜 해??? 하는 생각을 했고,
여기서 도커허브로 image를 push하고 EC2에서 가져다 쓰는 건가 하는 생각에 도달하게 되었다.


그럼 db는 어떻게 되는거지?


이 생각의 흐름? 사실 상상에 가까웠는데 굉장히 재밌었다! 지금도 생생함!
그제서야 세션 영상 볼 생각을 함;;; BM님이 다 말해줬;;;;;
세션 때 잔거야? 오프라인이었는데?
놀랍게도 혼자 생각하고 나서 영상을 다시 보니 확실히 이해가 됐다!

EC2에 + Docker Image


먼저 도커 허브에 push!

docker push ghimlilo/airpnpproject:0.1.0

또! 그냥 넘어가는 법이 없지!

이렇게 에러가 나는데, 이유는 docker hub 계정과 Docker Desktop의 문제였다.

  • email을 다시 검증하고 > 안 됨
  • 계정이름과 email이 또 안 맞고 > 안 됨
  • 마지막으로 Docker Desktop에서 호환? 연결?이 안 되어 있었다.

이제 push가 되었다면, EC2로 건너간다

EC2를 실행시키고, 우분투에 도커를 설치
sudo 필수!!! sudo 안하면 계속 에러남.

  
ssh -i eunhyekim.pem ubuntu@00.000.000.00

sudo apt update

sudo apt install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

sudo apt update

sudo apt-cache policy docker-ce

sudo apt install docker-ce

일단 모르겠고,
일단 시키는대로 함,
이러면 또 말 몽둥이로 맞지,,, (진짜 쫌 쌤)
일단 해

그럼 Database는 어떻하지? RDS?


EC2니까 똑같나,,, 싶은 생각이 들고 그대로 해보게 됨

RDS에 db생성해서 넣어두고(로컬 mysqldump),
프로젝트 할 때는 db 변경도 많고, 코드 수정도 많아서 컨테이너와 이미지를 지웠다 생성했다 여러번 반복을 하게 되었는데, db 날리고, 덤프 뜨고, create 하고 넣어 주는 과정을 잘 생각해서,,,

# my_settings.py
'HOST': 'bagettt-database.cqdcpujd15ij.ap-northeast-2.rds.amazonaws.com'

mysql -h [endpoint] -u root -p airpnp < airpnp.sql

mysql -h bagettt-database.cqdcpujd15ij.ap-northeast-2.rds.amazonaws.com -u root -p
                                                  

안되지?


그렇지 또 안되지
(에러 캡쳐 해 놓은게 없지만)
이게 바로 3시간 도커트래인 전쟁에서 내가 끝까지 v8로 하겠다고 우기고,
warning일 뿐이다라고 HJ님이 계속 말씀을 하셨지만,,,,


결국! 여기서 안 된다는 것을 알고!
아까 표정이 딱 "이제 알겠니?-_-?"


다시 로컬로 돌아가서,,,,,

docker buildx build --platform=linux/amd64 -t ghimlilo/airpnpproject3rd:0.1.0 .

다시 build, run, push > 다시 와서 EC2에서 pull, run,,,


sudo docker pull ghimlilo/airpnpproject:0.1.0
sudo docker run -p 8000:8000 ghimlilo/airpnpproject:0.1.0
drop database airpnp;

뭐랄까

소회라는 것을 좀 적어보자면,

  • EC2 배포를 할 때는, 서버를 만들고, RDS 생성하고, 연동하고,
    배포라는 개념도, 클라우드 개념도 모른 채로 영상보고 3시간이었나,,, 초집중해서 따라하는데, 계속 뭐가 안되고, 계속 물어보고, 되서 신기해 하고 끝!
  • 도커의 d자도 모르겠고, 세션 이전에 멘토님께 설명 한 번 듣고, 세션 듣고, 생활코딩 보고, 멘토님께 다시 설명을 들었을 때도 뭔소린가 싶었,
  • 어떻게든 통신은 해야겠고, 멘토님들도 없고, 지금 난 여기 혼자이고,

자 생각을 해봐! 어떻게 해야겠어?

(요즘 제일 많이 하는 말)

  • EC2가 있는데 Docker를 왜 쓰지? 이유가 있지 않겠니?
  • image(program)를 띄워서 container(process)를 실행시킨다는데?
  • 매번 초기세팅하고, 설치할 필요없이 할 수 있다고 했었는데?
  • 그럼 EC2로 가져오라는 건가?
  • db는 RDS에 넣어주면 되는건가?

step을 생각하면서, 구글링을 하고, (생각보다 꽤 불친절한)노션과 여기저기 흩어져 있는 세션 영상들을 퍼즐맞춰서 하다보니, 중간중간 에러가 나고 반복을 하고,
예를 들어,

  • 포트를 잘못 설정했다거나, 이미 사용중인 포트라던가
  • 이름이나 버전을 잘못 적는 다던가
  • requirements를 텅텅 비워놓는다거나(생각 안해?)
  • host를 로컬(내 로컬, 도커 로컬)로 작성해서 이미지를 빌드해버린다던가
  • db가 업데이트 되지 않았다던가 등등

뭐 한 10번 이상? 빌드하고 런하고 푸쉬하고 풀 받고 런하다보니 각 step마다 어떻게 해결해야 할지 고민을 하게 되고 생각이 짜맞춰지고 있었다.

그래서 EC2 서버 배포보다 시간은 더 걸렸지만 분명하고 명료한 느낌이었고, 그래서
재밌었다!

하.지.만

이미 때는 새벽 3시, 어짜피. 통신은. 못.
이렇게 바로? 된다고? 하는 생각에 이게 된게 맞는지 계속 확인하고...
(확인공포증 있음. 된 것도 모른다고 두 달동안 말로 너무 많이 맞았음. 아니 쫌 물어볼 수도 있지,,, 하지만 ㅇㅈ)

귀여운 돌고래

돌고래쇼 싫어함.

나고야에서 보다 울었는데,,,

.........응?

#추가

# 이미지 삭제
sudo docker rmi $(sudo docker images -q) -f
sudo docker image rm -f 9fb286dfeca5 ea30be67c751 feb5d9fea6a5

# 컨테이너 삭제
sudo docker rm $(sudo docker ps -aq)

# 컨테이너 중지
docker stop 83575787df57
profile
킴릴로

0개의 댓글