티스토리 뷰


서버 가상화 기술

  • 호스트형 서버 가상화 : 하드웨어 위에 호스트 OS를 설치하고, 호스트 OS에 가상화 소프트웨어를 설치한 후, 이 가상화 소프트웨어 상에서 게스트 OS를 작동시키는 기술. (주로 개인목적)

    VM VirtualBox, VMware Wrokstation Player등

  • 하이퍼바이저형 서버 가상화 : 하드웨어 위에 바로 하이퍼바이저를 배치하여 가상환경을 제어하는 기술. (주로 기업목적)

    Vmware ESXi 등

컨테이너 유형

  • System Container : 여러 Process를 분리 (LXC, Jail, Solaris Zone 등)
  • APP Container : main 서비스는 오직 하나, 가벼움 (Docker 등)

개발자의 Docker

  • 애플리케이션의 실행모듈, 미들웨어나 라이브러리, 인프라 환경설정 등 모든 과정이 하나의 Docker 이미지에 담겨있기 때문에 빠르고 편리하다

Docker 에디션

  • Docker Community Edition(CE) : Docker사가 제공하는 무료 에디션. 매월마다 보안지원과 버그 수정 지원인 Edge, 4분기별로는 안정판인 Stable이 릴리즈 된다.
  • Docker Enterprise Edition(EE) : Docker사가 지원하고 상용 이용에 적합한 에디션. CE의 Stable과 똑같은 타이밍에 릴리즈 된다.

Docker 컴포넌트

  • Docker Engine (핵심기능, Demon) : Docker 이미지를 생성하고 컨테이너를 기동시키기 위한 핵심기능.
  • Docker Registry (이미지 공개 및 공유) : Docker 이미지를 공개 및 공유하기 위한 레지스트리 기능. Docker Hub도 이 Registry를 사용하고 있다.
  • Docker Compose (컨테이너 일원관리) : 여러개의 컨테이너 구성정보를 코드로 정의하고, 명령을 실행함으로써 실행환경을 구성하는 컨테이너들을 일원 관리하기 위한 툴.
  • Docker Machine (실행 환경 구축) : VirtualBox, EC2, Azure와 같은 클라우드 환경에 Docker의 실행 환경을 명령으로 자동생성하기 위한 툴.
  • Docker Swarm (클러스터 관리) : 여러 Docker 호스트를 클러스터화 하기위한 툴. 오픈 소스인 Kubernetes도 이용가능 (Kubernetes는 현재 대기업에서 많이 사용중이다)

Docker 네트워크 구성(가상 NIC)

  • Docker를 설치하면 서버의 물리 NIC가 docker0이라는 가상 브리지 네트워크로 연결. (디폴트로 만들어짐) 주소는 172.17.0.0/16 (B클래스)
  • 외부 네트워크와 통신을 할 땐 NAPT 기능을 사용.
    • NAT과 IP 마스커레이드의 차이
      • NAT : 공인 IP와 사설 IP를 1:1로 변환하기 때문에 동시에 여러 클라이언트가 액세스 할 수 없다.
      • NAPT : 공인 IP와 사설 IP 주소는 똑같지만 포트(: )로 구별하기 때문에 여러 클라이언트가 액세스 할 수 있다.

  • 포트 포워딩을 통한 nginx 웹서버 접속.

    docker container run —name webserver -d -p 80:80 nginx

    • —name : 컨테이너 이름 지정
    • -d : 백그라운드에서 실행
    • -p 80:80 포트포워딩. 앞 80포트는 비어있는 아무 포트 가능하고(호스트포트) 뒤 80포트는 nginx의 기본 포트이기때문에 임의지정 불가능. 포트포워딩 해줌으로써 들어오는 모든 접속을 80포트로 포워딩해준다. 따라서 윈도우(외부네트워크)에서도 포트포워딩된 centos의 아이피주소를 입력하면 nginx페이지에 접속할 수 있다. (80포트는 기본이라 생략 가능하고 나머지 포트로 설정했으면 :포트번호를 적어주어야 한다.)
    • docker ps로 확인해보면 80>80/tcp(포트포워딩 된모습)을 확인해볼 수 있다.

      docker ps = 작동중인 컨테이너만

      docker ps -a = 모든 컨테이너 다 출력

Docker 이미지의 데이터 관리 장치

Docker이미지는 ro전용이기 때문에 수정할 수 없다. 따라서 수정이 필요하다면 rw가 가능한 공간을 새로 만들어서 이미지를 관리하게 된다. 이것을 Union FS라 하는데 그 중에서 OverlayFS를 최근에 가장 많이 사용한다.

Docker 설치

Microsoft가 제공하는 하이퍼바이저인 Hyper-V를 사용하게 되는데 Windows 10 Pro, Enterprise, Education에서 작동한다. 만약 버전이 다르다면 Docker-toolBox를 설치하여 사용하여야 한다

  • Docker-toolBox : VB기반, Docker전용의 가상머신으로서 패키지 설치가 불가능하다, 그래픽도구를 지원한다

Docker 설치과정

  • docker 이미지 push

    docker login

    docker image push rosehs00/app:v1

  • docker 이미지 pull

    docker pull rosehs00/app:v1

    rosehs00 : docker 아이디

    app : repository 이름

    v1 : 태그 이름 (입력 안할시 기본이 latest)

Docker에서 'Hello world' 출력

docker container run ubuntu /bin/echo 'hello world'

  • ubuntu에 따로 태그 지정해주지 않으면 자동으로 latest로 태그
  • 만일 ubuntu이미지가 로컬환경에 없다면 자동으로 먼저 다운로드한다.(자동 pull)

    docker.io 파일은 dockerhub에 있다.

  • 명령어와 수명주기가 같아 echo가 실행되고 중지된다면 컨테이너도 똑같이 중지된다.

Docker 확인

  • 버전 확인 : docker version (centos에선 버전을 다르게 보여주고 ubuntu에선 그대로 보여줌)
  • 실행 환경 확인 : docker system info
  • 디스크 이용 상황 확인 : docker system df

    RECLAIMABLE은 불필요한 이미지 등을 삭제할 때 얻을 수 있는 용량

Web Server 작동시키기

  1. nginx 이미지 다운로드.

    docker pull nginx

  1. nginx 작동.

    docker container run —name webserver -d -p 80:80 nginx

    • —name : 이름지정
    • -d : 백그라운드 작업
    • -p 80:80 : 포트포워딩 작업. 들어온 포트를 뒤 nginx 80포트로 포트포워딩

  1. 서버 상태 확인

    docker container ps

Docker 이미지 조작

  • 이미지 다운로드

    docker image pull -a centos : centos의 모든 태그 이미지 취득

    docker image pull 주소/ID 형태로도 취득가능

  • 이미지 목록 표시

    docker image ls -a : 모든 이미지 표시

  • 이미지 상세 정보 확인

    docker image inspect centos:7 - centos7의 세부정보 확인 (호스트 네임이 따로 지정되지 않으면 컨테이너 이름이 들어감)

  • 이미지 태그 설정

    docker image tag nginx abc/webserver:1.0

    태그를 붙인 이미지와 원래의 이미지는 IMAGE ID가 똑같음.

  • 이미지 검색

    docker search —filter=stars=1000 nginx

    stars의 건수가 1000건 이상인 인기있는 이미지만 검색 가능

  • 이미지 삭제

    docker image rm (-f)

    태그 지정 안하면 동일 image 다 삭제.

    -f 넣으면 강제로 삭제

    docker image prune

    사용하지 않는 이미지 삭제.

    docker rm $(docker ps -a -q)

    작동되고있지 않은 컨테이너 조용히(-q) 다(-a) 삭제(작동중인건 에러를 리턴)

Docker 컨테이너의 라이프 사이클

run은 생성과 시작을 한번에 해줌 (create + start)

컨테이너 생성 및 시작

  • docker run -it --name test1 centos /bin/cal

    -it : 콘솔에 결과를 출력

    —name test1 : 컨테이너명

    centos : 이미지명

    /bin/cal : 실행할 명령

    컨테이너와 명령은 생명주기가 똑같기 때문에 cal(달력)명령을 실행하고 컨테이너가 종료된다.

  • docker run -it --name test1 centos /bin/bash

    -it를 이용하여 콘솔에 출력하면서 bash쉘이 터미널에 계속 물려있기 때문에 종료되지 않는다.

  • docker exec -it webserver /bin/bash

    기존 작동중이었던 webserver컨테이너에 연결한다.

컨테이너 자동 삭제와 재시작

  • —rm : 명령 실행 완료후에 컨테이너를 자동으로 삭제해준다 (테스트하는 상황에 적합)
  • —restart=always : 명령 실행 후 항상 재시작한다. (서비스가 지속되어야 하는 기억에 적합

hostname 지정

  • docker run -it --rm --hostname kms --name test6 centos /bin/bash

    kms의 hostname을 가진 컨테이너 실행

nginx컨테이너 안에는 ps,vi 등 관리 커맨드는 설치 되어있지않기 때문에 ls /bin을 입력하여 있는 명령셋만 사용 가능하다!



'클라우드 보안 융합 전문가 과정 > 리눅스와 도커' 카테고리의 다른 글

리눅스와 도커  (2) 2020.12.29
리눅스  (2) 2020.12.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함