4 minute read

일지

내가 특별히 잘하고 있었다고 생각했는데 응 아니죠~ 어림도 없죠~
걍 혼자 열심히 문서 길게길게 많이 써봤자 뭐하냐
당장 옆에서 더 많은 Tool이랑 환경 다루는데, 아무도 읽지않을거 길게쓴다고 무슨의미가있냐

겸손해지고 열심히하자 좀..

주요 키워드

Docker Virtualizing

오늘의 할일

  • 220503 TIL 작성
  • Docker 복습

공부 정리

서버 가상화 VS 컨테이너 가상화

virtualizing

서버 가상화

  • 서버 가상화=전가상화=가상머신(VirtualBox,Vmware)
  • 하드웨어 수준 가상화
  • 가상화도구(Hypervisor)를 사용하여 다수의 Physical GUEST OS(Linux) 구현
    • 장점: 자체 OS를 포함한 모든 구성요소를 사용할 수 있는 완전한 머신임
    • 단점: OS위에 추가적인 독립 OS들을 구성하기 때문에 리소스의 낭비(운영간접비,Overhead) 발생 Guest 1의 resouce(CPU, RAM, 등)가 사용되지않더라도 Guest 2가 해당 리소스를 사용하지 못함

컨테이너 가상화

  • 컨테이너 가상화=컨테이너(Docker, k8s?)
  • OS 수준 가상화
  • 컨테이너(Container S/W)를 사용하여, 다수의 격리된 Logical 어플리케이션 환경 구현
    • 장점: 단일 어플리케이션 구동을 위한 최소한의 환경만 구분 > 빠른 속도
    • 단점: VM 처럼 다양한 OS 사용 불가, 컨테이너간 격리되어있지않음

컨테이너는 어떻게?

howcon

  • LXC (Linux Container)에서 부터 발전해옴
    • chroot: 특정 디렉토리를 root(최상위 디렉토리)로 인식하게 함.
    • Name Space: 리눅스 시스템자원을 묶어 프로세스에 할당함.
    • cgroup: 특정 애플리케이션이 CPU와 메모리같은 특정자원을 과다하게 사용하는것을 방지.
  • 특정 root 디렉토리를 생성하고, 자원을 할당하고, 제어함.

Docker

리눅스 컨테이너를 이용하여 프로세스 단위별 가상화 실행 환경을 제공하는,
Hypervisor보다 가벼운 경량 가상화 기술

특징

  • 가상 OS를 설치하지 않음 - 호스트에서 바로 컨테이너 실행
  • 호스트와 컨테이너의 성능 차이가 유사 - 오차범위 안
  • 이미지 생성과 배포에 특화 - 도커 허브 제공

아키텍쳐(구조)

  • 도커 이미지
    • 서비스 운영에 필요한 프로그램, 코드, 실행파일을 묶은 형태
    • 저장소(도커 허브)에서 올리고 내려 받는 것이 도커 이미지
  • 컨테이너
    • 이미지를 실행한 상태(이미지-컨테이너는 실행파일-프로세스 관계)
    • 이미지로 여러개의 컨테이너 생성 가능
  • 도커 허브
    • 도커 이미지 레파지토리

설치 및 명령어

도커 설치 방법

  • yum 관리도구 설치
    yum install -y yum-utils
  • 도커 관련 레포지토리 추가
    yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 도커 설치
    yum install docker-ce docker-ce-cli containerd.io
  • 도커 시작 및 활성화
    systemctl enable docker –now
  • 도커 설치 및 시작 확인 systemctl status docker
    docker –version

도커 명령어

  • 도커허브에서 이미지 검색
    docker search 이미지명
  • 이미지 다운로드
    docker pull 이미지명:태그
  • 이미지 리스트 확인
    docker image ls or docker images
  • 이미지 ID 리스트 확인
    docker image ls -q or docker images -q
  • 이미지 삭제
    docekr image rm [-f] 이미지명
    => -f 옵션은 컨테이너가 실행되었던 이미지 삭제시
  • 컨테이너가 실행되지 않았던 이미지 삭제
    docker image prune –all
  • 컨테이너가 실행되었던 이미지 삭제
    docker image rm -f $(docker images -q)
  • 이미지 백업
    docker save -o 백업파일명 이미지명 이미지명 ….
  • 이미지 백업 파일 해제
    docker load -i 백업파일명
  • 컨테이너 생성 및 실행
    docker run [option] –name 컨테이너명 이미지:태그 command
    옵션
    -it : 입력값과 출력값이 필요로 하는 컨테이너 경우에 붙임
    -d : attach를 실행하지 않고 백그라운드로 실행만 시킬 경우에 붙임
  • 컨테이너 list 확인 docker ps [-a]
    -a : 종료된 컨테이너까지 확인
  • 컨테이너 삭제
    docker container rm [-f] 컨테이너명
    -f : 실행되고 있는 컨테이너 삭제시 붙임
  • 컨테이너 시작 및 정지
    docker container start / stop 컨테이너명
  • 컨테이너 및 이미지 스펙 확인
    docker inspect 컨테이너명/이미지명
  • 컨테이너 리소스 확인
    docker stats {–no-stream} : 1회성으로 띄울 때
  • 컨테이너 리소스 제한
    docker run –cpus (0.0~1.0) –memory (메모리크기) [옵션] –name 컨테이너명 이미지명:태그
  • 컨테이너 리소스 변경
    docker update –cpus or –memory (limit 제한) 컨테이너명
  • 컨테이너 PID 확인
    docker top 컨테이너명
  • 컨테이너 빠져나오기
    ctrl p q 차례대로 입력
  • 컨테이너 재진입
    docker attach 컨테이너명
  • 컨테이너 분리모드로 실행
    docker exec -it 컨테이너명 실행명령어
    => -it 오는 경우는 shell 명령어 실행시
    second 설정으로 스냅샷

실습 진행사항

ubuntu , mysql:5.7 , centos:7 , httpd 이미지 다운로드

  186  docker pull ubuntu
  187  docker pull mysql:5.7
  188  docker pull centos:7
  189  docker pull httpd

다운로드 이미지 확인

  190  docker images
  191  docker image ls

이미지들의 CMD 항목 확인

docker inspect ubuntu:latest | grep -A 4 Cmd
docker inspect mysql:5.7 | grep -A 4 Cmd
docker inspect centos:7 | grep -A 4 Cmd
docker inspect httpd | grep -A 4 Cmd

ubuntu 이미지 - 아카이브로 저장 
ubuntu  이미지 삭제 후 아카이브로 저장한 이미지 재설치

  192  docker save -o u.tar ubuntu:latest
  193  ls
  194  docker image rm ubuntu:latest
  195  docker image ls
  196  docker load -i u.tar
  197  docker image ls

해당 이미지들 이름은 차례로 os1, mydb, centos7 , web1 , web2 로 httpd만 2개 container 실행

  198  docker run -itd --name os1 ubuntu:latest
  199  docker run --name mydb -e MYSQL_ROOT_PASSWORD=1 -d -p 3306:3306 mysql:5.7
  200  docker run -itd --name centos7 centos:7
  201  docker run -d --name web1 httpd:latest
  202  docker run -d --name web2 httpd:latest
  203  docker ps -a

mysql:5.7 의 WorkingDir 확인

  204  docker inspect mydb | grep WorkingDir
  205  docker exec -it mydb sh

web1과web2의 아이피 주소 확인

  206  docker inspect web1 | grep IPA
  207  docker inspect web2 | grep IPA

web2 container 종료후 다시 시작해 볼 것

  208  docker stop web2
  209  docker ps -a
  210  docker start web2
  211  docker ps -a

mysql:5.7의 이미지를 container까지 삭제하시오.

  212  docker rm  mydb
  213  docker stop mydb
  214  docker rm  mydb
  215  docker image rm mysql:5.7

전체 container 확인 

  216  docker ps -a

ubuntu와 centos 의 백업본을 만들고 기존 이미지 삭제 백업을 이용해서 이미지를 다시 생성해보시오.

  217  docker save -o os.tar ubuntu:latest centos:7
  218  ls
  219  docker image rm -f ubuntu:latest centos:7
  220  docker images
  221  docker load -i os.tar
  222  docker images

ubuntu 와 centos 다시 container 실행

  224  docker run -itd --name os2 ubuntu:latest
  225  docker run -itd --name centos7_1 centos:7
  
container 들에 대한 상태확인하되 실시간이 아니도록 하시오.

  226  docker stats --no-stream

ubuntu에 분리모드로 접속해서 /var/log/의 내용을 보도록 하시오.

  227  docker exec -it os1 bash
  # ls /var/log
  or
  docker exec os1 ls /var/log

web3 컨테이너를 생성
web3 의 웹페이지 내용 확인
curl web3의 IP주소

  228  docker run -d --name web3 httpd:latest
  229  docker inspect web3 | grep IPA
  230  curl 172.17.0.8

Categories:

Updated:

Leave a comment