DevOps33 [Kubernetes] 쿠버네티스 핵심 개념 이번 글에서는 minikube를 사용하고, kubectl을 설치하여 우리의 Cluster에 명령을 전달할 것이다. ▶ Minikube Minikube는 로컬 머신에 VM을 만들고 하나의 노드로 구성된 간단한 Cluster를 배포하는 간단한 쿠버네티스 구현체이다. 연습용으로 사용하기 적당하다고 한다. ▶ Kubectl Kubectl은 우리의 Cluster의 Master 노드로 명령을 보내는 도구이다. Master 노드로 명령을 보내면 그 산하의 Worker노드들이 기능을 수행하게 될 것이다. 이에 대한 설치 글은 다음 글을 참고해보자! macOs m1 환경에서 Kubernetes 시작하기(feat. Docker) - kubernetes 개발환경과 운영환경의 구축 방식이 다름을 이해할 수 있다. - mac.. DevOps/Kubernetes 2022. 10. 13. [Kubernetes] 쿠버네티스 기초 AWS를 통해 컨테이너를 배포하기 위해 ECS를 사용했었는데, 이러한 방식은 좋기는 하지만 다른 벤더(ex Azure, GCP)에서는 동일한 방식으로 사용할 수가 없습니다. 이는 특정 벤더에 종속되는 방식으로 사용해야 하기 때문입니다~! 물론 계속 AWS만 사용하면서 ECS에 적응한다면, 그것만으로도 좋은 방식이기는 합니다. 다만, Kubernetes를 사용하게 된다면 이러한 문제를 해결할 수 있게 됩니다. 1. Kubernetes 란? 우선 공식 홈페이지에는 다음과 같이 설명되어 있습니다. open-source system for automating deployment, scaling, and management of containerized applications. Kubernetes로 배포하는 방식.. DevOps/Kubernetes 2022. 10. 12. [Docker] Multi-stage build(멀티스테이지 빌드) 애플리케이션 개발 시에 개발 환경에서 사용한 라이브러리나 개발 지원 툴이 제품 환경에서 반드시 사용되는 것은 아니며, 제품 환경에는 애플리케이션을 실행하기 위해 최소한으로 필요한 실행 모듈만 배치하는 것이 컴퓨팅 리소스를 효율적으로 활용할 수 있다는 점에서 보안 관점으로 볼 때 바람직합니다. 이럴때 멀티스테이지 빌드를 사용하게 됩니다. 1. 멀티스테이지 빌드란? 컨테이너 이미지를 만들면서 빌드할때는 필요하지만, 최종 컨테이너 이미지에는 필요 없는 환경을 제거할 수 있도록 단계를 나누어 기반 이미지를 만드는 방법 위의 그림처럼 컨테이너 RUN PHASE에는 빌드에 사용한 파일 및 디렉토리과 같은 의존 파일들이 모두 삭제된 상태로 컨테이너가 실행되게 됩니다. 이를 Dockerfile을 통해 확인하면 다음과 .. DevOps/Docker 2022. 10. 11. [AWS] ECS를 통한 컨테이너 배포 with Docker hub 이번 글에서는 Amazon의 ECS를 사용해보고 정리하게 될 것이다. 1. ECS 기본 ECS는 4가지 범주로 나뉠 수 있습니다. 1) 클러스터 2) 컨테이너 3) 태스크 4) 서비스 1 - 1) 컨테이너 이 중에서 컨테이너부터 정의해보도록 하겠습니다! 우선 custom 컨테이너를 하나 정의해봅시다. 여기서는 "docker run"을 실행하는 방법에 대하여 정의하게 됩니다. 만약 local 환경이었다면 다음과 같이 명령을 전달했을 것입니다. docker run --name node-demo -p 80:80 이를 컨테이너 편집 창에서 작성하면 다음과 같습니다. (참고로 이미 도커 허브에 배포하고 싶은 이미지를 public으로 업로드한 상태입니다!) 컨테이너 이름을 설정하고, 이미지 주소에는 docker h.. DevOps/AWS 2022. 10. 9. [Docker] 유틸리티 컨테이너 유틸리티 컨테이너는 사실 공식용어는 아니라고 합니다. 원래는 애플리케이션 자체를 컨테이너에 담아 실행시켰다면, 유틸리티 컨테이너는 특정 환경만 포함하는 컨테이너를 의미합니다. 1. 유틸리티 컨테이너 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 예를 들어 local 환경에 node가 설치돼있지 않다면 애플리케이션을 실행할 수 있을까요? 또한 node는 pacakage.json을 통해 종속성 관리를 하는데, 보통 npm init 같은 명령어를 통해 초기화하여 사용합니다. 하지만 우리의 환경에 node.js가 설치되있지 않다면 어떻게 사용할까요? 이런 경우 유틸리티 컨테이너를 통해서 실행환경만 이용하면 된다! ▶ -it -d 우선 몇가지 명령어에 대하여 살펴봅시다. dock.. DevOps/Docker 2022. 10. 1. [Docker] 도커 컴포즈 (Docker Compose) 이번 글 에서는 도커 컴포즈를 통해 좀더 편리하게 컨테이너를 관리해보자! 1. Docker Compose " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 도커 컴포즈는 여러 명령어들을 모아둔 자동화 설정의 명령집합(Orchestration) 입니다. 하나의 명령 집합을 통해 모든 컨테이너를 실행할 수도, 멈출수도 있는거죠!~ 도커 컴포즈가 Dockerfile을 대신하는 것 은 아니며, 이미지나 컨테이너를 대체하는 것 또한 아닙니다. 또한 여러 host가 있는 상황보다는 단일 host 상황에서 여러 컨테이너를 관리할때 도커 컴포즈가 유용합니다. 기본적으로 터미널 상에서 run, build를 할때 옵션으로 주던 모든 명령을 도커 컴포즈를 통해서 사용할 수 있습니다. 1 - 1.. DevOps/Docker 2022. 9. 29. [Docker] 다중 컨테이너 구성 이번에는 MongoDB, NodeJS Server, React를 각각 컨테이너로 만든 후, 이들이 서로 소통하여 진행되도록 만들어 봅시다! 1. 컨테이너화 시키기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 1 - 1) MongoDB 컨테이너화 docker run --name mongodb --rm -d -p 27017:27017 mongo "mongodb"라는 이름으로 컨테이너를 생성하며, 컨테이너 종료시 자동 소멸되고, port는 27017로 개발하였다. 1 - 2) Node.js 컨테이너화 우선 우리가 만든 간단한 애플리케이션을 Dockerfile을 통해서 이미지로 build 합시다. FROM node WORKDIR /app COPY package.json . R.. DevOps/Docker 2022. 9. 28. [Docker] 컨테이너 통신 컨테이너의 통신은 어떤 대상과 통신을 하는지 기준으로 3가지 방식이 있다. 1. 컨테이너 web(WWW) 2. 컨테이너 host machine 3. 컨테이너 컨테이너 각각의 방식에서 어떻게 해야 통신을 할 수 있는지 알아보자! 1. 컨테이너와 Web의 통신 사실 이 방식은 너무 간단해서 정리할 점이 적다. 예를 들어 다음과 같이 컨테이너 내부의 애플리케이션에서 인터넷으로 요청을 보내는 코드가 있다고 해보자. get('https://some-api.com/shine-info').then(...) 이 경우 특별한 조치 없이도 Web과 소통이 가능하다. 아무런 문제없이 실행 중인 컨테이너 내부의 애플리케이션에서 외부의 WWW으로 request를 보내고, response를 반환받을 수 있다. 2. 컨테이너와 H.. DevOps/Docker 2022. 9. 18. [Docker] 도커의 환경변수 설정 이번 글에서는 도커에서 환경변수를 설정해주는 방법에 대하여 정리해보려 한다! 1. 환경변수 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 도커는 build-time 인수와 runtime 환경변수를 지원합니다. 1 - 1) 환경변수 환경변수는 Dockerfile 안에서 사용할 수가 있습니다. Dockerfile 내부의 'ENV' 옵션을 통해서 우선 환경변수를 선언한 후, 이후 "docker run"을 실행할 때 "--env"옵션 또는"--env-file"을 통해서 변수에 값을 설정할 수 있습니다. 다음과 같은 server.js 파일이 있다고 해봅시다. 도커 내부에서의 port번호를 조금 더 유동적으로 지정하고 싶은 상황입니다. ▶ server.js // 생략... app... DevOps/Docker 2022. 9. 15. [Docker] Volumes과 Bind Mounts 이번에 학습하게된 Volume과 Bind Mounts는 뭘랄까... 쉬운것 같으면서도? 기억할 옵션들이 많은 느낌이랄까?... 정리를 좀 해놔야 겠다... Docker 컨테이너(container)에 쓰여진 데이터는 기본적으로 컨테이너가 삭제될 때 함께 사라지게 됩니다. Docker에서 돌아가는 많은 애플리케이션이 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 저장을 해야하는 경우들이 빈번합니다. 또한, 컨테이너가 host의 file system이 상호작용을 해야하는 경우도 있습니다. 이렇게 Docker 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 저장할 수 있도록 Docker는 두가지 옵션을 제공합니다. 1) Docker 볼륨(volume) 2) 바인드 마운트(bind mount) 이번 포스.. DevOps/Docker 2022. 9. 14. [Docker] 외부에서 컨테이너로, 컨테이너에서 외부로 파일 복사하기 여지까지 미천한 나의 Docker의 실력으로 인해 컨테이너와 볼륨을 연결하지 않으면 파일 이동을 할 수 없는 줄 알았다... 지금이라도 이러한 내요을 알게 되어 다행이다! 1. 외부에서 컨테이너로, 컨테이너에서 외부로 파일 복사하기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 우리의 폴더 디렉터리를 살펴보자. 1 - 1) 외부에서 컨테이너 내부로 복사하기 우리의 실행중인 컨테이너로 dummy/test.txt 파일을 복사해보자! "CP" 명령을 통해 외부에서 내부로 복사시켰다. 명령이 수행되고 나면, 컨테이너 내부 /temp에 text.txt가 복사된 것을 볼 수 있다. 이번에는 반대로 해보자! 1 - 2) 컨테이너 내부에서 외부로 복사하기 우선 이전의 dummy/.. DevOps/Docker 2022. 9. 7. [Docker] 도커의 Attached, Detached 컨테이너 1. Attached, Detached 컨테이너 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 보통 다음과 같이 cmd를 입력하면 해당 process는 background 모드로 실행되기 때문에 바로 터미널에 추가적인 입력이 가능합니다. docker start intelligent_austin 도커 컨테이너를 실행하는 명령이며, docker ps로 확인 시 실행 중임을 확인할 수 있다. 여기서 생각할점이 "start"명령어는 입력 후 터미널이 사용자의 입력을 block하지 않았다는 점입니다. 따라서 추가적인 "ps"명령을 입력할 수 있었죠! 이를 detached 모드라 부릅니다. 이와 달리 docker run 은 명령을 실행하면 바로 사용자의 입력을 block 하게 됩니.. DevOps/Docker 2022. 9. 7. 이전 1 2 3 다음