ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내가 공부한 도커 핵심요약
    ETC. 2022. 6. 17. 15:43

     

    목차

    - 가상화 방식 종류별 비교
    - Docker 관련 명령어 : 설치, 업데이트, 버전, 이미지 확인 등
    - 리눅스/유닉스 필수 명령어
    - 리눅스 주요 설정 파일 및 퍼미션 설정
    - Crontab 설정 파일 : 각 탭 성분 이해
    - 기타 : Well-known 포트, DNS 관련 설정 파일

    * 가상화 방식 종류별 비교
    - 하드웨어 에뮬레이션 방식 (Bare Metal 형)
    > 아무것도 설치되어 있지 않은 HW에 직접 설치하여 구동,
    여러 HW 드라이버를 직접 설치하여야함

    - 전가상화 방식
    > 하드웨어 전체를 가상화,
    게스트 OS는 하드웨어 자원을 요청하기 위해 반드시 하이퍼바이저가 중재해야 함,
    속도 등 한계 극복을 위하여 반가상화 방식 출현

    - 반가상화 방식
    > 하드웨어 반절만 가상화하고 나머지 반절은 실제 하드웨어 사용으로 속도가 빠름,
    게스트 OS의 수정이 필요함,
    게스트 OS를 그대로 사용하지 못함,
    게스트 OS가 윈도우일 경우 별도의 Tool 필요

    - OS 가상화 방식
    > TYPE 1 방식 = Bare Metal 형 = Native 하이퍼바이저형,
    TYPE 2 방식 = Hosted 하이퍼바이저형

    ---
    1. Docker 관련 명령어
    - Docker 패키지 설치 명령어 (우분투, CentOS)
    * Ubuntu
    > apt-get update (패키지 업데이트)
    > apt-get install apt-transport-https ca-certificates curl software-properties-common (apt 통해서 패키지 설치)
    > curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - (도커 공식 GPG KEY 추가)
    > apt-key fingerprint OEBFFCD88 (apt-get 핑거프린트 KEY 추가)
    > (레파지토리 추가)
    > sudo apt-get install docker-ce (도커 ce 설치)

    * CentOS
    > sudo yum install -y yum-utils device-mapper-persistent-data lvm2 (자동설치 스크립트 대신 yum 사용 설치)

    - Docker 업데이트 명령어 (레파지토리 이용 등)
    > sudo apt-get update
    > sudo apt-get install docker-ce docker-ce-cli containerd.io
    > sudo yum-config-manager --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
    > sudo yum install docker-ce

    - Docker 버전 확인 / 컨테이너 목록 확인 명령어
    > docker version / docker ps -a

    - Docker 이미지 검색 / Search, images 구분
    > docker images : docker 에서 사용가능한 이미지 목록
    > docker search [이미지명] : docker hub에서 사용가능한 docker images 목록

    - Docker compose 툴 (YAML 파일 형식)
    > 하나 이상의 컨테이너를 하나로 통합하여 관리
    * Dockerfile
    > 어디서나 재현 가능하도록 어플리케이션 환경 정의

    * docker-compose.yml
    > 격리된 환경에서 사용 가능하도록 서비스 정의 (key:value)

    * 실행
    > docker-compose up

    ---
    2. 리눅스/유닉스 필수 명령어
    - w, who, whoami, head/tail, ps 등 주요 명령어
    * w, who
    > 접속자 확인 명령어
    * head, tail
    > 텍스트로 작성된 파일의 앞 10행 또는 마지막 10행만 출력 명령어
    * ps
    > 현재 돌아가고 있는 프로세스 확인 명령어

    - vi 에디터 사용법 및 옵션
    > 실제 사용해보면서 확인

    - tar 명령어를 통한 압축하기 / 압축풀기 옵션
    > tar -cvfz xinetd.tar.gz /etc/xinetd.d/ (생성 + gzip 압축)
    > tar -xvfz xinetd.tar.gz (gzip 압축해제 + tar 풀기)

    - Foreground vs Background 전환
    > 포그라운드 상태일 때 ctrl + z 입력 후 bg 입력
    > 백그라운드 실행하고자 할 때 명령어 끝에 & 붙인다
    > jobs 명령어로 확인하고 fg % job번호 명령어 사용

    - 보안패치 관련 명령어 (rpm - , showrev 등)
    * rpm
    > 레드햇 계열 SW 설치 명령어
    > rpm - Uvh 패키지파일 (설치)
    > rpm - e 패키지파일 (삭제)
    > rpm - qa 패키지파일 (질의)

    ---
    3. 주요 설정 파일 및 퍼미션 설정 이해
    - /etc/passwd, /etc/shadow 파일 및 역할, 형태
    * /etc/passwd
    > 시스템에 등록된 사용자의 정보들이 담겨있는 파일
    > 사용자의 계정과 인증을 관리
    > 사용자계정명:패스워드:UID:GID:comment:홈디렉토리:로그인쉘

    * /etc/shadow
    > 암호화된 패스워드와 패스워드 설정 정책이 기재됨
    > 관리자 계정과 그룹만이 이 파일을 읽을 수 있습니다
    > 사용자계정명:암호화된패스워드:마지막변경:패스워드최소사용기간:패스워드최대사용기간:경고:비활성화:만료일

    - /etc/hosts.deny, hosts.allow 파일
    > 레드햇/우분투 계열에서는 /etc/hosts 파일을 우선적으로 네임서버를 아이피주소로 바꾸어준다
    > 허용할 서비스 IP 주소와 차단할 서비스 IP 주소 설정파일

    - /etc/pam.d/system-auth, passwd-auth 역할
    > PAM 라이브러리를 이용하는 응용프로그램의 설정 파일 위치

    * /etc/pam.d/system-auth
    > 사용자 인증에 사용, 올바른 패스워드인지 절차를 거친다

    * /etc/pam.d/passwd-auth
    > 사용자가 패스워드 변경할 수 있는 모듈을 지정한다

    - 공개 SW 라이선스 이해 (GPL, LPGL, MPL, BSD 등)
    * 오픈소스도 종류가 다양하여 허용되는 범위와 제한사항이 다르다
    > 복제, 배포, 수정의 권한
    > 배포시 라이선스 사본첨부
    > 저작권 고지사항 또는 Attribution 고지사항 유지
    > 배포시 소스코드 제공 의무와 범위
    > 조합저작물 작성 및 타 라이선스 배포허용
    > 수정내용고지
    > 명시적 특허라이선스의 허용
    > 라이선스가 특허소송 제기시 라이선스 종료
    > 이름, 상표, 상호에 대한 사용제한
    > 보증의부인
    > 책임의 제한

    - sudo 이해, umask 값 설정, sticky 비트, set-uid, set-gid 구분
    * sudo
    > 현재계정에서 root 권한으로 명령어 실행
    > /etc/sudoers 파일에 지정된 사용자만 sudo 명령 사용가능

    * umask
    > 파일 생성시 기본적인 권한 설정

    * sticky bit
    > 디렉토리에만 부여되고 sticky bit 가 부여된 디렉토리에 파일은 접근 권한과 상관없이 파일의 소유자와 관리자만이 파일을 삭제할 수 있다

    * set-uid
    > 실행파일에 적용하면 실 사용자(프로그램을 실행중인 사용자)에서 프로그램 ID로 유효사용자(EUID)가 변경됨

    * set-gid
    > 디렉토리에 설정되면, 이 디렉토리에 새로 설정된 파일들은 디렉토리 그룹 소유권 보다 파일 생성자의 그룹 소유권을 얻게 될 것

    - 퍼미션 설정 (rwx rwx rwx /유저/그룹/other) 표기법 : chmod 명령어와 함께 이해, 2진수 표기법 등
    > 소유자(User), 그룹(Group), 그 외 사용자(Other)
    > r: 4, w: 2, x: 1

    - btmp, wtmp, lastlog, syslog 등 주요 로그 역할 구분
    * btmp
    > /var/log/btmp : 실패한 로그인 정보 로그

    * wtmp
    > /var/log/wtmp : 성공한 로그인 / 로그아웃 정보 로그

    * utmp
    > /var/run/utmp : 현재 로그인 사용자 정보 로그

    * lastlog
    > 사용자가 마지막으로 로그인 한 시간을 파일로 기록
    > 다른 사용자에 의해 자신의 ID가 도용된 여부를 알려줌

    * syslog
    > 사용자 id와 패스워드를 요청하는 프로그램에 대해서 로그로 기록
    > 리눅스 시스템 장애발시 syslog 데몬이 로그로 저장
    > 로컬 저장시 장애 발생하면 모두 사라짐

    ---
    4. Crontab 설정 파일 : 각 탭 성분 이해
    - 분 : 0~59, 시 : 0~23, day : 1~31, month : 1~12, 요일 : 0~6
    - 0: 일요일, 1: 월요일, 2: 화요일, 3: 수요일, 4: 목요일, 5: 금요일, 6: 토요일
    - 매월 토요일 저녁 22시 30분에 /backup 디렉토리의 backup.sh 수행시키는 명령어
    - 30 22 * * 6 /backup.sh

    5. 기타 : Well-known 포트, DNS 관련 설정 파일
    * Well-known 포트 (0~1023)
    > 가장 많이 사용되는 서비스를 중심으로 이루어진 포트
    > IANA에서 공식적으로 할당시킨 포트이기 때문에 프로그램을 개발하거나 특정한 작업을 처리할 때 알려진 포트 범위 내의 번호가 임의로 사용되서는 안됨

    * /etc/named.conf
    > DNS 서버의 전반적인 환경 설정을 담당하는 파일
    > 서버에서 사용하는 zone 파일 및 reverse zone 파일을 지정한다

     


     

    목차

    - Dockerfile 명령어 숙지
    - Docker 데몬 관련 Audit 설정 이해
    - Docker logs 명령어 옵션
    - 쿠버네틱스의 마스터 노드/워커 노드 이해
    - DevOps 문화 요소 이해

    1. Dockerfile 명령어 숙지
    - 이미지 생성을 위한 도커 전용 언어
    > sudo docker pull ubuntu:latest
    > sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

    - FROM [베이스 이미지 지정 : TAG]
    > FROM ubuntu:18.04

    - RUN [명령어]
    > RUN apt-get update
    > RUN apt-get install apche2 -y

    - ADD [추가할 파일][추가 경로]
    > ADD test.html /var/www/html

    - WORKDIR [작업디렉토리 경로]
    > WORKDIR /var/www/html

    2. Docker 데몬 Audit 관련파일
    - /etc/audit/audit.rules
    > -w /usr/bin/docker -k docker 추가

    - /usr/bin/docker
    > 파일 감사 설정

    - /usr/lib/docker
    > 디렉토리 감사 설정

    - /etc/docker
    > 소유권(root) 및 퍼미션(755)

    - /etc/docker/daemon.json
    > Docker 데몬의 동작과 관련된 매개변수 포함, 권한 644 이하

    3. Docker logs 명령어 숙지
    - 로그 세부 정보 표시
    > docker logs --details

    - 로그 출력
    > docker logs -f

    - 타임스탬프 출력
    > docker logs -t

    - json 로그 관리하기
    > cat /var/lib/docker/containers/

    - Syslog, journal, awslog, fluentd 등 로그수집/통합 플랫폼, 컨테이너 모니터링 도구 숙지
    > DOCKER_OPTS="--log-driver=syslog"
    > DOCKER_OPSTS="--log-opt max-size=10k --log-opt max-file=5"
    > 로그 통합 대표 플랫폼(중앙관리)
    * 클러스터 내 각 노드에 로그를 수집하는 POD를 실행해서 한곳으로 로그를 수집해야 
    - ELK (Elastic Search)
    - Kibana
    - Logstash

    4. 쿠버네틱스 구조
    - 마스터 노드 / 워커 노드
    - 노드와 POD 으로 구성
    - 마스터 노드 : Kube API 서버 / etcd
    - 워커 노드 : Kubelet, Kube Proxy, 컨테이너런타임

    master node
    > API Server : 이벤트 응답역할, 사용자 상호작용, Scale Out 지원
    > Scheduler : 실행되지 못한 컨테이너 감지하고 실행할 노드 선택하는 역할
    > Controller-Manager
    kube
    - 레플리케이션 컨트롤러 : 알맞은 수 POD 생성
    - 노드 컨트롤러 : 노드 다운 시 대응
    - 엔드포인트 컨트롤러 : 서비스와 POD 연결

    cloud
    - 노드 컨트롤러 : 클라우드에 연결, 리소스 추가 삭제
    - 라우트 컨트롤러 : 인프라 경로 구성
    - 서비스 컨트롤러 : 로드 밸런싱 생성, 업데이트, 삭제

    > etcd : 모든 클러스터 데이터를 저장하는 DB, No-SQL DB(key:value)

    worker node
    > kubelet
    - 클러스터의 각 노드에서 실행되는 핵심 컴포넌트
    - 정상 동작 유무 등에 대한 지속적 모니터링
    - 주기적으로 마스터 노드의 API 서버와 통신

    > kube proxy
    - 클러스터의 각 노드에서 실행되는 네트워크 프록시
    - 네트워크 규칙 관리, 서비스마다 개별 IP주소 할당 가능
    - 클러스터 내부나 외부의 트래픽을 POD로 전달

    > docker
    - 실제 컨테이너 실행을 담당하는 SW
    - 바로 docker, CRI-O 등이 있음

    > pod1, pod2, pod3 (container 묶음)

    - Redhat 의 Openshift 구조 이해
    > Redhat 인프라를 기반으로 linux CoreOS 위에 kubernetes 위에 자동운영 소트프웨어 위에 클러스터 서비스, 개발 서비스, 애플리케이션 서비스, 서비스 맵핑으로 구조화되어 있습니다.

    5. DevOps
    - DevOps 개념
    > 개발+운영을 함께 한다는 것, business, code, test, qa, development, operations

    - DevOps 문화
    - CI/CD 툴 (maven, jira, 컨플언스, 젠킨스 등)
    > code : confluence, jira, git
    > build : maven, sbt
    > test : se, junit
    > release : jenkins, codeship
    > monitor : nagios, splunk, datadog
    > operate : kubernetes, ansible, chef

    > deploy : aws, docker, dc/os

     

     

    docker architecture

     


    https://docs.docker.com/reference/

     

    Reference documentation

     

    docs.docker.com

     

    'ETC.' 카테고리의 다른 글

    웹 비디오/오디오 코덱 가이드  (0) 2022.05.23
    Azure Media Services v3  (0) 2022.04.22
    영상 스트리밍 고찰  (0) 2022.04.20
    오픈소스 프로그래밍 Docker  (0) 2022.03.07
    SourceTree 사용법  (0) 2021.11.26
Designed by Tistory.