https://www.udemy.com/course/docker-kubernetes-2022/ 자체 EC2 인스턴스 관리의 부담을 덜기 위해 클라우드 서비스 프로바이더 기술을 사용한다. 이번 시간에는 AWS ECS를 활용한 프로덕션 환경 구성에 대해 알아본다.ECS 아키텍쳐, 개념ECS는 AWS의 컨테이너 오케스트레이션 도구로, 다음 4가지 계층으로 구성된다. 개념설명역할Cluster컨테이너가 실행되는 논리적 네트워크 공간인프라의 경계 (VPC 설정 등)Service테스크의 실행 관리자 (Auto Scaling, 로드 밸런싱)n개 테스크 유지와 같은 역할을 수행Task Definition애플리케이션의 블루프린트- Docker Image, CPU/RAM, Envdocker-compose.yml과 유사한 역..
Infra/Docker
컨테이너 배포 (Deployment)왜 배포에 컨테이너를 사용하는가?컨테이너는 애플리케이션 코드와 실행 환경을 하나의 독립적인 패키지로 묶어준다.도커가 설치된 곳이라면 어디서든 동일하게 실행 가능로컬 머신에서 작동하는 코드가 리모트 머신에서도 그대로 작동머신 자체에 NodeJS 같은 도구를 직접 설치할 필요 없음 (컨테이너 내부에 모두 포함)핵심 아이디어는 아래와 같다.로컬에서 작동하면, 배포 후에도 작동한다개발 vs 프로덕션1. 바인드 마운트개발: 바인드 마운트를 많이 사용 (코드 변경 즉시 반영)프로덕션: 바인드 마운트를 사용하면 안 됨2. 빌드 단계React 앱 같은 경우, 배포 전에 코드 변환 및 최적화를 위한 빌드 단계가 필요개발과 프로덕션에서 다른 설정이 필요할 수 있음3. 다중 컨테이너 프로..
사실 이전에 멀티 컨테이너 애플리케이션 환경을 다뤄봤지만, Docker network를 정리하면서 다시 다룬다. 실제 애플리케이션을 개발하다 보면 하나 이상의 컨테이너가 필요한 경우가 많다. 두 가지 주요 이유관심사 분리 (Separation of Concerns)각 컨테이너는 하나의 주요 작업에 집중하는 것이 좋은 관행예: 웹 서버 실행, 데이터베이스 실행, 캐시 서버 실행 등을 각각 분리구성의 복잡성하나의 컨테이너에서 여러 "주요 작업"을 수행하도록 설정하는 것은 매우 어려움예: 웹 서버 + 데이터베이스를 한 컨테이너에서 실행하는 것은 비현실적 통신의 필요성멀티 컨테이너 환경에서는 통신이 필수적이다.컨테이너끼리 통신컨테이너와 호스트 머신 간 통신컨테이너와 외부 인터넷(WWW) 간 통신통신 방법(3가지..
이미지와 컨테이너의 근본적인 차이를 앞에서 봤었다. 이미지(Image)의 특성이미지는 완전히 읽기 전용(Read-only)이다한 번 빌드된 이미지는 절대 변경되지 않는다이미지를 업데이트하려면 Dockerfile을 수정하고 완전히 재빌드해야 한다이는 이미지의 불변성(Immutability)을 보장하여 일관성을 유지하는 데 도움이 된다컨테이너(Container)의 특성컨테이너는 이미지 위에 얇은 "읽기-쓰기 레이어(Read-Write Layer)"를 추가한다이 레이어 덕분에 컨테이너는 파일을 읽고 쓸 수 있다컨테이너 내부에서 파일을 생성, 수정, 삭제할 수 있지만, 실제 이미지는 변경되지 않는다즉, 여러 컨테이너가 동일한 이미지를 공유하면서도 각자 독립적인 파일 시스템 변경을 가질 수 있다 도커 컨테이너는 ..
지난번 Image / Container가 UnionFS를 이용해 어떻게 레이어을 구성하는 지도 봤고 이를 통해 docker run을 했을 때 내부에서 어떻게 구현되는 지도 간단히 살펴봤다. 오늘은 이 핵심 요소 이미지, 컨테이너에 대한 정의와 명령어들에 대해 알아본다.Image이미지는 컨테이너를 위한 blueprint, 템플릿이다. 특징읽기 전용(Read-only)이며, 애플리케이션뿐만 아니라 필요한 환경(OS, 런타임, 도구 등)을 모두 포함한다.이미지 자체는 실행되지 않으며, 컨테이너로서 실행되어야 한다.생성 방식DockerHub 등에 있는 공식 이미지를 사용하거나, Dockerfile을 정의하여 직접 빌드할 수 있다.Dockerfile 명령어들은 이미지 빌드 시 실행되며, 각 명령어는 하나의 레이어..
이전 글에서 namespace와 cgroup에 대해 알아보았다.namespace: 격리cgroup: 제한그런데 이 둘만으로 Docker에서 사용되는 Container처럼 구현할 수는 없다.컨테이너는 화물 컨테이너처럼 환경을 통째로 가져오는 기술이다. 따라서 실행 환경 설치를 하지 않고 바로 실행할 수 있다. 내가 처음 Docker에서 Container에 대해 설명을 들었을 때 화물 컨테이너라는 비유를 들었던 게 기억이 난다. namespace / cgroup은 프로세스를 가두고... 제한하는 기술이다. 그렇다면 환경을 통째로 가져온다 이건 어떻게 구현할 수 있을까?Union FS포토샵 레이어를 떠올려보자.[레이어 3] 텍스트 "Hello"[레이어 2] 빨간 원[레이어 1] 배경 이미지-----------..
이전 글에서 namespace로 프로세스를 격리하는 방법에 대해서 알아봤다. 하지만 마지막에도 언급했듯이 격리된 프로세스만으로는 부족한 점이 몇가지 있다.CPU를 100% 점유하는 나쁜 녀석들메모리를 무한정 먹어버리는 이상한 녀석들그럼 착한 녀석들로 만들어주기 위해선 어떻게 해야될까? 이 문제를 해결하는 게 cgroup이다.cgroup?namespace가 '뭘 볼 수 있는가'를 제한한다면, cgroup은 '얼마나 쓸 수 있는가'를 제한한다. cgroup은 Control Groups의 약자로, 프로세스 그룹의 리소스 사용량을 제한, 계량, 격리하는 리눅스 커널 기능이다. cgroup이 제어하는 리소스컨트롤러설명cpuCPU 시간 할당량 제한 -> 전체의 50%만 써cpuset특정 CPU 코어만 사용하도록 ..
docker는 어떻게 내 컴퓨터 안에서 또 다른 OS가 독립적으로 돌아가도록 할 수 있을까? image를 통해 여러 container들을 만들어보면서, 신기하다... 밖에 생각을 안했다. 컨테이너는 VM처럼 하드웨어를 가상화하는 게 아니다. 리눅스 커널의 기능을 이용해 프로세스를 격리하고, 제한하는 기술을 기반으로 한다. 이 기능은 namespace, cgroup + union fs를 메인으로 한 기술들을 통해 이루어진다. 오늘은 namespace에 대해 알아본다. (사실 다 하려했다가 분량이 넘 길어져서 컷함 ^^7) https://bentist.tistory.com/73 가상화, 도커 의미(이미지와 컨테이너)도커가 필요한 이유는 무엇인가? 내가 만든 파워포인트 문서를 다른 컴퓨터에서 열었을 때, 글꼴..
왜 티스토리는 기본모드에서 yaml 코드블록을 지원하지 않는가..[물론 마크다운으로 하면 되는데 그러면 설정이 깨짐;;] 지난 포스팅에서는 docker-compose를 이용해 Node.js + React 개발 환경을 도커로 구성했다. 그런데 사실 Node.js는 도커 없이 직접 설치한다고 해도 그렇게 어렵지는 않다. 하지만 PHP, Laverel은 이야기가 조금 다르다.PHP는 Interperter일 뿐이다. PHP 혼자서는 HTTP Request를 처리할 수 없다.웹 서버가 별도로 필요하다. Nignx, Apache 같은 웹 서버가 요청을 받아 PHP에게 넘겨줘야 비로서 코드가 실행된다.설치 과정이 복잡하다. 만약 PHP + Nginx + MySQL을 각각 버전에 맞춰 설정한다고 해보자.나 혼자 컴퓨터..
유틸리티 컨테이너란 무엇인가? 기존 애플리케이션 컨테이너를 기억해보자.애플리케이션 코드 + 실행 환경이 포함된다.Dockerfile을 빌드하고 docker run으로 실행하면 애플리케이션이 시작된다.Node API, React SPA, DB 등유틸리티 컨테이너란?정식 명칭은 아니다.다만 특정 환경만 포함하는 컨테이너다. (etc: Node.js, PHP, Python 등)애플리케이션을 시작하지 않고, 특정 작업/명령을 실행하기 위해 사용한다.이미지 이름 뒤에 실행할 명령을 추가하는 방식이다.왜 사용하는가?아래와 같은 상황을 생각해보자. 새 프로젝트를 시작할 때를 기준으로 한다.Node.js 프로젝트 생성 시 npm init 명령이 필요하다.하지만 npm은 Node.js가 설치되어 있어야만 사용 가능하다...