logo

처음 하는 aws 에 nestjs 배포하기 - 3. 도커 이미지 빌드

4달 전
264  •  0

이 게시물은 주로 도커를 다룬다.

생소한 docker와 ssh 인증이 있어서 좀 어려울 수 있다.

  1. 도커를 다운받는다

  1. 도커를 빌드할 dockerfile과, 실행용 build-image.sh 파일을 생성한다.

  1. ssh-key 생성

/Users/${user-name}/.ssh 폴더에 새로운 ssh 쌍 ex) id_ed25519, id_ed25519.pub 가 생겼는지 확인한다. key-pair는 하나는 내가 갖고있는 private-key(id_ed25519) 다른하나는 상대에게 인증용으로 줄 public-key(id_ed25519.pub)로 구성되있다. 그래서 "나"를 등록해야 하는 경우 - 이경우는 도커 - private-key를, 내가 인증해야하는 곳 - 이경우는 github - 에는 public-key를 등록한다.

  1. 깃허브에 public-key 등록

    1. github > settings > SSH and GPG keys

    2. New SSH Key 클릭

    3. 타이틀 설정 후

    4. 3에서 생성한 파일중 pub의 내용을 key에 붙혀넣는다.

  1. build-image.sh

설명:

  • ssh_private_key는 git을 도커에서 쓰기 위해 필요하다.

  • DOCKERFILE은 사용하려는 도커파일까지의 경로, TAG는 사용하려는 태그 이름(아무거나) 설정하면 된다.

  • platform은 도커가 돌아가는 os에 관한것이다.

    !! 현재 ec2는 linux/amd64로 되어있지만, 나같은 mac 유저는 로컬에서 테스트하기 위해서는 linux/arm64로 먼저 빌드해본다

  • CACHEBUST는 docker image build의 cache control

  • --no-cache는 전체에 대해 no-cache라서 평소에는 주석처리 해두고, 필요할때마다 주석을 해제후, .보다 위로 올린다. (예를들어 지금 처럼 처음부터 설정할때는 no-cache가 유용)

  • 마지막 . 까지 잊지 말도록 하자

  • ssh 설정이 잘 됬는지 확인하려면 ssh 세팅이 끝난 후 아래 명령어를 출력해본다. (이후도 다 주석처리) 정상일시 아래그림과 같다

RUN ssh -T git@github.com

  1. dockerfile 설정

FROM~ : 이미지를 생성할 기본 이미지 https://hub.docker.com/_/node에서 검색 가능하다. 경량 linux alpine3.20의 node 20 버전이다.

SSH KEY 설정: private git을 클론하기 위해 만들어둔 ssh key를 복사한다. 이전 build-image.sh에서 sshkey를 환경변수로 준 값이 적용된다.

ARG CACHEBUST=1을 기점으로 캐시를 활용하지 않는다.

운영용 브랜치 prod를 클론, 관련 패키지 설치 후 빌드하고 서버 구동 명령어를 입력한다.

확인: run-image.sh(아래 있음)나 dockerapp을 활용해 도커를 실행 후 정상적으로 작동하는지 확인한다.

docker ui에서 컨테이너가 정상 작동하는지 확인 가능하다.

main-prod가 현재 문제없이 RUNNING중, 포트는 3000

내부에서도 정상적인 로그가 나오는걸 확인 할 수 있다.

여기까지 잘 진행했다면 도커 이미지는 정상적으로 생성된 것이다.

활용된 저장해두면 유용한 도커 명령파일들은

  1. cache-clean.sh

docker system prune -a -f

  1. run-image.sh

HOST_PORT=3000
CONTAINER_PORT=3000
TAG=main-prod


docker run \
    -d \
    -p $HOST_PORT:$CONTAINER_PORT \
    --name $TAG \
    $TAG:latest

  1. stop-container.sh

TAG_NAME=main-prod

docker stop $TAG_NAME

  1. rm-container.sh

TAG_NAME=main-prod

docker rm $TAG_NAME

두리

두리

창업에 도전하는 풀스택 개발자
커뮤니티

같은 크리에이터의 게시물

더보기