-
내가 공부한 도커 핵심요약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