From 85f1bc7aa2a9330067ef8af9ce2f3568070bb3b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=ED=98=84=EC=A7=80?= <86637372+aacara@users.noreply.github.com> Date: Mon, 19 Feb 2024 22:12:24 +0900 Subject: [PATCH] 20240219/docker (#48) --- _posts/2023-12-13-Docker.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/_posts/2023-12-13-Docker.md b/_posts/2023-12-13-Docker.md index b3e8168..54949c0 100644 --- a/_posts/2023-12-13-Docker.md +++ b/_posts/2023-12-13-Docker.md @@ -4,7 +4,7 @@ title: 도커 찍먹하기 author: 김현지 categories: 기술세미나 banner: - image: https://github.com/Kernel360/blog-image/blob/main/2023/1213/docker.png + image: https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/docker.png background: "#000" height: "100vh" min_height: "38vh" @@ -29,22 +29,26 @@ banner: 이는 환경 설정이나 의존성의 문제 때문일 수 있습니다. 따라서 도커를 사용하여 일관된 환경을 구성하고 애플리케이션을 격리하여 테스트하는 것이 중요합니다. -![1](https://github.com/Kernel360/blog-image/blob/main/2023/1213/virtualBox.jpg) +![1](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/virtualBox.jpg) + 일관된 환경을 구성하기 위해 도커는 가상 머신을 사용합니다. 가상 머신은 컴퓨터 하드웨어 리소스의 추상화된 개념으로, 다양한 운영 체제와 애플리케이션을 동시에 실행할 수 있도록 도와줍니다. 가상 머신을 사용하면 개발 환경과 테스트 환경을 동일하게 설정할 수 있습니다. -![2](https://github.com/Kernel360/blog-image/blob/main/2023/1213/hypervisor.png) +![2](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/hypervisor.png) + 가상 머신을 구성하는 과정에서 가상화 기술이 중요한데, 이는 물리적인 컴퓨터 자원을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어내는 기술입니다. 가벼운 보따리인 컨테이너는 이러한 가상화 기술을 더욱 발전시킨 것입니다. 컨테이너는 전체 운영 체제를 포함하지 않고도 애플리케이션을 격리하여 실행할 수 있습니다. -![3](https://github.com/Kernel360/blog-image/blob/main/2023/1213/container.png) +![3](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/container.png) + 도커는 컨테이너 기반의 가상화 도구로, 애플리케이션을 컨테이너 단위로 격리하여 실행하고 배포할 수 있습니다. 이를 통해 애플리케이션을 손쉽게 빌드, 배포, 관리할 수 있습니다. 따라서 도커는 단순히 컨테이너를 실행하는 도구 이상의 플랫폼으로 발전하게 됩니다. ## 도커의 아키텍처 -![4](https://github.com/Kernel360/blog-image/blob/main/2023/1213/dockerArchitecture.png) +![4](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/dockerArchitecture.png) + 도커의 아키텍처는 각각 특별한 역할을 하는 구성요소들로 이루어져 있습니다. 그 중 핵심 구성 요소는 **도커 엔진**입니다. 이번에는 도커 엔진에 대해 자세히 살펴보겠습니다. @@ -58,7 +62,8 @@ banner: 세 번째로, **도커**는 도커 CLI 요청이 도커 데몬과 통신하기 위해 자체적인 API를 제공합니다. -![5](https://github.com/Kernel360/blog-image/blob/main/2023/1213/clientServerArchitecture.png) +![5](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/clientServerArchitecture.png) + 이러한 클라이언트와 서버 아키텍처를 다시 한 번 살펴보면, 사용자가 `docker run`, `docker build`, `docker pull`과 같은 요청을 보내면 이것들은 도커 호스트의 데몬에서 처리됩니다. 이 과정에서 데이터 볼륨, 네트워크 관리, 도커 이미지 생성, 그리고 이미지를 통해 컨테이너를 생성하는 작업이 수행됩니다. 각 작업마다 엔드포인트가 있으며, 따라서 도커는 많은 엔드포인트를 가지고 있습니다. @@ -71,7 +76,8 @@ banner: 반면에, **컨테이너**는 도커 이미지의 인스턴스로, 이미지를 실행한 상태입니다. 클래스 파일을 실행하여 여러 개의 객체(인스턴스)를 생성하는 것과 비슷하게, 도커 이미지로부터 여러 개의 컨테이너를 생성할 수 있습니다. -![6](https://github.com/Kernel360/blog-image/blob/main/2023/1213/dockerFile.png) +![6](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/dockerFile.png) + 이러한 개념을 이해하기 위해 **도커 파일**이 등장합니다. 도커 파일은 도커 이미지를 빌드하기 위한 지침서로, 이미지를 어떻게 구성할지를 정의합니다. 즉, 도커 파일은 이미지의 빌드 과정을 자동화하고 이미지가 어떻게 구성되는지를 명시합니다. @@ -100,12 +106,15 @@ banner: **컨테이너 오케스트레이션**은 여러 대의 서버를 클러스터로 만들어 자원을 병렬로 확장하는 것을 의미합니다. 이를 위해 도커에 내장된 도커 스웜을 소개하겠습니다. -![7](https://github.com/Kernel360/blog-image/blob/main/2023/1213/dockerSwarm.png) + +![7](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/dockerSwarm.png) + **도커 스웜**은 컨테이너 수를 동적으로 조절하여 로드 밸런싱 기능을 수행합니다. 그러나 사용자가 인스턴스의 개수를 수동으로 조절하는 스케일 아웃 방식을 사용하기 때문에 수작업이 필요합니다. 도커 스웜은 매니저 노드와 워커 노드로 구성되어 있으며, 매니저 노드는 워커 노드의 기능을 수행하면서 관리도 함께 합니다. -![8](https://github.com/Kernel360/blog-image/blob/main/2023/1213/kubernetes.png) +![8](https://raw.githubusercontent.com/Kernel360/blog-image/main/2023/1213/kubernetes.png) + 또 다른 컨테이너 오케스트레이션 방법으로 **쿠버네티스**를 소개할 수 있습니다. 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 및 운영을 자동화합니다. 도커 스웜보다 더 정교한 자동화를 가능하게 해주며, 서비스의 복제 수를 자동으로 조절할 수 있습니다.