Node.js 컨테이너 종료가 느릴 때 먼저 볼 graceful shutdown 기준배포 버튼을 눌렀을 뿐인데 몇 초 동안 502가 튑니다. 로그에는 에러가 많지 않고, 새 컨테이너도 정상으로 떠 있습니다. 그런데 사용자 입장에서는 방금 누른 저장 버튼이 실패했고, 운영자는 "배포 중 잠깐 그런 것 같다"는 애매한 말만 남깁니다.이런 문제는 보통 배포 도구만 바꿔서는 사라지지 않습니다. 컨테이너가 내려갈 때 애플리케이션이 어떤 순서로 요청을 멈추고, 남은 일을 끝내고, 프로세스를 종료할지 정해져 있어야 합니다. Node.js 서버라면 SIGTERM을 받고도 계속 새 요청을 받는지, server.close() 이후 오래 붙은 연결을 어떻게 다룰지, readiness가 먼저 내려가는지부터 확인해야 합니다.나..
홈서버나 개인 프로젝트에 도커 컨테이너를 여러 개 띄워두면 이미지 업데이트를 챙기는 게 일이 된다. docker pull 하고 컨테이너 지우고 다시 띄우는 걸 컨테이너 수만큼 반복해야 한다.이걸 자동으로 해주는 게 Watchtower다.실행docker run -d \ --name=watchtower \ -e TZ=Asia/Seoul \ -v /var/run/docker.sock:/var/run/docker.sock \ --restart=always \ containrrr/watchtower --cleanup각 옵션의 의미는 이렇다.-v /var/run/docker.sock:/var/run/docker.sock : 호스트의 도커 소켓을 마운트해서 다른 컨테이너를 제어할 수 있게 한다. Watcht..
ECS Fargate로 컨테이너를 운영하면서 정리한 순서와 개념이다. 서버를 직접 관리하지 않고 컨테이너만 올리면 되는 게 Fargate의 핵심이다.CODE 영역Dockerfile 생성buildspec.yaml 작성AWS 영역 준비 순서클러스터 생성리포지토리(ECR) 생성작업 정의(Task Definition) 생성보안 그룹(SG) 생성Application Load Balancer 생성 (미리 해둬야 편함)Target Group 생성 (로드밸런서 생성할 때 미리 생성, 필수는 아님)서비스 및 작업 생성ALB를 먼저 만들어두라는 게 실무 팁이다. 서비스를 생성하는 화면에서 ALB를 고르게 되는데, 그 자리에서 새로 만들려면 화면을 왔다 갔다 해야 한다.서비스와 작업의 차이서비스는 항상 돌아가는 개념작업(T..
# 도커로 PHP 개발환경 만들기 # 목표- PHP 로 index.php에서 단순히 hello world로 찍기 위해서는 할 것이 많습니다. 거기에 DB에 redis라도 설치하면 하루를 뚝딱 넘기기도 합니다.물론 요즘은 wamp 나 오토셋 같은 툴들이 있어서 한번에 처리하는 방법도 있지만 요즘 트렌드에 맞게, 도커를 활용하여서 구축해보려고합니다.- 이번에 도커로 만들 개발환경은 laravel5.6 최소사양 + redis + memcached + mysql5.7 입니다. # 구조대부분의 개발환경을 보면 한 폴더안에 제작중인 PHP 프로젝트들을 몰아놓고 개발하실 것입니다.ex) 프로젝트1 프로젝트2가 있다면root folder - prj1 - prj2이런식의 구조- 하나의 docker-compose 로 모든..
