- 도커 란?
- 리눅스의 응용 프로그램들을 "소프트웨어 컨테이너" 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트.
- 리눅스의 자체기능인 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 도 디폴트 브릿지로 존재함.
- 브릿지 네트워크 :
- 기본 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 설정으로 잘~ 띄워서 하면 됨)
- 등등등
- logging
- 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 (도커데몬을 설정하는 매우많은 옵션 제공됨)
- 도커는 Server(데몬) 와 Client 으로 나누어져있음. (/usr/bin/dockerd 및 /usr/bin/docker)
- 모니터
- 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)
- 여러 솔루션을 쉽게 사용할수있는 플랫홈
- PaaS 환경으로써 (컨테이너)오케스트레이션 툴
-끝-
- 번외?
- 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 |