Infra(14)
-
[Docker in Action] Working with storage and volumes (2)
Shared mount points and sharing files 여러 개의 컨테이너에서 동일한 File Set(set of files)을 공유할 수 있도록 하는 기능은 매우 유용합니다. 파일 공유는 이전 포스팅에서 설명한 "Bind Mounts"와 "Docker Volume"의 2가지 방법을 통해 사용할 수 있습니다. Bind Mounts 다음 명령어를 순차적으로 실행해보겠습니다. // Host Machine에 디렉터리를 생성합니다. LOG_SRC=~/web-logs-example mkdir ${LOG_SRC} // plath 라는 이름의 컨테이너를 실행합니다. // Host Machine의 path와 컨테이너의 path를 바인딩합니다. // 로그를 기록합니다. docker run --name pla..
2022.04.23 -
[Docker in Action] Working with storage and volumes (1)
Overview 도커 컨테이너를 통해 애플리케이션을 운영하다 보면, "데이터"를 적절하게 관리할 방법 이 필요합니다. 이를테면 데이터베이스 인스턴스를 컨테이너 안에서 동작시키는 상황에서 인스턴스나 호스트 머신에 문제가 생겨서 데이터베이스 컨테이너를 내려야 하거나, 업데이트를 위해 컨테이너를 재시작해야 한다면, 그러한 경우에도 불구하고 기존에 저장되어 있던 데이터는 유지되어야 합니다. 또한 여러 개의 웹 애플리케이션을 운영하는 경우, 모니터링이나 성능 최적화 등을 위해 다양한 로그들을 남겨야 할 텐데 마찬가지로 이 로그들은 컨테이너가 내려갈 때 같이 사라져서는 안 되기 때문에 별도의 관리 방법이 필요할 것입니다. 이번 포스팅에서는 도커가 파일 시스템을 다루는 방법들을 살펴봄으로써, 실제로 데이터를 어떻게 ..
2022.04.23 -
[Docker in Action] Running Software in containers (2)
Eliminating metaconflicts: Building a website farm 이전 포스팅에서 도커가 Process Namespace를 통해 프로세스를 격리시켜 컨테이너 안에서 동작하는 소프트웨어 간의 의도치 않은 충돌(conflicts)을 방지한다는 것을 살펴보았습니다. 하지만 컨테이너 간의 프로세스가 잘 격리되더라도 컨테이너의 이름과 같은 "metadata"끼리 충돌이 발생할 가능성이 여전히 존재하며, 이를 "metaconflicts" 라고 합니다. 예를 들어, 이전 포스팅에서 살펴보았던 Web, Mailer, Watcher(Agent) 구조에서 Web과 Watch를 Scale up 하는 경우, 각각의 컨테이너는 동일한 이름을 가질 수 없습니다. 컨테이너를 관리하기 위해서는 특정 컨테이너..
2022.04.10 -
[Docker in Action] Running Software in containers (1)
Controlling containers: Building a website monitor 이번 포스팅에서는 아래와 같은 웹 서비스 구조를 Docker Container를 통해 설계해보며, Docker Container에 대한 이해도를 높여보려고 합니다. 아래의 서비스 구조는 다음과 같이 동작합니다. NGINX 이미지로부터 컨테이너를 생성합니다. 이 컨테이너에서 웹 서비스를 호스팅 합니다. NGINX 컨테이너에 문제가 생긴 경우 (Service Down) Watcher Agent는 이를 감지하고 있다가 mailer에게 알려줍니다. mailer는 컨테이너에 문제가 생겼다는 사실을 Watcher Agent로부터 받아서 관리자의 계정으로 메일을 보냅니다. Creating and starting a new co..
2022.04.09 -
[Docker in Action] Welcome to Docker
What is Docker? 도커는 프로그램을 빌드하고, 저장하고, 실행하는 방법을 제공하는 오픈소스 프로젝트로, 컨테이너(container)라는 OS Technology를 사용해서 안전하고 가벼운 프로그램 런타임 환경을 제공합니다. Hello World 각 OS환경에 맞는 도커를 설치한 뒤에, CLI(Command Line Interface)에 아래와 같은 명령어를 입력하면, 다음과 같이 여러 개의 레이어를 다운로드한 후에, "hello world"라는 문장을 출력하고 프로그램이 종료되는 것을 확인할 수 있습니다. 실제로 어떤 일이 일어나고 있는지를 조금 더 자세히 살펴보겠습니다. docker run dockerinaction/hello_world "docker run"이라는 명령어는 Docker에게 ..
2022.04.05 -
[Kubernetes in Action] Managing pods' computational resources
Requesting Resources for a pod's containers 파드를 생성할 때, 각각의 컨테이너가 얼마만큼의 CPU 리소스와 메모리를 사용할지를 명시할 수 있습니다. 쿠버네티스에서 CPU와 메모리 자원은 컨테이너 단위로 명시되며, 파드의 리소스는 파드 내의 컨테이너에서 사용되는 리소스들의 합으로 정의됩니다. 리소스는 request와 limit을 통해서 설정할 수 있습니다. request는 컨테이너가 필요로 하는(최소) CPU와 메모리의 양을 설정하는 것이고, limit은 컨테이너가 최대로 사용할 수 있는 CPU와 메모리의 양을 설정하는 것을 의미합니다. Creating pods with resource requests request를 갖는 파드는 다음과 같이 생성할 수 있습니다. api..
2022.02.12