1 of 40

Duruan NFVi Infra

2018.04 황인성

2 of 40

Chapter

  • Docker 개념
  • Docker 사용법
  • ShadowCube Dockerizing
  • Duruan NFVi Infra

3 of 40

Docker 개념

4 of 40

목차

  • VM 과 Docker
  • Image & Container
  • Network
  • Storage
  • Swarm

5 of 40

1. VM 과 Docker

6 of 40

2. Image & Container

  • Image 란?�Container 실행에 필요한 파일과 설정 값 등을 포함하고 있는 것
  • Container 란?�Image 를 실행한 상태라고 보면 되며, �추가되거나 변하는 값은 Container 에 저장 됨

Image

7 of 40

3. Network

  • bridge�같은 bridge network 에 연결된 Container �끼리만 통신할 수 있는 network driver�

  • host�Container 는 Host PC 에서 격리되지 않음

8 of 40

3. Network

  • overlay�Host network 환경의 상단에 위치하여 연결된 Container 들을�안전하게 통신할 수 있는 구조
  • macvlan�네트워크 트래픽을 모니터링하는 Container 의 경우 실제�network 에 직접 연결해야 하는데 이때 사용할 수 있는 driver�
  • none�none 옵션으로 Container 생성 시, network interface 가 없는 상태로 생성됨

9 of 40

4. Storage

  • Docker 는 Union File System 을 사용�
  • Container 내부에서 파일을 저장한다면 다음과 같은 문제가 발생할 것임
    • Container 가 종료되면 데이터를 가져올 수 없음
    • Container 끼리 파일 공유 안됨
    • 성능 저하�
  • 변경되는 부분은 Host 에 저장할 수 있도록�volume 기능을 제공함

10 of 40

4. Storage

  • bind�Host 시스템의 파일이나 디렉토리를 mount 할 수 있음�
  • volume�Docker 가 관리(/var/lib/docker/volumes/)하는 Host 파일 시스템 일부에 저장됨�
  • tmpfs�Host 시스템의 메모리에 저장됨

11 of 40

5. Swarm

  • 기존에는 여러 대의 서버 PC에 다양한 어플리케이션을 설치하였음 �예) Web, DB 등
  • 여러 대의 PC 의 어플리케이션을 효율적으로 관리하는 것이 어려운데, �예) 로그 관리, IP / Port, 리소스 관리 등
  • 이러한 것을 효율적으로 관리할 수 있는 기능

12 of 40

5. Swarm 에서 사용하는 용어

  • Node�서버 단위. Manager, Worker 로 구분함
  • Service�배포되는 단
  • Stack�Container < Service < Stack

13 of 40

5. Swarm 에서 제공하는 기능

  • HA: Service 2개 이상 사용 시, Service 1개가 죽더라도 다른 Service 에서 처리 가능�
  • Scheduling: 여러 Node 에 Container 를 배포할 수 있고, CPU, Memory 사용량을 설정할 수 있음�
  • Multi Host Network: Overlay Network 으로 여러 Node 에 분산된 Container 를 하나의 네트워크로 묶을 수 있음. 즉, 다른 Node 에 있더라도 하나의 네트워크로 묶을 수 있음�
  • Rolling Update: Service 업데이트 시, 순차적으로 업데이트할 수 있음�
  • Health Check: Service 가 정상인지 체크할 수 있음�
  • Logging: 다른 Node 에서 전송하는 Service 의 로그를 한 곳에서 볼 수 있음�
  • Monitoring: 3rd party 서비스를 사용하여 리소스 모니터링 가능함�

(여기서 말하는 Service 는 하나의 Application 단위)

14 of 40

Docker 사용법

15 of 40

목차

  • Docker 설치
  • image (pull / list / rmi / etc...)
  • container (run / ps / stop / rm / etc…)
  • network & volume (list / inspect / prune / etc...)
  • Dockerfile
  • docker-compose
  • swarm (init / join / list / leave / etc…)
  • stack
  • service (list / log / scale / rolling update / etc...)

16 of 40

1. Docker 설치

$ sudo apt-get update

$ sudo apt-get install apt-transport-https \� ca-certificates \� curl \� software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

$ sudo add-apt-repository \

"deb [arch=amd64] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) \

stable"

$ sudo apt-get update

$ sudo apt-get install docker-ce

17 of 40

2. image

  • search

$ docker search ubuntu�

  • pull

$ docker pull ubuntu:latest�

  • list

$ docker images�

  • remove

$ docker rmi ubuntu:latest

18 of 40

3. container

  • run

$ docker run -it --name hello ubuntu bash

-it: interactive option

--name hello: container 명을 hello 로 지정

ubuntu: image 명

bash: ubuntu image 에 bash 명령으로 실행

  • list

$ docker ps -a

-a: list all (exited 된 Container 까지 출력)�

  • start / stop / restart

$ docker start hello

19 of 40

3. container

  • attach (Container 접속)

$ docker attach hello�

  • exec (Container 안의 명령 실행)

$ docker exec hello ps -ef

$ docker exec -it hello bash�

  • remove

$ docker rm hello

$ docker rm -f hello

20 of 40

4. network & volume

  • list

$ docker network ls�

  • inspect

$ docker network inspect bridge�

  • prune (사용하지 않는 것 제거)

$ docker network prune

21 of 40

5. Dockerfile

  • build

$ docker build -t myimage:tag .

FROM

base 가 될 image 명

RUN

명령을 실행

ENV

환경변수

WORKDIR

RUN, CMD, ENTRYPOINT 명령이 실행될 디렉터리

EXPOSE

Host 와 연결 될 port 번호

VOLUME

Host 시스템에 mount 할 수 있는 옵션

ENTRYPOINT

Container 시작 시 시작될 스크립트 또는 명령어

CMD

ENTRYPOINT 가 있으면 매개변수가 되고, 없으면 Container 시작 시 명령어

22 of 40

6. docker-compose

  • compose 는 여러개의 Container 를 정의하고 실행할 수 있음
  • yaml 파일을 사용하여 compose 를 구성할 수 있음

  • Use cases
    • 개발 환경
    • 자동 테스트 시스템
    • deploy 시스템

  • 사용법

$ docker-compose up -d

$ docker-compose down

23 of 40

7. swarm

  • init�$ docker swarm init --advertise-addr 10.10.0.50

Swarm initialized: current node (4fak097999sik2bph9j2u1gfa) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join \

--token SWMTKN-1-3aw8a6iqn5itaxrz1xzpv8dxmbbabx0ae52be5pyug2ycjnqwd-2fxkgi2khi7u8b1v90hh6hdby \

10.10.0.50:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

  • join�$ docker swarm join --token SWMTKN-1-3aw8a6iqn5itaxrz1xzpv8dxmbbabx0ae52be5pyug2ycjnqwd-2fxkgi2khi7u8b1v90hh6hdby 10.10.0.50:2377
  • node list�$ docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUS�4fak097999sik2bph9j2u1gfa * cloud Ready Active Leader�
  • leave$ docker swarm leave --force

24 of 40

8. stack

  • compose 는 swarm mode 가 아닌 일반 standalone 에서만 사용 가능
  • swarm mode 에서는 docker stack 으로 compose 를 대체�
  • deploy & redeploy�$ docker stack deploy -c docker-compose.yml ShadowCube

  • list�$ docker stack ls�
  • remove�$ docker stack rm ShadowCube

25 of 40

9. service

  • list�$ docker service ls�
  • scale out�$ docker service scale SCPC_Service=2

  • rolling update�$ docker service update --image scpc:6.1.8 SCPC_Service�
  • log�$ docker service logs SCPC_Service

26 of 40

ShadowCube Dockerizing

27 of 40

목차

  • 신규 설치
  • 업데이트
  • High Availability
  • SCPC 구성
  • Volume 구성

28 of 40

1. 신규 설치

$ docker stack deploy -c docker-compose.yml ShadowCube� ① ② ③

①: docker stack 명령어

②: docker-compose 파일 (두루안에서 제공)

③: Stack 명칭

29 of 40

2. 업데이트

$ docker service update --image scpc:6.1.8 scpc.1.abcdef� ① ② ③

①: docker service update 명령어

②: 업데이트할 image 명

③: stack 에 의해 생성된 service 명

30 of 40

3. High Availability

  • Scale out �효과: load balance (replicate)��$ docker service scale scpc.1.abcdef=2�
  • Rolling update�효과: service 정지 없이 update 됨��$ docker service update --image scpc:6.1.8 scpc.1.abcdef

31 of 40

4. SCPC 구성

  • scpc_data�apache2 웹 서버 역할�scpc 웹 서버 호스팅을 위한 소스가 존재�
  • scpc_db�postgres DB 역할�
  • scpc_mail�smtp 서버 역할��

32 of 40

5. Volume 구성

  • scpc_data
    • scpcdata
    • logs
  • scpc_db
    • pgdata
    • scpcdb��

33 of 40

Duruan NFVi Infra

(bowhead)

34 of 40

목차

  • Log Router
  • Proxy
  • Monitoring (cadvisor / grafana / telegraf)
  • Elastic Search
  • WebManager

35 of 40

1. Log Router

  • Fluentd�Docker service 에서 보내는 log 를 수집하는 서비스

36 of 40

2. Proxy

  • Swarm listener

docker swarm 이벤트를 듣고 변경이 발생하면 요청을 보내는 서비스�

  • Flow proxy

Proxy 서비스

37 of 40

3. Monitoring

  • Host System / Docker Container 의 리소스를 monitoring 하는 서비스��

Cadvisor grafana telegraf

38 of 40

4. Elastic Search

  • 분산형 검색엔진

39 of 40

5. Web Manager

  • Duruan Product 서비스 관리

40 of 40

감사합니다.