전체 글

전체 글

    [ Docker && Kubernetes ] - 쿠버네티스를 이용한 컨테이너 오케스트레이션: 쿠버네티스 소개

    [ Docker && Kubernetes ] - 쿠버네티스를 이용한 컨테이너 오케스트레이션: 쿠버네티스 소개

    쿠버네티스 쿠버네티스는 가장 대표적인 컨테이너 오케스트레이션 시스템입니다. 사실상 표준이라고 할 수 있습니다. 컨테이너 오케스트레이션 시스템이란? 이는 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 기술이라고 할 수 있습니다. 기존에 Docker / Docker Compose는 한대의 머신 안에서 컨테이너를 관리하기 위한 도구로 사용했었습니다. 다만 컨테이너 오케스트레이션 시스템에서는 여러대의 머신 -> 클러스터 상에서 컨테이너를 관리하게 됩니다. User라는 서비스가 있다고 해보면 User라는 컨테이너의 Scaling작업, Rollout과 같은 작업을 하기도 합니다. 또한 버전관리와 관련된 Rollback과 관련된 기능을 제공합니다. 그리고 CPU, memory, GPU와 같은 유휴자원같은 것을..

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:도커 컴포즈를 이용하여 Grafana_MySQL 구성

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:도커 컴포즈를 이용하여 Grafana_MySQL 구성

    1. Grafana 구성하기 바로 위에 명시되어 있는대로 실습을 해보도록 하겠습니다. 공식문서는 아래 2개를 참고하였습니다. https://hub.docker.com/_/mysql mysql - Official Image | Docker Hub Quick reference Supported tags and respective Dockerfile links 8.0.30, 8.0, 8, latest, 8.0.30-oracle, 8.0-oracle, 8-oracle, oracle 8.0.30-debian, 8.0-debian, 8-debian, debian 5.7.39, 5.7, 5, 5.7.39-oracle, 5.7-oracle, 5-oracle 5.7.39-debian, 5.7-debian, 5- hub...

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:명시적으로 여러 컨테이너 관리하기

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:명시적으로 여러 컨테이너 관리하기

    도커 컴포즈 이는 간단하게 docker-compose.yml YAML파일을 통해서 명시적으로 관리할 수 있게 도와줍니다. 프로젝트 단위로 격리된 환경을 제공할 수도 있고, 프로젝트 단위에서 도커 네트워크와 볼륨도 관리가 가능하게 됩니다. 그리고 서비스들간의 의존성도 손쉽게 관리할 수 있다는 장점이 있게 됩니다. 그리고 서비스 S1이 S2를 호출할 때, 내부 도메인을 사용하면 좋을것 입니다. 이를 위해서 저희는 이전에 bridge network를 통해서 net_alias설정을 통해서 진행해 주었었습니다. 도커 컴포즈에서는 각각의 서비스명으로 해당 서비스를 네트워크 상에서 호출할 수 있습니다. 이를 서비스 디스커버리라고 합니다. 또한 컨테이너의 수평 확장이 쉽게 되는데, 만약 웹서비스를 하는 서비스를 S1이..

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:도커 데몬 디버깅

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:도커 데몬 디버깅

    도커 데몬 디버깅 다음과 같이 우선 docker system events명령어를 치게되면 스트리밍 형식으로 도커의 이벤트가 표시되게 됩니다. nginx컨테이너를 실행하면 이에 맞는 로그가 뜨는 것을 볼 수 있고 아래와 같이 끄게 되면 이에 맞는 이벤트 로그가 뜨는 것을 보실 수 있습니다. 또한 위와같이 docker conatiner의 디스크 사용량도 docker system df명령어로 확인할 수 있게 됩니다. 또한 -v옵션을 주게되면 더 자세히 볼 수 있게 됩니다. 또한 docker system prune명령어를 치게되면, 정지되어 있는 컨테이너, 사용하지 않는 네트워크, 댕글링 이미지들, 댕글링 빌드 캐시들을 삭제하게 됩니다. 또한 docker stats명령어를 통해 컨테이너 ID, 메모리 사용량, ..

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:이미지 경량화 전략

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:이미지 경량화 전략

    이미지를 경량화 해야지 외부 저장소로 push할 때도 빠르게되고, pull해올 때도 빠르게 됩니다. 그리고 이미지로부터 컨테이너를 띄우는 작업도 빨라지게 되고, 그리고 HostOS에서 동일한 용량대비 가질 수 있는 컨테이너의 양도 늘어나게 됩니다. 크게 이미지 경량화 전략은 3개 ( 컨테이너 레이어 수 줄이기, 경량 베이스 이미지 선택, 멀티 스테이지 빌드 사용 )이 있습니다. 컨테이너 레이어 수 줄이기 우선 Dockerfile에서 RUN명령어가 많아지게 되면, 그만큼 이미지 레이어가 쌓이게 됩니다. 이미지 레이어를 줄이기 위해서 RUN명령어를 최소화 하는 전략입니다. 기존에 작성된 Dockerfile을 보겠습니다. 저기 RUN지시어가 여러줄로 되어 있는 것을 보실 수 있을겁니다. 만약 저 RUN명령어를..

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:AWS ECR 저장소 이용

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:AWS ECR 저장소 이용

    ECR 저장소 이용 우선 실습을 위해 AWS Elastic Container Registry에 들어가서 저장소를 하나 만들겠습니다. 추가적인 비용 발생을 막기 위해 나머지 옵션은 다 끈채로 진행하겠습니다. 그리고 이번 실습은 aws cli에 접근해야하기 때문에 우분투 서버가 아닌 설정이 다 되어 있는 macos상에서 진행하도록 하겠습니다. 그리고 시작하기 전에 aws sts get-caller-identity를 통해서 aws cli사용자 정보를 확인하고 진행해 주셔야 합니다. 그 다음에는 AWS ECR에 명시되어 있는 명령어로 ecr 레포지토리에 연결해 주도록 합니다. 그리고 tag명령어로 nginx:latest를 ECR레포지토리에 등록하고 docker images로 이미지 목록을 확인합니다. ECR에 ..

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:도커허브 저장소 이용

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:도커허브 저장소 이용

    도커를 사용하다보면 이미지저장소가 필요하게 됩니다. 이를 관리하기 위해서는 매우 많은 서비스가 존재하게 되는데, 우리는 그중에서 이번시간에는 도커 허브에 대해서 알아보도록 하겠습니다. 우선 서버에 docker login명령어로 도커 cli에 저장소에 접근할 권한을 주어야 합니다. $ docker login -u hyunselee 를 쳐서 저는 로그인 했습니다. 그리고 /home/ubuntu/.docker/config.json경로로 들어가서 인증정보를 보면 위와 같이 auth token이 존재하는 것을 보실 수 있습니다. 어짜피 이 포스팅이 지나면 바로 토큰을 폐기할 것이므로 유효하지 않은 토큰이 될 것입니다. 그 다음에는 도커 허브에 Create Repository로 저장소를 Private하게 하나 만듭..

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:이미지 압축파일로 저장 및 불러오기

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기:이미지 압축파일로 저장 및 불러오기

    이미지 압축파일로 저장 위 명령어를 보면 ubuntu:focal이미지를 ubuntu_focal.tar로 압축하는 것을 보실 수 있습니다. 이미지 압축에서 불러오기 위에서 보면 ubuntu_focal.tar에서 이미지를 불러오라고 -i옵션을 주어 실행할 수 있습니다. 실습 실습을 위해서 이전에 만들었던 my-app:v2이미지를 my-app-v2.tar로 압축하고 my-app:v2이미지를 삭제했습니다. 다음과 같이 my-app-v2.tar로부터 my-app:v2이미지를 불러올 수 있습니다. 이 압축파일을 사용하는 경우는, 인터넷이 동작하지 않는 오프라인 환경에서 자주 사용되므로 익혀 두는 것이 좋습니다.

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기: Dockerfile

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기: Dockerfile

    Dockerfile 문법 https://docs.docker.com/engine/reference/builder/ Dockerfile reference docs.docker.com 우선 위 공식 홈페이지의 Dockerfile reference를 참고하여 포스팅하도록 하겠습니다. Environment replacement 우선 환경변수의 기본 문법에 대해서 살펴보도록 하겠습니다. 여기서 ${FOO}에서 FOO는 컨테이너의 환경변수 입니다. ENV라는 지시어를 사용하면 이미지 빌드타임과, 컨테이너 런타임에 환경변수값을 전달할 수 있게됩니다. ARG 다음으로는 ARG(인자)에 대해 알아보도록 하겠습니다. 공식문서를 보면 Default values를 한번에 지정해줄 수도, 아니면 그냥 인자만 선언할 수 있습니다..

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기: 이미지 빌드

    [ Docker && Kubernetes ] - 도커 컨테이너 다루기: 이미지 빌드

    도커 이미지 구조 이전에도 봤지만 도커 이미지 구조는 위와 같습니다. 여기서 우리는 ubuntu이미지가 있고, nginx이미지는 ubuntu에 nginx 이미지 레이어를 하나 쌓아서 만들었다고 하고, web app이미지는 seb app source 이미지 레이어 하나를 더 추가해서 만들었다고 해 봅시다. 그리고 이 web app 도커 이미지를 활용하여 도커 컨테이너를 만듭니다. 이는 R/W 레이어고 도커 컨테이너가 삭제되면 이도 삭제된다는 특징이 있습니다. 실습 우리는 실습 전에 docker image inspect명령어를 통해 ub untu:latest이미지에 어떤 레이어가 쌓여있는지 확인해 보겠습니다. 보니까 sha256해시로 6개의 레이어가 쌓여있는 것을 보실 수 있습니다. Dockerfile 없이..