모두를 위한 클라우드 컴퓨팅 5

cloud-computing

컨테이너


패키징 기술 (Packaging technology)


가상화 vs 컨테이너


컨테이너 기술의 역사


컨테이너 vs 가상머신

(1) 머신 가상화
App1      App2      App3
Bins/Lib  Bins/Lib  Bins/Lib
게스트 OS   게스트 OS   게스트 OS
--------- 하이퍼바이저 ---------
-------- 인프라스트럭처 --------
(2) 컨테이너
App1      App2      App3
Bins/Lib  Bins/Lib  Bins/Lib
-------- 컨테이너 엔진 --------
---------- 운영체제 ----------
-------- 인프라스트럭처 --------


컨테이너가 유리한 경우


가상머신이 유리한 경우



도커 (Docker)


구동 방식


도커 아키텍처


구조와 관련된 주요 컴포넌트


도커 클라이언트가 도커 데몬에 보내는 명령 수행과정

$ docker run -i -t ubuntu /bin/bash

(1) 우분투 이미지가 로컬에 없다면 기본 레지스트리인 도커 허브에서 우분투를 로컬로 다운로드한다.
(2) 도커는 다운로드된 이미지로부터 새로운 컨테이너를 생성한다.
(3) 도커는 파일시스템을 생성된 컨테이너에 최상위 레이어로 할당한다.
(4) 컨테이너에 네트워크 인터페이스를 생성해 추가하고 기본 네트워크에 연결한다. (IP 주소도 할당됨)
(5) 컨테이너를 시작하고 /bin/bash를 실행한다.
(6) exit 명령을 입력하면 컨테이너가 중지된다. (삭제는 아니므로 재실행 혹은 삭제할 수 있음)


도커 기반 서비스가 배포될 때 관여되는 주요 컴포넌트


도커 기반 기술


설치해보기


튜토리얼 진행해보기

$ docker run --name repo alpine/git clone https://github.com/docker/getting-started.git
$ docker build -t docker101tutorial .
$ docker run -d -p 80:80 --name docker-tutorial docker101tutorial
$ docker tag docker101tutorial roomyhan/docker101tutorial


도커 명령어 실행해보기

$ docker run -d -p 80:80 docker/getting-started
// 위 명령어는 튜토리얼을 진행했다면 안해도 됨

$ docker --version
$ docker image ls
$ docker container ls
$ docker container ls --all


nginx 띄워보기

// 이미지 목록 확인
docker images

// Docker Hub 이미지 검색
docker search nginx

// Docker Hub 이미지 다운로드 => 6개의 이미지 레이어 다운로드(mac os는 확인 불가 https://iamjjanga.tistory.com/50)
docker pull nginx

// 이미지 목록 확인
docker images

// 컨테이너 목록 확인
docker ps

// 컨테이너 생성 => 기본이 백그라운드 실행
docker create -p 80:80 --name webserver nginx

// 컨테이너 목록 확인 => status created
docker ps -a

// 컨테이너 실행
docker start webserver

// 컨테이너 목록 확인 => status up
docker ps -a

// 페이지 확인
localhost:80

// 컨테이너 로그 확인
docker logs webserver

// 컨테이너 프로세스 확인
docker top webserver

// 컨테이너 세부 정보 확인 => ip, image, resource 등
docker inspect webserver

// 컨테이너 세부 정보 확인 필터 => ip 확인 (IPAddress)
docker inspect --format '{{.NetworkSettings.IPAddress}}' webserver

// 컨테이너 접속 후 bash 쉘 사용 => -i:interactive / -t:terminal
docker exec -it webserver /bin/bash

// nginx 웹 문서 접근
cd /usr/share/nginx/html/

// nginx 웹 문서 변경
echo "ethan's HOMEPAGE" > index.html

// nginx 쉘 종료
exit

// 페이지 확인
localhost:80

// 컨테이너 중지
docker stop webserver

// 컨테이너 목록 확인
docker ps

// 이미지 삭제
docker rmi nginx

// 컨테이너 목록 확인
docker ps -a

// 컨테이너 삭제
docker rm webserver

// 컨테이너 목록 확인
docker ps -a

// 이미지 삭제
docker rmi nginx