Coding History

도커. fly.io

BlackBirdIT 2024. 11. 6. 15:58

나는 이미 천체 관측 API 를 파이썬으로 만들면서 배포까지 다 해봐서 도커에 대해서 약간의 이해도는 있다.

도커 이미지는 밀키트와 비슷하지만 훨씬 더 편리합니다.
비유하자면, 밀키트는 밀키트인데 조리도구(가스레인지, 냄비 등)까지 포함된 밀키트라고 보시면 됩니다.
그래서 현대의 웹 서비스에서 주류기술로 자리잡았습니다.

  • 컨테이너(Container)
    컨테이너는 애플리케이션과 그 필요한 모든 것을 포함하는 격리된 환경입니다.
    가볍고 빠르게 시작되며, 다른 컨테이너나 호스트 시스템과의 충돌 없이 독립적으로 실행됩니다.
    이는 개발, 배포, 실행을 일관되게 만들어 줍니다.
  • 이미지(Image)
    이미지는 컨테이너를 생성하는 데 사용되는 템플릿으로,
    애플리케이션 실행에 필요한 코드, 라이브러리, 환경설정 등이 포함됩니다.
    읽기 전용이며, 컨테이너는 이 이미지를 기반으로 생성됩니다.
  • 도커 데몬(Docker Daemon)
    도커 데몬은 컨테이너의 생성, 실행, 모니터링, 삭제 등을 관리하는
    백그라운드 프로세스입니다.
    도커 클라이언트와 통신하며,
    도커의 모든 중요 작업을 담당합니다.
  • 도커 파일(Dockerfile)
    도커 파일은 도커 이미지를 빌드하기 위한 설정 파일로,
    이미지 생성 과정에 필요한 명령어를 순서대로 담고 있습니다.
    이 파일을 사용하면 이미지 빌드 과정을 자동화하고,
    재사용 가능한 방식으로 관리할 수 있습니다.
  • 도커 허브(Docker Hub)
    https://hub.docker.com/
    도커 허브는 도커 이미지를 저장하고 공유할 수 있는 클라우드 서비스입니다.
    사용자는 자신의 이미지를 업로드하여 공유할 수 있으며,
    다른 사람이 만든 이미지를 검색하고 사용할 수 있습니다.

이게 이제 기본적인 개념이다


이렇게 따로 또 만들어봤다.

도커 파일 작성 내용이고,

index.html도 이렇게 대충 작성해보고..

docker build -t nginx-1 .이렇게 빌드를 한번 시도해보면 되는데,

여기서 Dockerfile에 설정 문제 때문에 제대로 빌드가 안됐다. nginx.cong를 작성하던지 아니면 해당 줄 지우고 기본설정으로 가던지 하면 되는데, 일단 강사님 Docker에 이슈가 좀 있어서 기다리고 있음. (강의대로 따라가야하니까..)

기다리는중에 대충 알아봤는데, nginx.conf 파일 추가하는게 커스텀 설정을 원할 때, 라고 한다. 커스텀 설정을 원하지 않으면 이미지에 표시한 줄을 지우고 기본 설정대로 따르면 되는데 강의가 어떻게 진행되는지 몰라서 기다리는중.

문제가 되는 설정 주석 처리후에 빌드 진행함. 빌드 성공.

여기 이 명령어로 이미지 생성 확인 할 수 있음. (기존 사용하던 것 때문에 다른 것도 보이는거.)

삭제도 해봄.


  • HTML 파일을 원격지의 브라우저에게 전송하려면 웹서버가 필요하다

  • 웹서버 중에 유명한 것이 nginx
  • nginx 도커 이미지는 이미 도커 허브에 있다.
    • 도커 이미지를 만드는게 목표
  • 도커 이미지는 Dockerfile로부터 생성
    • Dockerfile 작성
  • 도커허브의 nginx:latest 를 기반으로 하겠다
    • index.html 파일 생성 -> 소스코드
    • 도커 이미지 생성
  • docker build -t <이미지 이름 . >
  • 도커 이미지 이름 : 리포지터리_이름:태그
    • 기본 태그 : latest
    • 참고 : latest는 생략 가능(태그를 latest로 쓰고 싶다면)
    • docker build -t nginx-1 .== docker build -t nginx-1:latest .
    • 생성된 도커 이미지 확인
  • docker images

    • 도커 이미지 삭제

  • docker rmi <이미지_이름> or docker rmi <이미지_ID>
  • 도커 이미지 이름: 리포지터리_이름:태그
    • 기본 태크는 latest
    • 생략 가능
  • ex) docker rmi nginx-1:latest .==docker rmi nginx-1

뭐 대충 이렇게 정리 가능.


다시 생성하고 실행해봄.

포트를 80으로 지정해줬으니까 localhost:80으로 접속해보면 작성한 index.html이 보일 것이다.

요롷게.

컨테이너가 생성되어있는 것도 확인할 수 있다.

여기서 예전에 쓸 때도 약간 의문이긴 했는데 왜 포트 번호를 두개씩 사용하는가 에 대한 것은

포트포워딩이라는 개념을 알면 된다.


여튼

컨테이너 까보면 여기 화면에 작성한 html도 확인 할 수 있음.

컨테이너 삭제까지 해봄.

  • 도커 이미지로 도커 컨테이너를 생성할 수 있다. (도커 이미지를 실행하면 도커 컨테이너가 생성됨.)

  • 도커 이미지는 일종의 템플릿 (이력서 양식)
  • 도커 컨테이너는 도커 이미지를 디스크에서 복사해서 메모리에 띄운 것.
    • ex) 이력서를 작성해야함. -> 이력서 양식 다운, 원본에서 작업 x. 복사본을 만들고 작업하는 것과 비슷함.
  • 80 port를 사용하는 nginx-1-1 컨테이너를 띄운다.
    • docker run -d -p 80:80 --name nginx-1-1 nginx-1 다른 컨테이너에서 포트 80번 x, naginx-1-1 x
  • 8081 port를 사용하는 nginx-1-1 컨테이너를 띄운다.
    • docker run -d -p 8081:80 --name nginx-1-2 nginx-1 다른 컨테이너에서 포트 8081번 x, naginx-1-2 x
    • 하나의 도커 이미지로 2개의 컨테이너를 띄웠고 (같은 이름 불가, 같은 포트 불가 라서 서로 다른 것을 할당)

    • 도커 컨테이너 삭제
  • `docker rmi -f <컨테이너_이름>
  • docker rmi -f <컨테이너_ID>

fly.io

아 참고로 난 맥북환경이라 home brew로 다운한다.

여튼 다운부터.

해당 명령어로 로그인.

  • fly.io는 서버(PC)를 제공해준다.

  • 서버 == 컴퓨터
  • 서버에는 공인 IP가 부여 되어있다.
  • 일반적으로 웹 서버에는 도메인(IP의 별칭)이 부여되어있다.
    • 웹 서버: 서버중에서 웹 서비스를 제공하는 서버
  • flyctl을 설치하면 컴퓨터에서 명령어도 fly.io를 이용할 수 있다.
    • flyctl을 설치하고 로그인 해야 사용가능.

아까 진행하던 폴더에서 새로운 폴더 생성해주고, fly launch 해봄.

y 입력하면 리디렉션 시켜주는데

거기서 자기 상황에 맞게 설정해주고 넘어가면 됨.

그럼 여기 대쉬보드에 들어와있음.

fly.io에 서비스 배포를 위해서는 앱이 필요함.
아까 그 명령어. fly launch --no-deploy로 생성 가능.
대시보드에서 확인하면 됨. 위 이미지.

fly.toml 파일이 생성됨

fly deploy 명령어 수행 전이기 때문에 앱은 현재 Pending 상태

이제 여기서 Dockerfile생성해서 사용하면 됨!

Dockerfile은 아까와 동일하게 작성해줬다.

index.html도 대충 작성해주고.

이렇게 되어있다.

이상태에서 fly deploy 커맨드 입력하면.

이렇게 결과가 나오고.

보면 노란불에서 초록불로 바뀜

들어가서 보면 Hostname의 링크를 클릭하면 작성한 index.html을 볼 수 있다!

이렇게.

만약 서비스하는 프로젝트의 코드를 고쳤다면 flyctl deploy해주면 된다. fly depoloy해도 상관없음.

html을 대충 또 수정해서 재배포를 해보면.

업테이트 반영이 된 것 까지 확인할 수 있음.

그러니까 fly.io를 이용한다면 배포는 단 세가지만 충족되면 할 수 있다.

프로젝트, 그리고 Docekerfile, fly.toml. 여기서 fly deploy만 시켜주면 된다.


여기까지가 이제 배포를 테스트 해본 것이다.

그럼 이제 만들어두었던 surl-project를 배포해보자고.

프로젝트 깃 이고.

해당 프로젝트는 url을 축소시켜서 사용할 수 있게 해주는 간단한 프로젝트다.

이렇게 도커파일 생성하고, fly 명령어도 실행시켰다.

fly.toml확인해주고.

이제 명령어 치고 기다려보자.

정상 배포되는 것 확인함!

기능도 정상 작동한다.

이렇게 약식으로나마 배포까지 완료해봤다!

'Coding History' 카테고리의 다른 글

서버 DB 영속성 부여 -> 그냥 연습용 예제  (0) 2024.11.11
git hub action (CI / CD)  (1) 2024.11.07
시험) 날씨 api  (0) 2024.11.03
CSR과 SSR의 차이 (리액트)  (5) 2024.09.30
JS 리액트 useEffect  (0) 2024.09.27