Docker for Data Science Building Scalable and Extensible Data Infrastructure Around the Jupyter Notebook Server — Joshua Cook Docker for Data Science Building Scalable and Extensible Data Infrastructure Around the Jupyter Notebook Server Joshua Cook Docker for Data Science Joshua Cook Santa Monica, California, USA ISBN-13 (pbk): 978-1-4842-3011-4 ISBN-13 (electronic): 978-1-4842-3012-1 DOI 10.1007/978-1-4842-3012-1 Library of Congress Control Number: 2017952396 Copyright © 2017 by Joshua Cook This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Cover image by Freepik (www.freepik.com) Managing Director: Welmoed Spahr Editorial Director: Todd Green Acquisitions Editor: Celestin Suresh John Development Editor: Laura Berendson Technical Reviewer: Jeeva S. Chelladhurai Coordinating Editor: Prachi Mehta Copy Editor: Mary Behr Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail [email protected], or visit www.apress.com/ rights-permissions. Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web page at www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this book is available to readers on GitHub via the book’s product page, located at www.apress.com/978-1-4842-3011-4. For more detailed information, please visit www.apress.com/source-code. Printed on acid-free paper To my wife, Aylin. Contents at a Glance About the Author �����������������������������������������������������������������������������xv About the Technical Reviewer �������������������������������������������������������xvii Acknowledgments ��������������������������������������������������������������������������xix Introduction ������������������������������������������������������������������������������������xxi ■ Chapter 1: Introduction ������������������������������������������������������������������1 ■ Chapter 2: Docker �������������������������������������������������������������������������29 ■ Chapter 3: Interactive Programming ��������������������������������������������49 ■ Chapter 4: The Docker Engine ������������������������������������������������������71 ■ Chapter 5: The Dockerfile �������������������������������������������������������������81 ■ Chapter 6: Docker Hub ����������������������������������������������������������������103 ■ Chapter 7: The Opinionated Jupyter Stacks �������������������������������119 ■ Chapter 8: The Data Stores ���������������������������������������������������������137 ■ Chapter 9: Docker Compose �������������������������������������������������������179 ■ Chapter 10: Interactive Software Development ��������������������������213 Index ����������������������������������������������������������������������������������������������253 v Contents About the Author �����������������������������������������������������������������������������xv About the Technical Reviewer �������������������������������������������������������xvii Acknowledgments ��������������������������������������������������������������������������xix Introduction ������������������������������������������������������������������������������������xxi ■ Chapter 1: Introduction ������������������������������������������������������������������1 “Big Data” �����������������������������������������������������������������������������������������������1 Recommended Practice for Learning ������������������������������������������������������2 Set up a New AWS Account ��������������������������������������������������������������������������������������2 Configure a Key Pair �������������������������������������������������������������������������������������������������3 Infrastructure Limitations on Data���������������������������������������������������������14 Pull the jupyter/scipy-notebook image �������������������������������������������������������������������15 Run the jupyter/scipy-notebook Image ������������������������������������������������������������������16 Monitor Memory Usage ������������������������������������������������������������������������������������������17 What Size Data Set Will Cause a Memory Exception? ��������������������������������������������17 What Size Dataset Is Too Large to Be Used to Fit Different Kinds of Simple Models? ������������������������������������������������������������������������������������������������������22 Summary �����������������������������������������������������������������������������������������������27 ■ Chapter 2: Docker �������������������������������������������������������������������������29 Docker Is Not a Virtual Machine ������������������������������������������������������������30 Containerization ������������������������������������������������������������������������������������30 vii ■ Contents A Containerized Application�������������������������������������������������������������������32 The Docker Container Ecosystem����������������������������������������������������������32 The Docker Client ���������������������������������������������������������������������������������������������������33 The Host �����������������������������������������������������������������������������������������������������������������34 The Docker Engine ��������������������������������������������������������������������������������������������������34 The Docker Image and the Docker Container ���������������������������������������������������������34 The Docker Registry �����������������������������������������������������������������������������������������������35 Get Docker ���������������������������������������������������������������������������������������������36 Docker for Linux �����������������������������������������������������������������������������������������������������36 Docker for Mac �������������������������������������������������������������������������������������������������������40 Docker for Windows������������������������������������������������������������������������������������������������40 Docker Toolbox �������������������������������������������������������������������������������������������������������41 Hello, Docker! ����������������������������������������������������������������������������������������42 Basic Networking in Docker �����������������������������������������������������������������������������������45 Summary �����������������������������������������������������������������������������������������������47 ■ Chapter 3: Interactive Programming ��������������������������������������������49 Jupyter as Persistent Interactive Computing ����������������������������������������49 How Not to Program Interactively ���������������������������������������������������������������������������49 Setting Up a Minimal Computational Project ����������������������������������������������������������50 Writing the Source Code for the Evaluation of a Bessel Function ��������������������������51 Performing Your Calculation Using Docker �������������������������������������������������������������51 Compile Your Source Code��������������������������������������������������������������������������������������53 Execute Compiled Binary ����������������������������������������������������������������������������������������54 How to Program Interactively ����������������������������������������������������������������55 Launch IPython Using Docker ���������������������������������������������������������������������������������55 Persistence �������������������������������������������������������������������������������������������������������������56 Jupyter Notebooks ��������������������������������������������������������������������������������������������������57 Port Connections ����������������������������������������������������������������������������������������������������63 viii ■ Contents Data Persistence in Docker ������������������������������������������������������������������������������������65 Attach a Volume ������������������������������������������������������������������������������������������������������69 Summary �����������������������������������������������������������������������������������������������69 ■ Chapter 4: The Docker Engine ������������������������������������������������������71 Examining the Docker Workstation �������������������������������������������������������71 Hello, World in a Container ��������������������������������������������������������������������74 Run Echo as a Service ���������������������������������������������������������������������������76 Isolating the Bootstrap Time �����������������������������������������������������������������������������������77 A Daemonized Hello World ��������������������������������������������������������������������78 Summary �����������������������������������������������������������������������������������������������79 ■ Chapter 5: The Dockerfile �������������������������������������������������������������81 Best Practices ���������������������������������������������������������������������������������������81 Stateless Containers �����������������������������������������������������������������������������������������������81 Single-Concern Containers �������������������������������������������������������������������������������������82 Project: A Repo of Docker Images ���������������������������������������������������������82 Prepare for Local Development ������������������������������������������������������������������������������82 Configure GitHub ����������������������������������������������������������������������������������������������������83 Building Images Using Dockerfiles �������������������������������������������������������������������������83 Dockerfile Syntax ����������������������������������������������������������������������������������������������������83 Designing the gsl Image �����������������������������������������������������������������������������������������84 The Docker Build Cache������������������������������������������������������������������������������������������87 Anaconda ����������������������������������������������������������������������������������������������������������������88 Design the miniconda3 Image ��������������������������������������������������������������������������������88 tini���������������������������������������������������������������������������������������������������������������������������96 ENTRYPOINT �����������������������������������������������������������������������������������������������������������97 Design the ipython Image ���������������������������������������������������������������������������������������98 Run the ipython Image as a New Container ���������������������������������������������������������100 Summary ���������������������������������������������������������������������������������������������101 ix ■ Contents ■ Chapter 6: Docker Hub ����������������������������������������������������������������103 Docker Hub ������������������������������������������������������������������������������������������103 Alternatives to Docker Hub �����������������������������������������������������������������������������������103 Docker ID and Namespaces ����������������������������������������������������������������104 Image Repositories ������������������������������������������������������������������������������104 Search for Existing Repositories ���������������������������������������������������������105 Tagged Images ������������������������������������������������������������������������������������106 Tags on the Python Image ������������������������������������������������������������������������������������107 Official Repositories����������������������������������������������������������������������������������������������108 Pushing to Docker Hub ������������������������������������������������������������������������108 Create a New Repository ��������������������������������������������������������������������������������������110 Push an Image ������������������������������������������������������������������������������������������������������111 Pull the Image from Docker Hub ���������������������������������������������������������������������������113 Tagged Image on Docker Hub �������������������������������������������������������������������������������118 Summary ���������������������������������������������������������������������������������������������118 ■ Chapter 7: The Opinionated Jupyter Stacks �������������������������������119 High-Level Overview ���������������������������������������������������������������������������121 jupyter/base-notebook �����������������������������������������������������������������������������������������122 Notebook Security ������������������������������������������������������������������������������������������������122 The Default Environment ��������������������������������������������������������������������������������������124 Managing Python Versions �����������������������������������������������������������������������������������125 Extending the Jupyter Image Using conda Environments ������������������������������������127 Using joyvan to Install Libraries ����������������������������������������������������������130 Ephemeral Container Extension ����������������������������������������������������������130 Maintaining Semi-Persistent Changes to Images �������������������������������������������������134 Summary ���������������������������������������������������������������������������������������������135 x ■ Contents ■ Chapter 8: The Data Stores ���������������������������������������������������������137 Serialization ����������������������������������������������������������������������������������������137 Serialization Formats and Methods ����������������������������������������������������������������������138 Binary Encoding in Python ������������������������������������������������������������������������������������139 Redis ���������������������������������������������������������������������������������������������������139 Pull the redis Image ����������������������������������������������������������������������������������������������139 Docker Data Volumes and Persistence ������������������������������������������������141 Create and View a New Data Volume ��������������������������������������������������������������������142 Launch Redis as a Persistent Service ������������������������������������������������������������������142 Connecting Containers via Legacy Links ��������������������������������������������������������������143 Using Redis with Jupyter ��������������������������������������������������������������������������������������145 A Simple Redis Example ���������������������������������������������������������������������������������������147 Track an Iterative Process Across Notebooks �������������������������������������������������������148 Pass a Dictionary via a JSON Dump ���������������������������������������������������������������������148 Pass a Numpy Array as a Bytestring ���������������������������������������������������������������������150 MongoDB ���������������������������������������������������������������������������������������������151 Set Up a New AWS t2�micro ����������������������������������������������������������������������������������152 Configure the New AWS t2�micro for Docker ��������������������������������������������������������153 Pull the mongo Image �������������������������������������������������������������������������������������������153 Create and View a New Data Volume ��������������������������������������������������������������������153 Launch MongoDB as a Persistent Service ������������������������������������������������������������154 Verify MongoDB Installation ���������������������������������������������������������������������������������155 Using MongoDB with Jupyter �������������������������������������������������������������������������������155 MongoDB Structure ����������������������������������������������������������������������������������������������156 pymongo ���������������������������������������������������������������������������������������������������������������157 Mongo and Twitter ������������������������������������������������������������������������������������������������158 Obtain Twitter Credentials ������������������������������������������������������������������������������������159 xi