DevOps/Docker && Kubernetes
[k8s] 쿠버네티스 도입
[k8s] 쿠버네티스 도입
2023.12.17도커를 사용해 여러 애플리케이션을 배포할 때, 한 컨테이너에 문제가 생겨 종료되는 경우 관리자가 문제를 확인하고 컨테이너를 다시 시작해 줘야 한다. 또, 특정 컨테이너에만 트래픽이 몰리는 경우 역시 관리자가 문제를 확인하고 스케일링 작업을 수행해 줘야 한다. AWS ECS 클라우드를 사용하는 경우 위에서 언급한 문제를 일부 해결해 주지만, 클라우드가 제공하는 기능에 의존적이게 돼 클라우드 변경 시 다른 방법을 찾아야 한다. 이런 문제를 해결하기 위해 Kubernetes가 도입됐다. 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 관리를 자동화하는 오픈소스 시스템으로 배포 환경에 관계없이 어디서든 사용될 수 있다. 1. 확장성 트래픽에 따라 컨테이너 인스턴스를 확장하거나 축소할 수 있고 로드밸런싱을 통..
[Docker] 네트워킹과 Docker Compose
[Docker] 네트워킹과 Docker Compose
2023.12.10도커는 다른 환경으로부터 격리된 환경에서 작동하고, 도커를 통해 만든 애플리케이션을 배포하게 되면 localhost가 더 이상 호스트 머신의 localhost를 의미하지 않게 된다. 백엔드 / 프론트엔드 / 데이터베이스 각 애플리케이션을 도커를 통해 배포했다고 해보자. 로컬에서 도커를 사용하지 않고 배포한 경우 백엔드에서 데이터베이스로 통신할 때 localhost:27017처럼 localhost로 데이터베이스와 연결할 수 있지만, 각 애플리케이션을 도커를 사용해 배포한 경우 컨테이너들은 호스트 운영체제와 독립된 환경에서 동작하기에 localhost 말고 다른 방법으로 접속해야 한다. docker run -p 8000:80 my_image 여기서 -p 8000:80 부분은 호스트 머신에서 사용할 포트 : ..
[Docker] Dockerfile 프로젝트 배포하기
[Docker] Dockerfile 프로젝트 배포하기
2023.12.06FROM node WORKDIR /app COPY . /app RUN npm install EXPOSE 80 CMD ["node" "server.js"] FROM :이미지 빌드를 위한 기반 이미지를 설정하고, 도커는 node라는 이름으로 이미지를 찾는다. WORKDIR : 컨테이너 내부의 작업 디렉토리를 생성한다. 모든 작업은 이 경로에서 실행된다. COPY : (Dockerfile이 위치한 호스트 파일시스템) (컨테이너 내부) / 실행에 필요한 소스코드나 묶음 파일을 복사할 때 사용한다. 도커는 실행 환경을 구축하는 역할도 하지만, 실제로 애플리케이션을 실행할 수 있어야 한다. 마운트를 사용해도 괜찮다. RUN : 이미지 빌드 중 명령어를 실행해 WORKDIR 내부에서 필요한 종속성을 설치한다. EXP..
[Docker] Docker Compose
[Docker] Docker Compose
2023.03.24MSA 처럼 여러 가지 서비스들이 모여서 하나의 애플리케이션을 구성하거나, Frontend / Backend / Database 가 모여서 하나의 애플리케이션을 구성하는 경우에 애플리케이션을 도커로 배포하려면 각각의 서비스들을 컨테이너로 띄워야 한다. 각 서비스들을 띄울 때 docker container run 명령어를 하나씩 실행하고 있자니.. 너무 번거롭고 실수할 확률도 높아진다. 이렇게 여러 서비스들이 합쳐저 애플리케이션을 구성하는 형태의 애플리케이션을 도커로 배포할 때 도커 컴포즈를 사용한다. version: '3.7' services: accesslog: image: diamol/ch04-access-log networks: - app-net iotd: image: diamol/ch04-imag..
[Docker] 도커 파일 시스템과 볼륨
[Docker] 도커 파일 시스템과 볼륨
2023.03.09도커에서 관리되는 컨테이너들은 모두 독립된 파일 시스템을 가진다. 파일 시스템은 단일 디스크이고, 이 디스크는 이미지 레이어와 기록 가능 레이어로 구성된다. 여기서 이미지 레이어는 모든 컨테이너가 공유하지만, 기록 가능 레이어는 컨테이너마다 다르다. 같은 데이터베이스 엔진 이미지로 실행된 두 컨테이너가 전혀 다른 데이터를 담을 수 있는 이유도 바로 이 부분 때문이다. 기록 가능 레이어는 컨테이너와 같은 생애주기를 가지고, 컨테이너가 삭제될 때 함께 삭제되는 방식으로 동작한다. 이미지 레이어를 기록 가능 레이어로 복사한 후 이미지 레이어를 수정하는 방식을 사용하면 읽기 전용인 이미지 레이어도 수정할 수 있다. 컨테이너로 데이터베이스를 실행해서 사용하고 있는데, 데이터베이스 버전을 업데이트한다고 생각해보자...
[Docker] 도커 활용하기
[Docker] 도커 활용하기
2023.03.08도커를 활용하면 다양한 이점을 얻을 수 있다. 크게 세 가지로 나뉠 수 있는데, 예시를 통해 각 요소들을 살펴보자. 1. 회사에서 여러 프로젝트를 진행했고, 프로젝트들마다 개발 환경이 각자 달라서 여러 컴퓨터로 해당 프로젝트를 관리할 경우 각각의 컴퓨터에 프로젝트별로 개발 환경을 설정해 줘야 하는 불편함이 있다. 여기서 도커를 도입해보자. A 프로젝트 : Java7 / MySQL / SpringBoot / Thymeleaf (SSR) B 프로젝트 : (Backend) Java17 / MongoDB (Frontend) Vue.js / Quasar (CSR) C 프로젝트 : Java11 / MariaDB 이런 식으로 프로젝트가 있으면, 한 컴퓨터에서 각각의 프로젝트를 유지보수 해 줄 때 마다 프로젝트별로 다..
[Docker] 도커와 컨테이너 기술
[Docker] 도커와 컨테이너 기술
2023.03.07도커는 컨테이너 기술을 사용해 애플리케이션의 실행 환경을 구축하는 플랫폼이다. 컨테이너는 호스트 운영체제 상에 애플리케이션을 작동시키는데 필요한 요소들을 모아서 별도의 서버인 것 처럼 동작하는 것을 말한다. 컨테이너 기술을 사용하지 않으면 여러 애플리케이션들이 같은 시스템 리소스를 사용하기 때문에 미들웨어나 라이브러리의 버전이 다른 경우는 각 애플리케이션이 서로 영향받을 수 있다. 하지만, 컨테이너를 도입하면? 호스트 운영체제의 리소스를 분리시키고, 여러 컨테이너가 사용해 시스템 리소스를 각 애플리케이션들이 독점적으로 점유하고 있는 것 처럼 보이게 할 수 있다. 도커는 애플리케이션의 실행에 필요한 환경을 이미지로 취합하고, 그 이미지를 활용해 다양한 환경에서 애플리케이션의 실행 환경을 구축한다. 이미지를..
[Docker] 시스템 기초 지식
[Docker] 시스템 기초 지식
2023.03.06본격적으로 도커를 학습하기 전 필요한 지식들을 정리하자. 도커는 리눅스의 기능을 사용한 기술이기에 리눅스 기초 지식도 따로 공부해야 한다. 하드웨어 물리적인 요소로 서버 장비 본체나 데이터센터의 설비를 의미한다. (컴퓨터 본체, 데이터센터 등) 네트워크 시스템의 사용자가 원격으로 액세스 할 수 있도록 서버들을 연결하기 위한 요구사항이다. 운영체제 하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어로 리소르와 프로세스를 관리한다. (윈도우, Unix 등) 미들웨어 운영체제와 업무 처리를 수행하는 애플리케이션 사이에 들어가는 소프트웨어이다. (데이터베이스 서버, 웹 서버 등) MAC 주소 48비트의 주소로 앞 24비트는 네트워크 부품의 제조업체를 식별하는 번호이고, 뒤의 24비트는 제조업체마다 중복되지..