본문 바로가기
GOORM

GOORM: Kubernetes-32

by hxunz 2021. 12. 25.
  1. Facts 
    : Docker 컨테이너 생성/ 시작/ 정지에 대해서 배움

  2. Findings
    :
    컨테이너 조작을 위한 기본 명령
     - 컨테이너 생성 (docker container create) : 이미지로부터 컨테이너를 생성. 이미지에 포함될 Linux의 디렉토리와 파일들에 대한 스냅샷을 취한다.

     - 컨테이너 생성 및 시작 (docker container run) : 이미지로부터 컨테이너를 생성하고 컨테이너 상에서 임의의 프로세스를 시작. 외부에서 컨테이너의 프로세스에 액세스
     - -i 옵션 : 컨테이너의 표준 출력을 연다
     - -d : 백그러운드에서 실행할 때 = 디태치 모드
     - docker container logs : 백그라운드에서 실행되고 있는지 아닌지
     - docker container rum [네트워크 옵션] 이미지명[:태그명] [인수] : 네트워크 설정
     - --expose : 지정한 범위로 포트 번호 할당
     - -P : 호스트 머신의 임의의 포트를 할당할 때
    - docker container run [자원 옵션] 이미지명[:태그명] [인수] : 자원을 지정하여 컨테이너 생성 및 실행
     - --memory : 메모리 사용량 지정
     - --cpu-shares : CPU 시간 지정
     -v(--volume) : 호스트 OS와 컨테이너 안의 디렉토리를 공유하고 싶을 때


     - 컨테이너 시작(docker container start) : 정지 중인 컨테이너를 시작할 때

     - 컨테이너 정지(docker container stop) : 실행중인 컨테이너를 정지. 재시작할 때는 docker container restart
     - docker container kill. :강제적으로 컨테이너를 정지

     - 컨테이너 삭제(docker container rm) : 정지중인 컨테이너 프로세스를 삭제
     - docker container prune : 정지중인 모든 컨테이너 삭제

     - 컨테이너 중단/재개 (docker container pause/ docker container unpause)

     - docker container ls : 가동 컨테이너 목록 표시
     - -f : 표시할 컨테이너를 필터링
     - --format : 출력 형식을 변경

     - docker container stats : 컨테이너 가동 확인
     - docker container top : 컨테이너에서 실행 중인 프로세스를 확인할 때



    <수업 필기>

    인프라 : 서버 + 네트워크 + 스토리지
    서버 : 서비스를 제공하는 시스템 (물리적인 시스템 / 가상머신 / 클라우드)
    서버 구성 시 어플리케이션 개발 / 테스트 등에 집중하기 위해  -> 도커 / 클라우드 사용이 유리
    클라우드 : 어플리케이션에 집중할 수 있게 나머지를 알아서 구성
     도커 (컨테이너 가상화) : 환경의 영향을 최소화 하려고
    쿠버네티스 : HA(클러스터)

    도커정의 (리눅스 컨테이너 관리)
     - 컨테이너 가상화를 사용하는 소프트웨어
     - 컨테이너를 실행하고 관리하는 소프트웨어 (컨테이너 런타임 / 엔진)

    도커에서 사용하는 기술 (리눅스 커널의 기술)
     - namespace : 컨테이너에서 실행하는 프로세스를 포함해서 여러 개체들의 구분을 위해
     - cgroup : 컨테이너 단위로 리소스 할당량 등을 제어 
     - 소프트웨어 브릿지 : 컨테이너와 물리적인 시스템의 인터페이스를 연결
     - 계층적 파일 시스템 : 이미지(원본)을 유지한 채 컨터에이너에서 쓰기 작업을 지원(COW)

    도커 오브젝트
     - 이미지 : 실행하려는 어플리케이션에 필요한 모든 파일들의 집합
    docker image pull : 이미지를 다운로드 (도커 허브)
                          ls : 로컬의 이미지 목록을 확인
                         inspect : 이미지의 자세한 정보 확인
                           rm :  이미지를 삭제
                          prune : 이름이 없는 이미지를 제거(-a 옵션 사용 시 모든 이미지 삭제) 
                          save : 로컬의 이미지를 백업 (아카이브)
                          load : 이미지 복원
    docker search : 허브에서 이미지 검색 시 사용

     - 컨테이너 : 이미지(파일)을 실행한 상태
    docker container create : 컨테이너 생성
                                start : 생성/중지 상태의 컨테이너를 실행
                                run : 생성+실행 (create+start)
                                          -it : 쉘을 실행하는 이미지면 필수
                                          -d : 컨테이너에 연결하지 않을 때 사용          
                                stop / restart : 동작을 중지 / 재시작
                                ls (ps) : 컨테이너 목록 확인 (-a 옵션:전체 목록 확인)  
                            inspect : 
                                pause / unpause : 일시중지 / 해제
                                rm / prun : 컨테이너 삭제 (-f옵션:강제)

                                top : 컨테이너 내부의 프로세스 상태를 확인 (PID가 호스트 기준)
                                kill : 컨테이너 내부의 프로세스에 신호 전달 (kill)

                                stats : 컨테이너의 리소스 사용량 (제한량)
                                update : 컨테이너의 리소스 제한량 수정
                                run —cpus / —memory …

                                logs : 컨테이너 내부의 작업 내역을 확인

     - 네트워크
     - 볼륨

<실습>
1. alpine:latest 이미지를 다운로드하세요
docker image pull alpine

2. 위 이미지의 자세한 정보를 통해 컨테이너 실행 시 어떤 프로세스가 동작하는지 확인하세요
docker image inspect alpine:latest | grep -A3 Cmd

3.컨테이너 이름을 a1으로 지정해서 컨테이너를 up 상태가 되도록 실행하세요
docker container run -itd —name a1 alpine:latest

4.mysql:lastest 이미지를 컨테이너로 실행해보세요 (종료됨)
docker container run -itd mysql:latest

5.위 이미지가 어떤 문제로 종료된 것인지 확인하고 정상적으로 동작하도록 실행해보세요
docker container ls -a
docker container log youthful _mayer
docker container run -d -e MYSQL_ROOT_PASSWORD=123 —name db1 mysql:latest

6.alpine 이미지를 이용해서 sleep 1000 프로세스가 동작하도록 실행해보세요
docker container run -itd —name a2 alpine:latest sleep 1000

7. httpd 이미지를 web 이라는 이름으로 실행하세요
docker run —name web -d httpd:latest

8. web 컨테이너 내부에서 index.html 파일의 내용을 편집기를 통해 수정하세요
docker container exec -it web bash
docker container inspect web
curl 172.17.0.4
echo “host created” > index.html

9. 호스트 시스템에 index.html 파일을 새로 만들고 web 컨테이너 내부로 복사하세요
docker container cp index.html web:/usr/local/apache2/htdocs/index.html

10. 8/9번에서 변경된 컨텐츠가 적용되는지 호스트에서 curl 명령어로 확인합니다.
curl 172.17.0.4

11. a1 컨테이너는 정상종료하고 web 컨테이너는 강제종료 하세요
docker container stop a1
docker container kill web

12. 모든 중지된 컨테이너를 삭제합니다
docker container prune

13. 실습에 사용한 alpine/mysql 2개의 이미지를 ex.tar로 백업하고 해당 이미지는 삭제하세요
docker image save mysql:latest alpine:latest -o image.tar
docker rm -f $(docker ps -aq)
docker image rm alpine:latest
docker rmi mysql:latest

'GOORM' 카테고리의 다른 글

GOORM: Kubernetes-34  (0) 2021.12.25
GOORM: Kubernetes-33  (0) 2021.12.25
GOORM: Kubernetes-31  (0) 2021.12.25
GOORM: Kubernetes-30  (0) 2021.12.06
GOORM: Kubernetes-29  (0) 2021.12.02

댓글