Kubernetes를 위한 도커 사용

이택영·2023년 1월 31일
1

Kubernetes in action

목록 보기
2/3

Install Docker on Ubuntu 20.04

  • 만약 우분투에 기존에 설치된 구버전의 도커가 있다면 다음의 명령어로 제거해 준다.
    sudo apt-get remove docker docker-engine docker.io containerd runc
  • 가장 간단하다고 생각되는 apt 를 사용해서 docker를 설치하겠다.

    • 다음의 명령어들을 통해서 도커레포지토리를 등록한다.

      sudo apt-get update
      
      sudo apt-get install \
          ca-certificates \
          curl \
          gnupg \
          lsb-release
      
      sudo mkdir -p /etc/apt/keyrings
      
      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
      
      echo \
        "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    • 만약 위 명령어에서 에러가 발생한다면 아래의 링크를 참조해 문제해결을 시도해 볼 수 있습니다. apt update docker.com Release 404 not found

    • 다음의 명령어들을 통해서 도커엔진을 설치한다.

      sudo apt-get update
      
      sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    • 설치가 완료된 후 원한다면 추가적인 설정을 할 수 있다

      • 도커는 기본적으로 root 권한이 필요한데 sudo 명령어 없이 사용자가 도커를 실행시킬 수 있게 해주는 명령어이다.

      • 또한 부팅시에 자동으로 실행 되게 끔 하는 명령어이다.

        sudo groupadd docker
        
        sudo usermod -aG docker $USER
        
        newgrp docker
        
        sudo systemctl enable docker.service
        
        sudo systemctl enable containerd.service
    • 도커허브에 등록되어 있는 기본 이미지중 하나인 busybox 이미지를 사용해 간단한 컨테이너를 실행해 본다.

      # 만일 wsl 환경에서 실행하고 있다면 먼저 아래의 명령어로 도커를 실행시켜줘야한다.
      sudo service docker start
      
      docker run busybox echo "This is it!"

위의 과정들에 문제가 없었다면 필요한 이미지를 자동으로 내려받고, “This is it!” 이라는 텍스트를 출력할 것이다.

도커를 사용한 컨테이너 이미지 생성, 실행, 공유하기.

이제 도커를 활용해 컨테이너 이미지를 빌드하고, 실행해보자.

  • 먼저 node를 사용하는 간단한 서버 스크립트를 작성하자.
    const http = require('http');
    const os = require('os');
    
    console.log("Kubia server starting...")
    
    const handler = function(request, response) {
            console.log("Received reqest from " + request.connection.remoteAddress);
            response.writeHead(200);
            response.end("You've hit " + os.hostname() + "\n");
    };
    
    const www = http.createServer(handler);
    www.listen(8000);
  • app.js 파일이 있는 같은 디렉토리에 이미지 빌드를 위한 Dockerfile 을 생성하자. (파일명은 “Dockerfile” 로 하면 된다.
    FROM node:16
    ADD app.js /app.js
    ENTRYPOINT ["node", "app.js"]
  • 그 후에 아래와 같은 명령어를 실행하면, 자동으로 빌드에 필요한 베이스 이미지(node)를 다운로드 하게된다. 이때 하나의 이미지가 아니라 여러 레이어로 이루어진 이미지를 다운 받게된다.
    docker build -t kubia .
  • 아래의 명령어를 사용하면 빌드된 이미지를 확인할 수 있고, 다음과 같은 출력을 할 것이다.
    docker images
    
    #REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    #kubia        latest    b563ba57de58   12 minutes ago   910MB
  • 빌드된 이미지는 아래의 명령어를 통해 실행하고. 실행 중인 컨테이너를 확인할 수 있다.
    docker run --name kubia-container -p 8080:8000 -d kubia
    
    docker ps
    #CONTAINER ID   IMAGE     COMMAND         CREATED          STATUS          PORTS                                       NAMES
    #1a47fb7aaa27   kubia     "node app.js"   10 minutes ago   Up 10 minutes   0.0.0.0:8080->8000/tcp, :::8080->8000/tcp   kubia-container
  • 컨테이너가 잘 실행중 이라면 호스트중인 ip 화 포트를 통해 브라우저로 접속해보자. (로컬환경에서 테스트중이라면, http://localhost:8080 으로 접속하면된다.)
    • 접속하면 You've hit 1a47fb7aaa27 를 출력하는 화면이 뜰 것이다!
    • 뒤의 16진수를 본다면 도커 컨테이너 내부에서는 컨테이너의 ID를 호스트네임으로 사용한다는 것을 알 수 있다.
  • 컨테이너를 중지하고 삭제하자.
    docker stop kubia-container
    
    docker rm kubia-continer

이미지 레지스트리에 이미지 푸쉬

다른 컴퓨터에서도 이미지를 다운받고 실행할 수 있게, 이미지 저장소에 이미지를 푸쉬해보자

  • 푸쉬하기 전에 이미지에 태그를 추가하자. (<docker_id> 에는 본인의 도커 아이디가 들어가야한다.)
    #with version "latest"
    docker tag kubia <docker_id>/kubia
  • 아래의 명령어를 사용해 도커허브에 로그인 후에 푸쉬하기
    docker login
    #도커 아이디/패스워드 입력
    
    docker push <docker_id>/kubia
  • 이제 어느 환경이라도 네트워크에 연결되어 있다면 아래의 명령어를 사용해 등록한 이미지를 실행시킬 수 있다.
    docker run -p 8080:8000 -d <docker_id>/kubia


마르코 룩샤, ⌜쿠버네티스 인 액션⌟, 강인호*황주필*이원기*임찬식, MANNING, 2020.03.31, 843

profile
괴발개발

0개의 댓글