Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker

0 views

Published on

요즘 규모에 상관 없이 서버를 운영하는 웹서비스 업체에서는 도커라는 주제가 화두입니다. 오히려 발빠른 개발자나 운영자들은 이미 도커를 이용하여 서비스를 운영하고 있지요. 본 세션은 도커의 기술적인 내용 보다는 사용자 입장에서 알아야 할 내용을 중심으로 구성됩니다.

Published in: Technology
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes ,Download or read Ebooks here ... ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ..................................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, CookeBOOK Crime, eeBOOK Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker

  1. 1. 누구세요? • 김훈민. (동생 이름이 정음) • 결혼 3년차 남편이자 두 아이의 아빠. • ~2011 웹 개발. • ~2014 성능팀, 오픈소스 메모리 캐시인 Arcus 개발/운영. • ~2015 빌드 배포 시스템인 nDeploy팀 소속.
  2. 2. 다룰 내용 • Docker & Linux Container • Tutorial • Container Orchestration
  3. 3. 지옥에서 온 테이블 node.js 웹 서버 Java API 서버 MySQL 서버 메시지 큐 서버 개발자 PC 동료 PC 팀 개발 장비 QA 개발 장비 스테이징 장비 리얼 장비 * Table based on http://www.slideshare.net/dotCloud/docker-intro-november
  4. 4. 지옥에서 온 테이블 node.js 웹 서버 Java API 서버 MySQL 서버 메시지 큐 서버 개발자 PC 동료 PC 팀 개발 장비 QA 개발 장비 스테이징 장비 리얼 장비 * Table based on http://www.slideshare.net/dotCloud/docker-intro-november
  5. 5. 공용 장비에 손을 대는 순간...
  6. 6. 가상 머신으로 해결!? • 개발 및 배포 환경을 어느 정도 표준화 할 수 있습니다. • 하지만 최초 설정 이후에는 마찬가지 비용이 발생합니다. • 시스템 설정 변경 • 시스템 라이브러리 업그레이드 • … H/W OS Hypervisor VM VM
  7. 7. 지옥에서 온 테이블 2 핸드폰 시계 옷장 피아노 기차 물류창고 지게차 항구 배 트럭
  8. 8. http://aceno1.co.kr/box/box1
  9. 9. 표준화된 컨테이너 핸드폰 시계 옷장 피아노 기차 물류창고 지게차 항구 배 트럭
  10. 10. 각 플랫폼, 모듈을 어디에서든 실행할 수 있는 코드를 위한 컨테이너가 있으면 되겠네요!
  11. 11. 리눅스 컨테이너 • 이미 오래 전 부터 LinuX Container 라는 기능이 있었습니다. • 호스트 환경과 독립된 리눅스 시스템(컨테이너)를 실행하기 위한 시스템 레벨의 가상화 방법. (Hypervisor 없는 VM?) • cgroup • namespace • chroot • Linux Security Modules(LSM), Mandatory Access Control(MAC)
  12. 12. cgroup • 2006년 구글에서 개발하여 2.6.24 커널에 포함. • 각종 시스템 리소스에 대한 접근 제어와 리소스 제약을 담당. • 각 리소스는 subsystem이라 부릅니다. • /sys/fs/cgroup 디렉토리에서 각 subsystem을 확인할 수 있음. • 만약 /sys 디렉토리가 없다면: • sudo mount -t sysfs sysfs /sys
  13. 13. cgroup subsystem • /sys/fs/cgroup • /cpu, /cpuacct, /cpuset • /memory • /blkio • /devices • /freezer, /perf_event https://www.kernel.org/doc/Documentation/cgroups/
  14. 14. namespace • 글로벌 리소스에 대한 프로세스 수준의 격리(isolation)를 제공. • MNT (마운트 지점, 파일시스템) • PID (프로세스) • NET (NIC, 라우팅) • IPC (System V IPC 리소스) • UTS (호스트/도메인 이름) • USER (UID + GID) • 격리된 프로세스는 자기 자신이 시스템에서 유일하다고 착각한다: /proc/1 https://www.kernel.org/doc/Documentation/namespaces/
  15. 15. chroot • 프로세스의 root 디렉토리를 변경 할 수 있다. • chroot • parent 디렉토리를 유지하면서 root 디렉토리를 마운트. • pivot_root • parent 디렉토리 없이 root 디렉토리를 마운트.
  16. 16. https://access.redhat.com/articles/1353593
  17. 17. 리눅스 컨테이너 • 어플리케이션을 격리(isolate)하고 패키징(package) 합니다. • 물리/VM 장비의 여러 요소들을 격리해줍니다. • 리소스 (CPU, 메모리, I/O 등) — cgroup • 네임스페이스 (PID, USER, NET 등) — namespace • 파일시스템 — chroot
  18. 18. * http://www.darkroastedblend.com/2006/12/biggest-ships-in-world-part-3.html
  19. 19. 리눅스 컨테이너를 생성하고 실행하며 배포하는 방식을 대중화 한 플랫폼.
  20. 20. Docker • Docker • Daemon (libcontainer+libnetwork) • Client • Docker Hub: 컨테이너를 유통하는 서비스. • …
  21. 21. Docker • 도커 Daemon을 통해 리눅스 컨테이너를 실행하면: • 도커 이미지를 이용하여 새로운 컨테이너를 위한 파일 시스템을 구성합니다. • 컨테이너를 위한 네트워킹 설정을 변경해줍니다. • 격리된 컨테이너 프로세스를 실행합니다.
  22. 22. Docker Toolbox • 윈도우와 맥에 도커 개발 환경을 꾸며 줍니다. • https://www.docker.com/docker-toolbox • 맥에서는 homebrew로 설치 가능. • $ brew install Caskroom/cask/dockertoolbox
  23. 23. Docker Toolbox • docker: 도커 클라이언트. • docker-machine: 도커 서버를 실행할 수 있는 VM 관리. • docker-compose: 여러 개의 도커 컨테이너를 실행. • kitematic: 개발 장비의 도커 컨테이너를 쉽게 관리할 수 있는 앱. • virtualbox: VM
  24. 24. docker-machine • $ docker-machine create -d virtualbox dev • dev라는 이름을 가진 virtualbox 도커 VM을 생성. • $ docker-machine ls • 생성된 도커 VM 리스트를 확인. • $ docker-machine ssh dev • dev VM에 접속.
  25. 25. docker-machine • $ docker-machine env dev • dev 도커 VM을 사용할 수 있는 환경변수 설정을 확인한다. • $ eval $(docker-machine env dev) • 현재 쉘에서 dev 도커 VM을 사용할 수 있도록 환경변수를 설정. • $ docker-machine stop dev • $ docker-machine rm dev
  26. 26. docker • $ docker run -it --rm busybox top • -it : 실행된 컨테이너와 상호작용 할 수 있도록 설정. • --rm : 컨테이너 실행이 끝나면 삭제. • busybox : 실행할 컨테이너. • top : 컨테이너가 실행할 명령의 옵션.
  27. 27. docker • $ docker ps • $ docker logs <container_id> • $ docker rm <container_id> • $ docker rmi <image_id> • $ docker exec <container_id> <command>
  28. 28. XpressEngine
  29. 29. 이렇게 구성하려 합니다 XE Core MariaDB :80 :3306 https://github.com/hoonmin/xecore
  30. 30. Docker Image • <네임스페이스>/<이름>:<태그> • mariadb:latest • php:5.6-apache • hoonmin/xecore:1.8.14 • hoonmin/xecore:latest
  31. 31. Dockerfile FROM php:5.6-apache RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev && rm -rf /var/lib/apt/lists/* # 필요한 PHP extension을 설치 합니다. RUN docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr && docker-php-ext-install gd RUN docker-php-ext-install mysqli # XE Core를 다운로드 합니다. RUN curl -o /var/www/xe.tar.gz -OL https://github.com/xpressengine/xe-core/releases/download/1.8.14/xe.1.8.14.tar.gz # 호스트의 저장소와 연결할 수 있는 볼륨을 정의합니다. VOLUME /var/www/html WORKDIR /var/www/html # 실행 커맨드 CMD ["apache2-foreground"]
  32. 32. Docker Image • docker build -t hoonmin/xecore:1.8.14 . • -t : 빌드 할 이미지 이름 • hoonmin : 이미지의 네임스페이스 (그룹) • xecore : 이미지 이름 • 1.8.14 : 이미지의 태그 • . : Dockerfile이 위치한 디렉토리
  33. 33. Docker Container: xecore • docker run -it --rm hoonmin/xecore:1.8.14 • -it : foreground로 동작시키는 경우, 쉘에서 상호작용 가능하게. • --rm : 실행이 끝난 컨테이너를 삭제합니다. • hoonmin/xecore:1.8.14 : 이미지 이름 • docker ps • 실행 중인 도커 컨테이너의 리스트를 확인합니다.
  34. 34. Docker Container: mariadb • docker run -d -e MYSQL_ROOT_PASSWORD=root --name db --p 3306:3306 mariadb • -d : background 프로세스로 동작시킵니다. • -e : 컨테이너 안에서 사용될 환경 변수를 설정합니다. • --name : 컨테이너의 이름을 지정합니다. • -p 3306:3306 : 컨테이너가 노출한 포트를 호스트의 포트와 매 핑합니다. <host_port>:<container_port>
  35. 35. Docker Hub • https://hub.docker.com/ • 회원 가입이 필요합니다. • docker login • docker push hoonmin/xecore:1.8.14
  36. 36. DB를 밖으로 노출하기 싫어요 XE Core MariaDB :80
  37. 37. Link • 같은 호스트에 있는 컨테이너를 연결하여 호스트에 포트를 노출시 키지 않아도 직접 통신할 수 있게 해줍니다. • docker run -d --name db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=xe -e MYSQL_USER=xe -e MYSQL_PASSWORD=xe mariadb • docker run -d -p 80:80 --link db:db hoonmin/xecore:1.8.14 • --link <name>:<alias>
  38. 38. 두 컨테이너를 함께 실행할 수 없나요? XE Core MariaDB :80docker-compose XE Core :80
  39. 39. docker-compose • 여러 개의 도커 컨테이너를 묶어 함께 실행할 수 있습니다. • docker-compose.yml 파일을 정의해야 합니다. • docker-compose up -d • up : 정의된 컨테이너를 실행. • -d : 백그라운드로 실행. docker-compose.yml xecore: image: hoonmin/xecore:1.8.14 ports: - 80:80 db: image: mariadb environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: xe MYSQL_USER: xe MYSQL_PASSWORD: xe ports: - 3306:3306
  40. 40. 도커 호스트가 여러 개 XE Core :80XE Core :80 XE Core MariaDB :80XE Core :80
  41. 41. docker-swarm • 여러 개의 도커 호스트를 마치 하나인 것 처럼 묶어주는 서비스. • master는 node를 관리하며 도커 API 와 동일한 API를 제공. Master Node
  42. 42. docker-swarm 설치 • docker run swarm create : 토큰값 확인 • docker-machine create -d virtualbox --swarm --swarm- master --swarm-discovery token:// d9a8bec868295f81eb28b331c7d8ac8b swarm-master • docker-machine create -d virtualbox --swarm --swarm- discovery token://d9a8bec868295f81eb28b331c7d8ac8b swarm-node-01
  43. 43. swarm을 이용하여 배포 • eval $(docker-machine env --swarm swarm-master) • swarm-master 도커 VM 환경에서 swarm API를 사용. • docker-compose up -d • 도커 컨테이너가 swarm-master, swarm-node-01 두 대의 서 버에 적절히 배분되어 실행됩니다. • docker-compose scale xecore=2 • xecore 컨테이너의 개수를 2개로 늘립니다.
  44. 44. DB 연결이 안되는데요…? XE Core :80XE Core :80 XE Core MariaDB :80XE Core :80
  45. 45. docker overlay networking XE Core :80XE Core :80 XE Core MariaDB :80XE Core :80 overlay my_net
  46. 46. docker networking • libnetwork • 도커의 네트워크 관련 코드가 들어 있는 라이브러리. • 도커 1.7 부터 실험적으로 포함되었다가 1.9 버전에서 정식 출시. • docker network ls • docker network create -d overlay my_net
  47. 47. built-in overlay network • overlay network • 같은 L2 (MAC) 네트워크에 연결되어 있지 않은 서버들이 서로 L2 통신을 할 수 있도록, 터널링 등의 기술을 활용.
  48. 48. networking을 위한 도커 VM • docker-machine create -d virtualbox consul • docker $(docker-machine config consul) run -d -p 8500:8500 -h consul progrium/consul -server -bootstrap • docker-machine create -d virtual box • --swarm —swarm-master • --swarm-discovery="consul://$(docker-machine ip consul):8500” • --engine-opt="cluster-store=consul://$(docker-machine ip consul):8500 • --engine-opt=“cluster-advertise=eth1:0” swarm-master
  49. 49. 다시 docker-compose • 도커 1.9 부터 docker-compose와 networking이 연동됩니다. • docker-compose --x-networking --x-network- driver=overlay up -d • --x-networking : networking 실험 기능을 활성화 합니다. • - -x-network-driver : networking 드라이버를 선택합니다. • null, host, bridge, overlay, calico, …
  50. 50. Docker Networking
  51. 51. 컨테이너 하나 docker0 (10.1.15.1/24) veth2c8f4f4 (10.1.15.2/24) NGINX veth13f8c56 eth0 (192.168.0.100)
  52. 52. 컨테이너 둘 docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX veth13f8c56 eth0 192.168.0.100 eth0 (veth80d8ec5) 10.1.15.3/24 JENKINS vetha451781
  53. 53. NGINX 포트를 노출 docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 eth0 (veth80d8ec5) (10.1.15.3/24) JENKINS:8080 DNAT :80 —> 10.1.15.2:80 (iptables) -p 80:80
  54. 54. NGINX와 JENKINS 연결 docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 eth0 (veth80d8ec5) (10.1.15.3/24) JENKINS:8080 DNAT :80 —> 10.1.15.2:80 (iptables) link JENKINS_PORT_8080_TCP
  55. 55. 호스트가 다르다면? docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 docker0 10.1.20.1/24 eth0 (veth80d8ec5) 10.1.20.2/24 JENKINS:8080 eth0 192.168.0.200 DNAT 80 DNAT 8080
  56. 56. 포트가 여러 개 필요하다면? docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 DNAT 80 docker0 10.1.20.1/24 eth0 10.1.20.2/24 JENKINS:8080 eth0 192.168.0.200 eth0 (10.1.20.3/24) JENKINS:8080 ?
  57. 57. Overlay Network docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 docker0 10.1.20.1/24 eth0 10.1.20.2/24 JENKINS:8080 eth0 192.168.0.200 eth0 (10.1.20.3/24) JENKINS:8080
  58. 58. CoreOS Flannel docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 docker0 10.1.20.1/24 eth0 10.1.20.2/24 JENKINS:8080 eth0 192.168.0.200 eth0 (10.1.20.3/24) JENKINS:8080 flannel.1 10.1.15.0/16 flannel.1 10.1.20.0/16 overlay vxlan
  59. 59. TIPS
  60. 60. Timezone • 도커 컨테이너가 실행될 때 timezone이 디폴트로 맞춰집니다. • 그런데 이 timezone을 설정할 좋은 방법이 아직은 없습니다. • https://github.com/docker/docker/issues/12084 • -v /etc/localtime:/etc/localtime로 볼륨 설정. • ENTRYPOINT에 별도의 스크립트를 둬서 런타임에 설정.
  61. 61. Private Registry • docker run -d -p 5000:5000 registry:2.2 • 예전 v1 버전은 가능하면 사용하지 마세요. • 꼭 필요하다면 검색기능 OFF • LDAP 등의 인증을 붙이려면 별도의 인증 서버를 사용해야 합니다. • https://github.com/cesanta/docker_auth • UI가 필요한 경우: • https://github.com/SUSE/Portus
  62. 62. 스토리지 드라이버 • DeviceMapper • 스토리지 pool 크기에 주의. (100GB default) • AUFS, Overlay (추천) • 비슷한 성향의 파일시스템. Overlay는 3.18 커널부터 지원. • 파일 개수가 많아지면 느려지거나 쓰기가 불가능해질 수 있다. • overlay는 inode 개수를 모니터링 해주어야 한다. (df -ih) • BTRFS
  63. 63. docker-proxy • 포트를 publish 하면 다음과 같이 두 개의 장치가 마련됩니다. • iptables DNAT rule, docker-proxy 프로세스 • 왜 뜨는가? • 도커 호스트에서 localhost:<published_port>로 접근하기 위함. • https://github.com/docker/docker/issues/8356 • 없애는 방법 (2.6.x 커널 제외) • docker daemon --userland-proxy=false ..

×