class: center, middle, title-slide, inverse ## Docker와 함께하는 R ### <https://mrchypark.github.io/docker-with-r> #### [[pdf버전]](https://github.com/mrchypark/docker-with-r/blob/master/docs/docker-with-r.pdf) [[문의하기]](http://pf.kakao.com/_RXANd) [[의견 및 오류 신고]](https://github.com/mrchypark/docker-with-r/issues/new) #### [스타누르기](https://github.com/mrchypark/docker-with-r)는 컨텐츠 제작자를 춤추게 합니다. ### 박찬엽 ### 2017년 11월 28일 --- class: inverse ## 목차 1. 발표자 소개 2. 도커 소개 - 가상화란 - 컨테이너란 - 기초 용어 소개 3. Kitematic으로 시작하기 - Kitematic - 이미지 검색 - 컨테이너 생성 - 서버 사용하기 - 볼륨 설정 4. Terminal에서 사용하기 --- class: inverse <br> .center[ ### .pen-p[질문 / 상담 / 잡담 대환영!] ] .pull-left[ .pull-right[ <br> <br> <br>  ] ] .pull-right[ ### 박찬엽 - 서울도시가스 선행연구팀 연구원 * 챗봇 엔진 개발 및 서버 구축 - 패스트 캠퍼스 데이터 분석 R 강의 * [데이터 분석을 위한 중급 R 프로그래밍](http://www.fastcampus.co.kr/data_camp_dabrp/) - R 네이버 뉴스 크롤러 [N2H4](https://github.com/forkonlp/N2H4) 관리자 * [ForkonLP](https://forkonlp.github.io/) 프로젝트 - .yellow[**KAKAO**]@[알코홀릭](http://pf.kakao.com/_RXANd) R 질문방 - .blue[**FACEBOOK**]@[mrchypark](https://www.facebook.com/mrchypark) - .gray[**GITHUB**]@[mrchypark](https://github.com/mrchypark) ] --- class: inverse ## 우선 공부할 수 있는 자료들 - [초보자를 위한 도커 안내서](https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html) - [도커 한글 문서/영상 자료집](http://documents.docker.co.kr/) ## 다운로드 ### 잘 모르신다면 windows home일 것이므로 toolbox 설치 진행 - windows home > [docker toolbox][toolbox] - windows pro > [docker for windows][dockerforwindow] ### unix 계열 - mac > [docker for mac][dockerformac] - linux > [docker][dockerlinux] [toolbox]: https://docs.docker.com/toolbox/toolbox_install_windows/ [dockerforwindow]: https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows [dockerformac]: https://docs.docker.com/docker-for-mac/install/#download-docker-for-mac [dockerlinux]: https://docs.docker.com/engine/installation/ --- class: center, middle, title-slide, inverse [](https://www.docker.com/) ## .pen-p[는 사랑입니다.] --- class: center, middle, title-slide, inverse ## 도커란 ### .blue[컨테이너] 기반의 오픈소스 .yellow[가상화] 플랫폼  --- class: inverse ## .yellow[가상화]란 소프트웨어로 물리 컴퓨터를 흉내내어 가상의 컴퓨터가 있는 것으로 자원을 나눠 활용하는 것. .pull-center[.set[]] --- class: center, middle, title-slide, inverse  --- class: center, middle, title-slide, inverse  --- class: center, middle, title-slide, inverse  --- class: center, middle, title-slide, inverse ## .pen-p[모두 가상화 도구들] --- class: center, middle, title-slide, inverse ## vm과 docker의 차이 .pull-center[.set[  ]] --- class: inverse ## 그럼 .blue[컨테이너]란 격리된 공간에서 환경을 구축하여 프로세스가 동작하는 기술 .pull-center[.set[  ]] --- class: inverse ## 정말 컨테이너는 어떤 의미 였을까 .pull-left[ ### [컨테이너의 표준화](http://dbr.donga.com/article/view/1203/article_no/7393) - 짐이 최초로 컨테이너에 들어가는 순간부터 나오는 마지막까지 중간 운송 인프라에 의해 운송 비용이 매우 저렴해짐 ] .pull-right[  ] --- class: inverse ## 도커 컨테이너에 의해서 - 컨테이너의 재현성 보장 - 개발환경과 배포환경이 일치되어 배포 비용이 매우 저렴해짐  --- class: inverse ## image .pull-center[.set[  ]] --- class: inverse ## 효율적인 이미지 레이어  --- class: inverse ## 용어 - 클라이언트 : 호스트에 명령을 내리는 인터페이스. 보통 terminal에서 명령어 기반으로 진행 - 호스트(서버) : 데몬 기반으로 실제 컨테이너가 실행되고 이미지가 관리되는 공간 - 이미지 : 컨테이너 실행에 필요한 파일과 설정값을 가진 모움으로 build하여 완성하고 변경하지 못함. - 레지스트리 : 이미지를 공유하기 위한 공간으로 외부 요청에 대응하여 이미지를 저장, 전달, 업데이트 등을 진행. - [데몬][daemon] : 백그라운드에서 실행되어 지정된 작업을 하는 프로그램(프로세스) [daemon]: https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%AA%AC_(%EC%BB%B4%ED%93%A8%ED%8C%85) --- class: inverse ## Kitematic 소개  --- class: inverse 실행화면 - virtualbox로 실행됨  --- class: inverse 실행 홈  --- class: inverse 이미지 검색 - rocker/tidyverse  --- class: inverse create 선택  --- class: inverse 이미지 다운로드 중  --- class: inverse 실행됨  --- class: inverse setting 화면  --- class: inverse Volumes 설정  --- class: inverse Change 클릭 후 프로젝트 폴더 선택  --- class: inverse local folder 설정 확인  --- class: inverse home 화면으로 돌아가 접속 주소 확인  --- class: inverse 브라우저에서 실행확인 - rstudio/rstudio  --- class: inverse 로그인 완료!  --- class: inverse kitematic 폴더 확인  --- class: inverse 그럼 tenserflow는?  --- class: inverse 다운로드  --- class: inverse web preview  --- class: inverse token 복사  --- class: inverse login  --- class: inverse welcome to jupyter  --- class: inverse hellow tensorflow  --- class: center, middle, title-slide, inverse ## [konlp][konlp]의 자바 세팅이 힘들다면?? ### [mrchypark/konlp][konlpdocker] 를 검색해 보세요! [konlp]: https://github.com/haven-jeon/KoNLP [konlpdocker]: https://hub.docker.com/r/mrchypark/konlp/ --- class: inverse ## 공식 이미지 제공 유명 회사에서 자신들의 제품을 쉽게 사용할 수 있게 공식적이고 항상 최신버전을 유지하는 이미지를 제공 - rocker : rstudio 팀의 rstudio & tidyverse 등 패키지가 미리 세팅되어 있는 이미지 제공 - tensorflow : 개발 버전 포함 py3, gpu 버전 등 nvidia-docker와 함께 지속적으로 제공 - 각 데이터 베이스 이미지 대부분 지원(심지어 [oracle][oracle]도!) - 필요하면 만들면 됨(Dockerfile - linux를 좀 알면...) [oracle]: https://github.com/oracle/docker-images --- class: inverse ## rocker의 이미지를 사용할 때 좋은 점 - 사용하는 사람들 모두 환경이 완전히 일치함 - encoding 이슈 등 통일된 해결책을 유지할 수 있음 - 문제 상황에 대해 재현을 보장할 수 있음 1. commit 해서 이미지를 공유 1. 이미지 버전과 코드를 공유 - 항상 안정화된 최신 버전을 사용할 수 있음. - latest 태그는 항상 최신 버전을 확인함. - 이미지에서 문제를 해결하면 이미지를 사용하는 사람들 모두 다시 문제를 겪지 않아도 됨 --- class: center, middle, title-slide, inverse  --- class: center, middle, title-slide, inverse ## 이제 터미널에서 사용해보자 --- class: inverse docker-cli 클릭  --- class: inverse terminal 환경  --- class: inverse docker ps 명령 확인  --- class: inverse ## 버전 확인 ```{} docker version ```  --- class: inverse ## client와 host  --- class: middle, title-slide, inverse ## 컨테이너를 실행해 보자 ```{} docker run hello-world ``` --- class: inverse ## helloworld  --- ## 실행 명령 구조 ```{} docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] ``` ### 주요 옵션 <table> <thead> <tr> <th style="text-align:center;"> 옵션 </th> <th style="text-align:left;"> 설명 </th> </tr> </thead> <tbody> <tr> <td style="text-align:center;"> -d </td> <td style="text-align:left;"> detached mode 흔히 말하는 백그라운드 모드 </td> </tr> <tr> <td style="text-align:center;"> -p </td> <td style="text-align:left;"> 호스트와 컨테이너의 포트를 연결 (포워딩) </td> </tr> <tr> <td style="text-align:center;"> -v </td> <td style="text-align:left;"> 호스트와 컨테이너의 디렉토리를 연결 (마운트) </td> </tr> <tr> <td style="text-align:center;"> --name </td> <td style="text-align:left;"> 컨테이너 이름 설정 </td> </tr> <tr> <td style="text-align:center;"> -rm </td> <td style="text-align:left;"> 프로세스 종료시 컨테이너 자동 제거 </td> </tr> <tr> <td style="text-align:center;"> -ti </td> <td style="text-align:left;"> -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 </td> </tr> </tbody> </table> --- class: center, middle, title-slide, inverse ## 아 됐고!  --- class: inverse ## ubuntu:16.04 실행하고 사용해 보기 ```{} docker run -it --name myfirstubuntu ubuntu:16.04 bash ```  --- class: center, middle, title-slide, inverse ## 우분투 서버를 윈도우에서! --- class: center, middle, title-slide, inverse docker toolbox는 사실 버주얼박스로 돌리는 가짜 도커임 --- class: inverse ## 혜택을 못봄 .pull-center[.set[  ]] --- class: center, middle, title-slide, inverse ## 리눅스 쓰세요 두번 쓰세요 --- class: center, middle, title-slide, inverse # 끝! ### <https://mrchypark.github.io/docker-with-r> #### [[pdf버전]](https://github.com/mrchypark/docker-with-r/blob/master/docs/docker-with-r.pdf) [[문의하기]](http://pf.kakao.com/_RXANd) [[의견 및 오류 신고]](https://github.com/mrchypark/docker-with-r/issues/new) #### [스타누르기](https://github.com/mrchypark/docker-with-r)는 컨텐츠 제작자를 춤추게 합니다.