본문 바로가기

내용 복습/devOps

(7)
Error response from daemon: mkdir /var/lib/docker/overlay2/...-init: no space left on device ec2 인스턴스에 오랜만에 ssh로 접속하여 서버를 띄우려 했더니 위의 에러가 발생했다. 분명 보름전에 띄웠을 땐 접속이 잘 되었는데, 어디가 문제인지 몰라서 구글링해보니 ec2 용량이 없다는 것이다. 보는 강의나 책마다 이미지와 컨테이너 관리를 왜 그렇게 신경쓰나 했더니 이렇게 금방 용량이 다 차는 모양이다. 프리티어로 t2.micro이니 그럴만도 한데, 해결을 하려니 막막했다. 하긴 ec2에 프로메테우스와 jenkins, grafana까지 모두 띄워놨으니 로그만해도 엄청날 것이라 생각이 들었다.  1. sudo apt-get autoremove일단 구글링으로 찾은 이 명령어는 apt-get한 패키지를 삭제하는 것인데, nginx를 띄우기 위해 무분별하게 설치했던 것이 떠올라 실행해봤다. 하지만 아래의..
'도커 교과서' 1~2장 정리 도커를 공부하게 된 이유node.js로 반년정도 공부하면서 배포도 병행해왔지만, 기반 지식 없이 구글링만으로 이어가다보니 문제가 발생해도 어디가 문제인지 전혀 알수 없었기에 모래성을 쌓는 느낌이었습니다. 이번 기회에 도커를 처음부터 배워보겠습니다. 1. 컨테이너가 IT 세상을 점령한 이유기존에는 클라우드 환경으로 이주하려면 IaaS(서비스로서의 인프라)와 PaaS(서비스로서의 플랫폼) 두가지 선택지가 있었다. 전자는 애플리케이션의 각 컴포넌트를 가상 머신에서 동작시키게 된다. 특정 클라우드에 종속되는 신세는 면할 수 있지만 운영비가 상승하고, 후자는 각 컴포넌트를 하나씩 클라우드의 managed service로 옮기는 까다로운 프로젝트를 진행해야 하지만 운영비는 절감할 수 있었다.도커는 앞에서 언급된 단..
도커를 이용해 Containerize하는 과정 1. host.docker.internal로 컨테이너 포트 매핑 하는 법 레디스를 운영체제에 설치해서 실행하는 방법과 별도의 컨테이너에 레디스 이미지를 받아 띄우는 방법이 있는데, 하나의 컨테이너 안에 가급적 하나의 프로세스를 두고 쓰는 것이 바람직하다. 데이터 일관성 문제와 컨테이너의 추가/삭제가 쉽기 때문이다. 이 방법을 택하려면 레디스 컨테이너를 띄워놓고 포트매핑으로 부모 호스트 머신에 링크를 걸어주는 식으로 사용한다. 이때 express app에서 나오는 6379는 host IP라고 지칭한다. .env의 REDIS_URL을 redis://host.docker.internal:6379로 변경하면 된다. 그러면 부모 호스트 머신에서 이 주소를 발견하면 자동으로 연결할 수 있다. 포트매핑과 비슷하지만 ..
Docker 개념 알아보기 - Dockerfile, Image, Container 1. 도커의 기초도커는 우리의 소스코드를 컨테이너화해서 배포할 수 있게 해주는 툴이다. 여러 특징이 있는데, snapshot: 컨테이너가 아닌 배포방식의 스냅샷과 같은 역할을 할 수 있다.resource control: 어느정도의 리소스(CPU, ram)을 사용할 지 지정할 수 있다.can run anyhwhere: 어디서든지 도커만 있으면 컨테이너를 실행할 수 있다.zero setup: 컨테이너의 설정을 그대로 들고오기 때문에 설정이 필요없다.lightweight: 리눅스 커널을 공유하고 도커파일에 설정한 대로 흉내만 내는 것이기에 VM에 비해 부팅시간, 수정시간을 절약할 수 있다.PM2 for any language: 언어에 관계없이 도커라이즈만 할 수 있다면 PM2의 기능을 대체할 수 있다.  도커..
Github Actions - CICD CICD는 지속적 통합(Continuous Integration) 및 지속적 제공/배포(Continuous Delivery/Deployment)를 의미하며, 소프트웨어 개발 라이프사이클을 간소화하고 가속화하는 것을 목표로 한다. 툴은 github actions, Jenkins, argo CD 등이 있는데 이번에는 간편한 깃액션으로 해보려고 한다. 아래는 코드 배포 자동화 과정을 나타낸 그림이다. 골자는 develop 브랜치에 모은 코드들을 메인 브랜치에 푸쉬하면 깃헙 액션에서 AWS code deploy를 통해 배포되는 것이다. 이전 프로젝트에서 다른 분이 하신 것을 본 적 있는데, 확실히 초기설정만 잘 해놓으면 배포에 신경쓰지 않아도 되서 개발속도가 빨라지는 것을 느꼈다. 그리고 github actio..
AWS 기초 - https 쓰는 방법 일반적인 가상 서버에 배포하는 방식은 아래 그림과 같다. HTTPs는 표준이 되었는데, 그 이유는 encrypt된 데이터를 주고 받기 때문에 보안이 좋고, 검색엔진 노출(SEO)의 측면에서도 더 뛰어난 성능을 가지기 때문이다. 그렇기에 요즘 배포를 한다면 https로 하는 것이 기본이 되었는데, 지난 프로젝트에서 적용하는 데에 애를 먹어서 정리해보려고 한다. HTTPs는 443포트로 들어오는데, Node App내부에 설치하는 방법도 있고, Nginx를 이용해서 할 수도 있지만, 더 쉽고 사실상 서버배포시 필수적으로 필요한 로드밸런서를 이용한 방법을 알아보고자 한다.  443포트를 단순히 열어주는 것에 그치는 것이 아니라 인증서를 발급받아서 설정해줘야한다. 오히려 다른 방법들이 더 어렵고 불편할 수 있기에..
[AWS] EC2 개요 1. AWS 클라우드란 AWS는 Amazon Web Services의 약어로, 아마존닷컴이 제공하는 클라우드 컴퓨팅 플랫폼입니다. AWS는 전 세계에 분산되어 있는 데이터 센터에서 고객에게 IT 인프라를 제공하며, 이를 사용하여 고객은 필요한 인프라를 빠르고 쉽게 설정하고 관리할 수 있습니다. 주요서비스는 EC2(컴퓨팅), RDS(데이터베이스), 스토리지(S3), 네트워킹(VPC), 보안(IAM) 등이 있다. 과제를 위해 EC2 배포를 기계적으로 해 오면서 개괄적인 정리가 필요하다고 느끼던 참이라 이번 기회에 AWS의 기능들을 하나하나 알아가보려고 한다. Onpremise는 서버가 조직 내부에 설치되고 유지보수 되는 것. 조직의 물리적인 위치에 있으며 조직의 IT 인프라를 관리하는 팀이 해당서버를 관리,..