책보고 정리해보는 도커 기초

2021. 6. 4. 10:01·환경관련

 

출처:  시작하세요 도커/쿠버네티스 - 용찬호 지음 

원래는 appl 개발/운영자라 이쪽으론 생초보인데 정말 잘따라하고 있습니다.

이책은 깜깜한 앞날을 밝히는 선물이네요

아래는 책 내용 정리.. 실습은 리눅스(우분투) 두대를 사용했습니다. + 윈도우 2019서버 폐쇄망도 도전중

 

 

도커 개념

 

AS-WAS: 온프레미스에 어플리케이션 배포 방식

AS-IS: 하이퍼바이저(vmware 등)를 호스트(서버) OS에 올리고 다시 이위에 여러개의 독립된 Guest OS/라이브러리/앱을 배포 -> 하이퍼바이저가 부담되고, 포함되는것들이 많다보니 이미지가 커진다.

TOBE: 호스트 OS위에 도커엔진을 두고 여기에 컨테이너에 앱 구동에 필요한 라이브러리/실행파일만 넣어서 이미지를 다운사이징. 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용. 도커 엔진만 있으면 OS종류와 서버종류에 상관없이 동일하게 사용가능하다는 장점. -> 이미지가 작아지니 배포 시간이 단축되는 장점은 덤. 뭘해도 호스트OS에는 영향을 주지 않는다. 대신 컨테이너가 중지되면 다 날아가니 별도의 볼륨을 둬서.. 호스트와 공유하는 볼륨이거나 볼륨 컨테이너 이거나, 도커가 관리하는 볼륨 생성하여.. 둬야한다

 

 

도커설치

 

리눅스-지원 버전 확인 필요. <- 얘가 정답이다 현재 기준

윈도우-10이하는가상화 공간 별도 설치 필요니깐 포기. 도커 툴박스나 도커 for windows로 설치하면 도커엔진, 도커 컴포즈, 도커머신 함께 설치됨. 도커 툴박스로 설치하면 리눅스 가상머신 생성해서 내부에 도커 설치하는거고, 도커 for windows로 설치하면 호스트자체에 가상화 기술(hyper-v) 적용 -> 도커 컨테이너 생성후 외부에서 접근 시 차이 발생

(도커 툴박스는 이중으로 포워딩해야 하나, 자체 가상화로 하면 포트포워딩 설정만 하면 된다)

 

sudo apt update && sudo apt install -y docker.io

# 권한설정

sudo usermod -a -G docker $USER

# 서버 재시작

sudo reboot

 

 

도커 엔진 

사용 기본단위는 이미지와 컨테이너 -> 핵심!

이미지는 iso 파일같은 개념. 컨테이너 생성/실행할때 사용, read only

 - 저장소 이름 / 이미지이름 : 태그 <- 이미지 naming

  ex) mooney/ubuntu:latest

컨테이너 - 도커 이미지로 생성되며 이미지의 목적에 맞는 파일이들어있는 파일시스템과 격리된 시스템 자원 및 네트워크를 사용할수 있는 독립된 공간 = 도커 컨테이너

이게 다 쿠버네티스를 위한 도커 공부인데.. 급 쿠버네티스 찾아보다 익숙치 않은 용어들이 보여서 잠깐 정리

* 프로비저닝 : 프로비저닝(provisioning)은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다.

* 오케스트레이션: 컴퓨터 시스템 및 소프트웨어의 자동화 된 구성, 조정 및 관리입니다. Ansible, Puppet, Salt, Terraform 및 AWS CloudFormation을 포함하여 서버 구성 및 관리 자동화를위한 여러 도구가 있습니다, 오케스트레이션을 활용하여 서버 프로비저닝, 인시던트 관리, 클라우드 오케스트레이션, 데이터베이스 관리, 애플리케이션 오케스트레이션 등 다양한 태스크와 워크플로우가 포함된 IT 프로세스를 자동화할 수 있습니다.

 

* 명령어

docker images # 이미지 확인

docker ps # 컨테이너 확인 -a 옵션 주면 전체, -q 는 컨테이너 ID (응용 docker stop $(docker ps -a -q) 이런식으로 전체 컨테이너 중지도 가능)

docker start # 컨테이너 시작

docker stop #컨테이너 중지

docker attach # docker start 된 컨테이너 접근

docker run # docker start + attach 이면서 없는 이미지면 받기까지..  -p 3000:80/tcp 와같이 포트 포워딩 옵션으로 호스트 IP/PORT로 컨테이너 접근을 가능하게 한다. 여러개 포트를 포워딩도 가능하다. 이거는 start에서도 되는거겠지docker port # 호스트와 포트만 확인시

docker events --filter 'type=image' # 실시간 모니터링 중 이미지 관련 이벤트만 모니터링

docker stats --no-stream # 모든 컨테이너 자원 사용량 스트림 출력->한번만 출력으로 변경

docker system df  # 도커에서 사용하고 있는 이미지, 컨테이너, 로컬 볼륨의 총 개수 및 사용중인 개수, 크기, 삭제함으로써 확보 가능한 공간 출력

 

 

도커 구조

- 도커서버

- 도커클라이언트

도커서버는 실제 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체 -> dockerd 프로세스로 동작 (ps aux | grep docker로 확인하면 프로세스 볼수 있음). 도커 프로세스가 실행되어 서버로서 입력을 받아 도커 엔진의 기능을 수행할 준비가 된 상태를 도커 데몬이라고 함

service docker stop 

dockerd 로 다시 시작 가능 (또는 service docker start), dockerd 및 옵션통한 명령어는 root 계정으로만 실행가능하다(su로 변경하여..)

 

도커 클라이언트는 도커 데몬의 API 입력을 받아 도커 엔진의 기능을 수행할때 이 API를 사용할수 있도록 CLI를 제공하는 것이 도커 클라이언트

 

 

도커 스웜모드

자원이 부족할때 여러대의 서버를 클러스터로 만들어 병렬로 확장하는데, 

도커 1.12 이후부터는 스웜모드- 여러개의 도커 서버를 하나의 클러스터로 구성하기 위한 각종 정보를 저장하고 동기화하는 분산 코디네이터, 클러스터 내의 서버를 관리하고 제어하는 매니저, 각 서버를 제어하는 에이전트를 도커 엔진 자체에 내장-해서 쉽게 서버 클러스터를 구축할 수 있다. 

- 매니저노드 : docker swarm init --adevertise-addr xxx.xxx.xxx.xxx , 만약 매니저노드가 단 한개이면 삭제할 경우 클러스터를 사용못하게 될수 있으니 주의 필요. 매니저노드 클러스터 구성하려면 토큰확인을 docker swarm join-token manager로 확인

- 워커노드: docker swarm join --token <매니저노드에서 나오는 토큰정보. 모를경우 docker swarm join-token worker로 확인> <IP:PORT> 

- docker node ls 로 스웜 클러스터에 정상 추가여부 확인 가능

- docker service create --name myweb --replicas 2 -p 80:80 nginx # 마스터와 워커에서 웹서버 구동된다.

- docker service scale myweb=4 # 레플리카 2개 추가되어 4개에서 구동. 라운드로빈 방식

- docker network ls # 확인해보면 ingress 네트워크(로드밸런싱과 라우팅메쉬에 사용)가 swarm으로 조회된다. 매니저, 워커 양쪽에서 다 조회됨

 

 

도커 컴포즈

yaml 파일 작성해서 다수 컨테이너 + 많은 옵션 있을경우 컨테이너 생성하는 방법

설치는 https://docs.docker.com/compose/install/ 참조 필요.

YAML은 버전정의/서비스정의/볼륨정의/네트워크 정의의 4가지 항목으로 구성

1) version: '3.0'

2) service:

     myconainer1:

       image:

       links:

       environment:

       command:

       depends_on:

       ports:

       build:

       extends:

3) networks:

      mynetworks:

          driver:

          driver_opts:

             subnet:

             IPAdress:

      ipam:

         driver:

         config:

            subnet:

            ip_range:

            gateway:

    networks:

       mynetworks2:

          external: true # 기존 네트웤 사용

  4) volumes:

        driver:

          driver_opts: #driver사용 추가옵션 아래에 정의

             opt: 

             opt2:

        external: 

도커컴포즈 3 + 도커엔진 1.13버전에서부터 stack 개념이 생겨서 도커컴포즈에서 도커 스웜모드를 구성할 수 있다.

ex: docker stack deploy -c docker-compose.yml mystack

스택을 통째로 삭제하는것이 바람직하나 새로이 생긴 컨테이너들을 docker service rm 으로 하나씩 삭제도 된다.

스택이름(위에서는 mystack)이 docker service ls 로 하면 NAME에 프리픽스로 나오기때문에 stack인지 알수 있다. 

docker-compose scale로 컨테이너 수 조절하던것도 스택으로 생성하면 docker service scale mystack_web=2 와 같이 스웜으로 조절해야한다.

 

 

 

 

 

 

728x90

'환경관련' 카테고리의 다른 글

책보고 따라해보는 쿠버네티스: (4) Ingress, PV, PVC  (0) 2021.07.16
쿠버네티스 대시보드와 렌즈  (1) 2021.06.17
책보고 따라해보는 쿠버네티스: (3) 리소스 관리/설정  (0) 2021.06.14
책보고 따라해보는 쿠버네티스: (2) 시작하기  (1) 2021.06.07
책보고 따라해보는 쿠버네티스: (1) 설치  (2) 2021.06.04
'환경관련' 카테고리의 다른 글
  • 쿠버네티스 대시보드와 렌즈
  • 책보고 따라해보는 쿠버네티스: (3) 리소스 관리/설정
  • 책보고 따라해보는 쿠버네티스: (2) 시작하기
  • 책보고 따라해보는 쿠버네티스: (1) 설치
yunapapa
yunapapa
working on the cloud
    250x250
  • yunapapa
    supermoon
    yunapapa
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • 개발 (20)
        • java (17)
        • web (2)
        • MSX (1)
        • Go (0)
      • CloudNative (50)
        • App Definition & Developeme.. (17)
        • Orchestration & Management (4)
        • Runtime (3)
        • Provisioning (7)
        • Observability & Analysis (14)
        • event review (5)
      • AWS (7)
      • 환경관련 (17)
      • 취미생활 (0)
        • 맛집 (0)
        • 게임 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • CNCF Past Events
    • Kubernetes Korea Group
  • 공지사항

  • 인기 글

  • 태그

    AWS
    helm
    kubernetes
    Pinpoint
    Java
    오블완
    OpenShift
    k8s
    springboot
    티스토리챌린지
    devops
    istio
    APM
    dop-c02
    gitlab
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
yunapapa
책보고 정리해보는 도커 기초
상단으로

티스토리툴바