구름 쿠버네티스
구름 쿠버네티스 전문가 과정 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 배포 과정
- Application 코드 작성
- Base Image를 이용한 Dockerfile 작성
- Dockerfile Build를 통해 Docker Image 생성
- Docker Container 서비스 테스트
- Public / Private Registry에 Docker Image 배포
- Git 과 같은 버전 관리 도구를 이용하여 Dockerfile 관리
- 지속적인 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 / 이름>
- 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
- ctrl + d
- 실행 중인 Container를 제외한 가능한 리소스 회수
- docker system prune
- 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 에 작성된 글입니다.
반응형