• 도커 란?
    • 리눅스의 응용 프로그램들을 "소프트웨어 컨테이너" 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트.
    • 경량 가상화
    • 리눅스의 자체기능인 chroot, namespace, cgroup를 사용함으로써, 프로세스 단위의 격리환경이 가능.
      • namespace : 리눅스 프로세스 단위로 독립적인 뷰 제공.
      • cgroup : 리북스 프로세스 단위로 CPU, Network 등등의 사용량 제어 제공.
    • 설치
      • https://docs.docker.com/install (Docker CE : 무료 , Docker EE : 유료)
      • https://docs.docker.com/compose/install (도커컴포즈)
  • 도커엔진
    • 이미지 와 컨테이너
      • 이미지 → [ 컨테이너, 컨테이너, 컨테이너, ... ]
      • ex) docker exec -it 컨테이터 bash
      • ex) docker run -i -t -name '이름' -p '포트:포트' -e '환경변수' --link '별명' -d '이미지:태그'
        • -i : 상호입출력
        • -t : tty활성화
        • -name : 컨테이너 이름
        • -p : 호스트포트:컨테이너포트
        • -e : 컨테이너 환경변수
        • --link : 연동할 컨테이너 별명(alias)
        • -d : detached모드 (백그라운드동작) (반듯이 프로그램이 실행 될수있어야 함!)
        • volume
          • -v 호스트경로:컨테이너경로
          • -v 도커볼륨:컨테이너경로 ("docker volume create --name ..." 식으로 '도커볼륨' 생성가능!)
          • --volumes-from 볼륨 컨테이너
        • network
          • 네트워크 인터페이스
            • (호스트이든/컨테이너이든) eth0(외부통신 이더넷) 와 lo(로컬 루프백) 는 기본임.
            • (각각에 컨테이너가 뜨면, 호스트에...) veth 가 자동으로 생성됨.
            • (당연히 호스트엔...) docker0 도 디폴트 브릿지로 존재함.
          • 출처 : https://www.programmersought.com/article/9055136803
          • 출처 : https://geekylane.com/learn-docker-networking-theory
          • 브릿지 네트워크 :
            • 기본 docker0가 아닌, 별도의 브릿지 으로 외부와 연결
            • docker network create --driver bridge {이름} (--subnet --ip-range --gateway 옵션)
            • (docker run --net {이름} 식으로 설정)
          • 호스트 네트워크 :
            • 컨테이너가 호스트의 네트워크를 그대로 사용하는것
            • 별도의 포워딩 없이, 직접적으로 통신을 하게 되는것.
            • (마찬가지로 docker run --net host 식으로 지정)
          • 컨테이너 네트워크 :
            • 다른 컨테이너의 네트워크를 그대로 사용하는것.
            • 해당 컨테이너의 veth도 당연히 생성되지 않는다.
            • (docker run --net container:타컨테이너ID 식으로 사용)
          • 논 네트워크
            • 단절 (local loopback만 존재)
          • 오버레이 네트워크 :
            • ...
          • --net-alias :
            • 도커내장DNS에 각 컨테이너의 'net별명'을 등록. (똑같은 'net별명'으로 여러게 등록)
            • 특정 컨테이너에서 'net별명'으로 -> 해당 여러 컨테이너에 Round-Robin으로 접근가능.
            • 예 : (특정 컨테이너에서) ping 'net별명' -> 도커내장DNS -> IP 목록 -> ping
          • "컨테이너"에서 ifconfig 으로... IP 확인가능.
            • eth0 : 내부IP
            • lo : 로컬 loopback(127.0.0.1)
          • "호스트"에서 ifconfig 혹은 ip addr 으로... veth 확인가능. (brctl show docker0)
            • vethXXXX : 각 실행 중인 컨테이너의 네트워크 인터페이스.
            • docker0 : 기본적으로, 호스트eth0 와 컨테이터veth 를 이어주는 네트워크 브릿지.
      • ex) docker volume ls (자동생성된 볼륨은 docker volume prune 으로 정리)
      • ex) docker network ls (자동생성된 네트워트는 docker network prune 으로 정리)
      • ex) docker log '컨테이너'
        • logging
          • 컨테이너의 표준출력(stdout) 및 표준에러(stderr) 가 별도의 파일로 관리됨.
          • ("docker logs --tail 10 이름" 식으로 확인 하는것.)
          • 기본 로깅 드라이버는 'JSON 파일형태'로 도커 내부에 저장함.
          • (별도의 로깅 드라이버를 통해, 별도의 수집처리 가능함.)
          • syslog 로깅 드라이버
            • 유닉스계열 표준 로깅 드라이버.
            • "docker run ... --log-driver=syslog --log-opt ... ..."
            • 당연 해당 OS별 특정 호스트경로에 기록이 되고, rsyslog를 활용하여~ 원격전송 가능.
            • (별도의 호스트||컨테이너에 rsyslog.conf 설정으로 'rsyslog 서비스'를 띄워서 하는 방식)
          • fluentd 로깅 드라이버
            • 각종 로그를 처리하는 오픈소스로, 도커엔진의 로그를 수집하는 `플러그인` 제공.
            • JSON 형태로 데이터를 처리하고, 다양한 저장소와 연동이 쉬움.
            • 예) 컨테이너 -> fluentd 서버 -> mongodb
            • (요구사항에 맞에 fluent.conf 설정으로 잘~ 띄워서 하면 됨)
          • 등등등
      • ex) 컨테이너 리소스에 각종 제약관련 옵션 등등등
      • ex) docker cp {컨테이너1 명}:{경로} {컨테이너2 명}:{경로} # 컨테이너간 파일 복사
      • ex) docker cp {로컬 경로} {컨테이너 명}:{경로} # 로컬 파일 컨테이너로 복사
      • ex) docker cp {컨테이너 명}:{경로} {로컬 경로} # 컨테이너 파일 로컬로 복사
    • 허브
      • 중앙 이미지 저장소
      • Registry <=push/pull=> Image <=commit/create=> Container -start-> (실행) -stop-> (종료)
      • ex) docker commit "컨테이너" "이미지:태그"
        • 특정 컨테이너를 수정하여, 이미지로 생성. (기존의 변경사항만 layer구조로 쌓이는것)
      • ex) docker push ...
      • ex) docker pull ...
      • ...
    • 데몬
      • 도커는 Server(데몬) 와 Client 으로 나누어져있음. (/usr/bin/dockerd 및 /usr/bin/docker)
        • (개발자) → 도커 커맨드 → [도커클라이언트] → /var/run/docker.sock → [도커서버]
        • (원격개발자) → tcp 도커서버 API → [도커서버]
      • ex) service docker start // service docker stop (도커데몬 시작/정지)
      • ex) systemctl enable docker (레드햇 계열은 자동실행이 아니라, 서비스를 활성화 시켜야됨)
      • ex) dockerd --help (도커데몬을 설정하는 매우많은 옵션 제공됨)
    • 모니터
      • 1) 단순 커맨트 (docker events , docker stats , docker system df)
      • 2) CAdvisor
        • 구글에서 만든 이미지
        • (호스트 root경로 볼륨을 마운트해서~) 컨테이너를 띄워 모든 정보 모니터링
        • 8080포트로 웹페이지 제공
        • 단일 호스트만 가능 ㅎㅎㅎ
      • 3) Rancher Lab
        • 여러 호스트로 가능
        • 도커 클러스터 모니터링 뿐만아니라, PaaS를 구성하기위한 포괄적인 기능을 무료로 제공.
  • 도커머신
    • 각종 환경에 도커 서버를 생성 및 관리 할수있게 해주는 도구로써 제공이 됨.
    • 각종 환경에 설치해서 사용하면 될듯...
  • 도커컴포즈
    • // TODO : ...
  • 도커플러그인
    • 볼륨 플러그인
      • sshFS
      • Azure File Storage
      • Flocker
      • NFS 와 Convoy
    • 네트워크 플러그인
      • Weave
  • 도커솔루션
    • PaaS 환경으로써 (컨테이너)오케스트레이션 툴
      • 도커스웜
      • 구글 쿠버네티스
        • PaaS 환경을 구축하기 위해, 여러기능을 제공.
        • 일반적으로 웹 서비스 컨테이너 용도.
        • 여러개의 도커 호스트를 하나의 리소스풀로 구성.
        • 그 자체적으로 PaaS 환경을 제공하는것은 아니고, PaaS 환경을 구축할수있는 환경을 제공.
        • (컨테이너 배포환경을 제공하는 RedHat의 OpenShift가 사용하는 툴)
      • 아파치 메소스
        • 다양한 종류의 리소스를 사용가능한, 범용 PaaS 플랫폼.
      • 랜처(Rancher Lab)
        • 여러 솔루션을 쉽게 사용할수있는 플랫홈

-끝-


  • 번외?
    • tail -f /dev/null 활용하여... 띄우기?
    • docker-compose 어나더 네트워크 연결?
      • networks:
      • default:
      • external:
      • name: ???_default
    • ...

'DevOps' 카테고리의 다른 글

Dockerfile  (0) 2020.07.09
Docker-Swarm  (0) 2020.04.06
Kubernetes 란?  (0) 2019.11.04
maven  (0) 2019.10.23
git  (0) 2019.05.18

+ Recent posts