구름 쿠버네티스

구름 쿠버네티스 전문가 과정 6기 - 41일차

jwlish 2023. 10. 24. 08:54
반응형

리뷰 (Review)

더보기

Docker Engine

  • Docker Image와 Container 관리
  • Client와 통신
  • CLI 방식을 이용하여 Docker 운영

 

Docker 구성 요소

  • Docker Engine - Docker를 이용한 Application 실행 환경 및 관리
  • Docker Hub - Docker Image를 저장하고 공유하는 공식 Public Registry
  • Docker Compose - 의존성있는 독립된 Cotainer에 대한 구성 정보를 YAML 형식으로 작성하여 일원화 된 Application 관리 도구
  • Docker Swarm - 여러 Docker Host를 클러스터로 구축하여 관리할 수 있는 Docker Orchestration 도구
  • Docker Registry - Docker Image 저장소
  • Docker Kitematic - Container를 이용한 작업을 수행할 수 있는 GUI 도구
  • Docker Machine - VM 및 Cloud VM과 같은 가상 컴퓨터 환경에 도커 환경을 구성하는 시스템

 

Docker 기반 Conatiner 배포 과정

  1. Application 코드 작성
  2. Base Image를 이용한 Dockerfile 작성
  3. Dockerfile Build를 통해 Docker Image 생성
  4. Docker Container 서비스 테스트
  5. Public / Private Registry에 Docker Image 배포
  6. Git 과 같은 버전 관리 도구를 이용하여 Dockerfile 관리
  7. 지속적인 Application 관리

 

Docker 명령 구조

  • docker <명령> [옵션] 대상 [인자]

 

Docker 일반 명령

  • docker - Docker 명령 사용법 출력
  • docker version - Docker Version 확인
  • docker system info - Docker 구성 정보 확인
  • docker system df - Docker 디스크 사용량 확인

 

Docker Image 관련 명령

  • Docker Image 이름 형식
    • [<저장소(ropository) 이름>/]<image명>[:<버전 번호>]
  • Docker Hub에서 Image 검색
    • docker search <image명>
  • Docker Image 다운로드
    • docker pull [registry 위치] <image명>
  • 현재 system에 존재하는 Image 목록 확인
    • docker image ls
    • docker images
  • Image 세부 정보 확인
    • docker image inspect <image명>
  • Image 구성 layer와 실행 정보 확인
    • docker image history <image명>
  • Docker Image 삭제
    • docker image rm <image명>
    • docker rmi <image명>

 

Docker Image 명령 보충

  • Docker Image를 tar 파일로 저장
    • docker image save [옵션] <image명> <파일명>
    • docker image save 명령을 사용하는 경우
      • Docker Hub로부터 Image를 다운로드 받아서 내부망으로 이전하는 경우
      • 신규 Application에 대한 Image를 생성한 후 배포 또는 보관하는 경우
      • 네트워크를 통해 Registry에 접속할 수 없는 환경에서 Image를 배포하는 경우
    • ex) docker image save mysql:5.7 > mysql57.tar
  • Docker Image를 저장한 파일 내용으로 image 복원
    • docker image load [옵션] <파일명>
    • ex) docker image load < mysql57.tar

Docker Container 명령어

 

Container

  • Container 생성은 Application 실행과 같은 의미
  • Container는 격리된 환경(가상 환경)에서 동작하는 Linux 프로세스
  • Container 프로세스는 Linux 프로세스로서 관리가 되지만 완전 격리된 프로세스로 동작하며 현재 시스템의 Kernel 기능을 공유한다.
  • 격리된 프로세스이므로 PID는 1번 PID를 갖는다.

 

Container 생성 과정 (생명 주기)

  • docker image 다운로드 (pull) / docker image 생성 (build)
  • docker container 생성 (create) - 격리된 프로세스 생성
  • docker container 실행 (start) - Application 실행
  • docker container 중지 (stop) - 재시작 (restart)
  • docker container 삭제 (remove) - Application 종료

 

Docker Container 관련 명령

  • Container 생성
    • Container 생성이 실행을 의미하는 것은 아니다.
    • docker create <image명> [옵션]
      • --name <container에 부여할 이름> : Container에 이름 부여, 설정하지 않으면 자동으로 임의의 이름 부여
      • -it
        • -i : 대화식 모드 사용
        • -t : tty (단말 디바이스) 사용
      • ex) docker create -it --name test-mysql mysql:5.7

 

  • Container 실행
    • docker start <container ID / 이름>

 

  • Container 재시작
    • docker restart <container ID / 이름>

 

  • Container 중지
    • docker stop <container ID / 이름>

 

  • 동작 중인 Container에 접속
    • docker attach <container ID / 이름>

  • 동작 중인 Container에 명령 실행
    • docker exec <container ID / 이름> <명령>

 

  • Container 삭제
    • docker container rm <container ID / 이름>
    • Application 실행 종료
    • 실행 중인 Container는 삭제할 수 없다.
    • 실행 중인 Container는 docker stop 명령 실행 후 삭제
    • docker rm $(docker ps --filter 'status=exited' -a -q)

 

  • [이미지 다운로드], 생성, 실행 일괄적으로 수행하는 명령
    • docker run [옵션] <image 이름> <container에서 동작 명령> 
    • docker pull + docker create + docker start 명령을 차례대로 입력한 것과 같은 결과 수행
      • -i : 대화식 모드 사용
      • -t : tty (단말 디바이스) 사용
      • -d : 백그라운드에서 컨테이너 실행, Container를 데몬 프로세스로 생성
      • --name <container에 부여할 이름> : Container 이름 부여
      • -h <호스트 이름> : Container의 Host name 부여
      • -rm : Container 종료 후 삭제
      • -p <host port>:<container port> : host port와 container port 연결 (포트 포워딩)
      • -v <host 경로>:<container 경로> : host 경로와 container 경로의 공유 볼륨 설정
      • -e <환경 변수 이름>=<값> : Container 내의 환경 변수 등록
      • --net=네트워크 이름 : Container를 네트워크에 연결
더보기

Container 생성 실습

  • Linux 실행
# dokcer run -it -d --name <container 이름> <Linux 이름>
docker run -it -d --name centos centos:7

# Container 진입
docker exec -it centos bash
# 또는 docker attach centos

 

  • Web Server 실행
    • nginx container 실행, host port 8080을 container 80으로 포트 포워딩
    • container는 docker 가상 네트워크 상에서 동작하므로 host 네트워크와는 다른 네트워크를 사용한다.
# docker run --name <container 이름> -d -p <host port>:<container port> <webserver image 이름>
docker run --name webserver -d -p 8080:80 nginx

 

  • 실행 중인 Container 목록 출력
    • docker container ls [옵션]
    • docker ps [옵션]
      • -a : 생성 / 종료된 Container도 모두 출력
      • 출력 내용
        • CONTAINER ID - Container 생성 시 부여된 임의의 ID, 64자리
        • IMAGE - Container 생성 시 사용한 Image
        • COMMAND - Container 생성 시 실행한 명령
        • CREATE - Container 생성 시간
        • STATUS - 현재 Container 상태
        • PORTS - Container에 port forward 정보
        • NAMES - 임의로 부여된 Container 이름, Container 생성 시 사용자가 지정 가능

 

  • Container에 진입한 상태에서 실행 상태를 유지하면서 빠져나오는 방법
    • ctrl + p 입력 후 ctrl + q
  • Container에 진입한 상태에서 Conatiner를 중지하고 빠져나오는 방법
    • ctrl + d

  • 실행 중인 Container를 제외한 가능한 리소스 회수
    • docker system prune
  • host에 있는 파일을 Container에 지정된 위치에 복사
    • docker cp <원본 파일> <container ID / 이름>:<복사 위치 및 파일 이름>
    • nginx ex) docker cp index.html webserver:/usr/share/nginx/html/index.html

 

Container 모니터링 도구

  • 서비스 운영을 하면서 필요한 시스템 metric (CPU / Memory 사용률, 네트워크 트래픽 등) 을 모니터링하면서 특이사항이 있을 때 대응하기 위해 모니터링 수행
  • Container 환경 하에서는 기존 모니터링 도구로는 Container 모니터링 진행이 어렵다.
  • 구글 제공 cAdvisor (container Advisor) 를 사용하면 GUI 방식으로 Container에 대한 모니터링을 쉽게 수행할 수 있다.
  • cAdviso 참고 자료
  • cAdvisor container 생성 방법
docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  gcr.io/cadvisor/cadvisor

 

  • cAdvisor 실행 방법
    • cAdvisor container가 동작 중인 host IP:8080 로 접속하여 확인

실행 확인

  • Container 리소스 상태 실시간 확인
    • docker stats <container ID / 이름>
    • 시각적으로 확인 시에는 google cAdvisor 사용
  • Container의 실행 중인 프로세스 상태 확인
    • docker top <container ID / 이름>

TIF

스터디 조원분 덕분에 클라우드 엑스포 코리아 2022 채용 설명회 같은 걸 볼 수 있었다.

25분정도로 짧았지만 많은 걸 느끼지 않았나 생각한다.

 

 

2022. 09. 29 에 작성된 글입니다.

반응형