- [ 학습기록/cheat sheet ][docker] docker CLI (컨테이너/볼륨/네트워크)2024-03-03 19:15:26컨테이너생성하기: run & createrunUsage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]Create and run a new container from an image`run`은 이미지로부터 컨테이너를 생성하고 실행하는 명령어다. 로컬에 이미지가 없는 경우, 도커 이미지를 `pull`한 뒤 컨테이너를 생성`create`하고 시작`start`한다. createUsage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]Create a new container`create`는 이미지로부터 컨테이너를 생성하는 명령어다. `run`과 달리 생성된 컨테이너를 시작하지 않는다.💡 컨테이너의 기본 사용자는 root이며 호스트..
- [ backend/docker ][docker] GitHub Actions에서 도커 캐싱하기(cache from/cache to)2024-02-11 21:05:55CI/CD에서는 이미지 빌드 실행 시간을 최소화하는 것이 중요하다. 따라서 도커 파일을 작성할 때 각 레이어를 작은 단위로 분리하여 효율적으로 캐싱되도록 설계하는 것이 좋다. 하지만 깃헙 액션의 특성상 새로운 환경의 러너를 할당받게 되어 이전 빌드 내용이 남아있지 않아 캐시를 활용할 수 없었다. 도커에 대해 좀 더 공부하다보니 도커에서 캐싱할 수 있는 옵션이 있었다. 이미지 빌드 시에 `--cach-from` 및 `--cache-to`를 사용하여 캐싱을 관리할 수 있다. 지금부터 이러한 옵션을 활용하여 이미지 빌드 시간을 최적화해보자. 캐시 유형 `inline` - 빌드 캐시를 동일한 이미지에 내장하어 레지스트리에 푸시될 때 캐시도 함께 푸시한다. `registry` - 빌드 캐시를 별도의 이미지에 내장..
- [ backend/ci•cd ][CD] health check로 서버 상태 확인하기 (Docker Compose/Shell Script)2024-01-21 19:20:27수정할 게 끝이 없네!! 🤪지난 포스팅에서 블루/그린 무중단 배포를 다뤘다. 하지만 무중단 배포임에도 불구하고 신규 어플리케이션에서 에러가 발생하면 중단된다!! (얼레벌레 무중단 배포,,)이번 포스팅에서는 죽은 어플리케이션으로 트래픽을 전환하지 않도록, 어플리케이션의 상태를 확인하는 과정을 넣어줄 것이다. health check🔗 지난 포스팅- [CD] 블루/그린 무중단 배포 구현하기 1편- [CD] 블루/그린 무중단 배포 구현하기 2편health check는 서비스가 올바르게 작동하는지 확인하는 프로세스다. 장애나 문제를 미리 감지하고 예방할 수 있어 안정성을 향상시킨다.health check의 이점조기 감지 및 대응 : API의 이상을 조기에 감지할 수 있어, 잠재적인 문제를 신속하게 대응할 수 ..
- [ backend/docker ][docker] Docker Compose로 멀티 컨테이너 어플리케이션 만들기 (yaml/volumes)2024-01-16 22:16:12이번엔 도커 컴포즈를 이용하여 멀티 컨테이너 어플리케이션을 만들 것이다. 멀티 컨테이너를 구축하면 서비스별로 컨테이너를 만들기 때문에 각 컨테이너가 한 가지 일만 수행하고, 서로의 리소스에 영향을 미치지 않는다는 장점이 있다. Docker Compose를 사용하는 이유 docker CLI의 단점 결론부터 말하면 도커 CLI는 단일 서비스에 최적화 되어있기 때문에 복잡한 멀티 컨테이너를 다루기엔 적합하지 않다. 도커 컨테이너는 격리된 환경을 가지므로 다른 컨테이너와 통신하기 위해서는 동일한 네트워크에 배치해줘야 한다. 이처럼 멀티 컨테이너를 위한 설정으로 인해 CLI 명령어가 길어지고 복잡해진다. docker CLI로 멀티 컨테이너를 띄울 때의 단점 복잡성 및 가독성 : 네트워크, 볼륨 등 멀티 컨테이너 ..
- [ backend ][etc] graceful shutdown으로 사용자 경험 저하 방지하기 (with docker & nest)2024-01-15 18:26:08UX는 프론트엔드 담당이라고? 백엔드도 할 수 있어 😎 새로운 어플리케이션이 출시되는 등의 이유로 서버를 종료하는 상황을 가정해보자. 사용자의 요청을 처리하는 도중에 서버를 종료하면 어떻게 될까? 사용자는 서버로부터 유의미한 응답을 받을 수 없기 때문에 불편함을 느낄 것이다. 지금부터 모든 요청을 처리한 후에 종료하는 방법을 알아보자! graceful shutdown 난 사실 우아한 종료가 아닌, 우하하 종료를 구현했다 🤪 그레이스풀 종료는 서버가 모든 요청에 대해 응답하고, 더 이상 처리해야 하는 작업이 없을 때 종료하는 것을 의미한다. 혹시 SIGKILL을 보내고 있진 않나요? 그레이스풀 종료를 구현하기 위해서는 몇 가지 유의사항이 있다. 우선, 프로세스를 강제로 죽이면 안된다. (처음엔 SIGKIL..
- [ backend/ci•cd ][CD] 블루/그린 무중단 배포 구현하기 1편 (NGINX/Docker Compose)2024-01-07 18:20:00야 너두 무중단 배포 할 수 있어 🫵이 글은 도커, 엔진엑스, 깃헙 액션을 한 번도 써본 적 없고, 무중단 배포라는 용어도 처음 들어본 사람의 무모한 무중단 배포 도전기다. 제발 나처럼 고생하는 사람이 없길 바라며 삽질을 거름으로 완성한 블루/그린 무중단 배포 도전기를 풀어보겠다. 무중단 배포란?신규 버전의 어플리케이션을 새롭게 배포하는 과정을 가정해보자. 로컬에서는 신규 어플리케이션을 빌드하고, 서버에서는 현재 실행중인 버전을 종료한다. 기존 버전의 종료되면 빌드한 결과물을 서버에서 실행하고, 그 결과 신규 어플리케이션이 배포된다.하지만 해당 방법은 구버전이 종료되고 신규 버전이 실행되기 전까지 사용자가 서비스를 이용할 수 없다는 치명적인 단점이 있다. 이를 보완하고자 서비스의 중단없이 업데이트를 수..
- [ backend/docker ][docker] 캐싱으로 이미지 빌드 속도 향상시키기 (Dockerfile/build/run)2023-12-29 23:40:07앞에서 알아본 도커 개념을 바탕으로 도커 컨테이너에 어플리케이션을 띄워볼 것이다. Dockerfile을 이용하여 이미지를 빌드하고 도커 CLI를 이용하여 컨테이너를 실행시켜보자. Dockerfile 작성하기Dockerfile이란?이미지를 빌드하기 위해서는 Dockerfile을 작성해야 한다. Dockerfile은 이미지를 빌드하기 위한 명령들이 포함된, 파일 확장자가 없는 텍스트 기반의 파일이다.FROM node:20RUN apt-get update && apt-get install -y tiniWORKDIR /app/wasCOPY was/package*.json ./RUN npm installCOPY was .RUN npm run buildCMD ["tini", "--", "npm", "run", "s..
- [ backend/docker ][docker] docker 시작하기 (아키텍처)2023-12-29 00:04:21docker를 공부하다보면 허브, 레지스트리 등 생소한 용어가 많이 등장한다. 허브는 뭐고, 레지스트리는 또 뭐야? docker architecture 도커는 클라이언트-서버 구조를 갖는다. 클라이언트*는 데몬*과 통신하여 도커 컨테이너를 구축하고 실행 및 배포할 수 있다. *docker client (=`docker`) : 도커 사용자가 도커와 상호작용하는 주요 방법이다. *docker daemon (=`dockerd`) : 도커 API 요청을 수신하고 이미지/컨테이너/네트워크/볼륨 같은 도커 개체들을 관리한다. docker registry 도커 레지스트리는 도커 이미지를 저장하고 관리하는 서비스다. 도커 허브가 레지스트리의 한 예로, 누구나 사용할 수 있는 퍼블릭 레지스트리다. 하지만 개인이나 조직이..