Docker. Master the execution environment of your applications. Aurélien Dumez. Inria Bordeaux - Sud-Ouest. Tuesday, March 24th 2015

Similar documents
Docker A FRAMEWORK FOR DATA INTENSIVE COMPUTING

Who is Docker and how he can help us? Heino Talvik

Investigating Containers for Future Services and User Application Support

Deployment Patterns using Docker and Chef

Travis Cardwell Technical Meeting

An introduction to Docker

Container-based virtualization: Docker

ovirt and Docker Integration

Docker und IBM Digital Experience in Docker Container

Arup Nanda VP, Data Services Priceline.com

/ Cloud Computing. Recitation 5 February 14th, 2017

Asterisk & the Docker revolution Some lessons from the trenches

Infrastructure at your Service. Oracle over Docker. Oracle over Docker

Portable, lightweight, & interoperable Docker containers across Red Hat solutions

PEN LOAD BALANCER WITH 2 NODES APACHE WEB SERVER

agenda PAE Docker Docker PAE

docker & HEP: containerization of applications for development, distribution and preservation

Be smart. Think open source.

Containers 101. with Podman on Fedora 29. Alessandro Arrichiello. Solution Architect, Red Hat

DevOps in the Cloud A pipeline to heaven?! Robert Cowham BCS CMSG Vice Chair

/ Cloud Computing. Recitation 5 September 26 th, 2017

Orchestrating Docker containers at scale

Introduction to Container Technology. Patrick Ladd Technical Account Manager April 13, 2016

Network softwarization Lab session 2: OS Virtualization Networking

Docker and Security. September 28, 2017 VASCAN Michael Irwin

what's in it for me? Ian Truslove :: Boulder Linux User Group ::

Dockerfile Best Practices

DGX-1 DOCKER USER GUIDE Josh Park Senior Solutions Architect Contents created by Jack Han Solutions Architect

UP! TO DOCKER PAAS. Ming

MySQL and Docker Strategies Patrick Galbraith Giuseppe Maxia

RDO container registry Documentation

/ Cloud Computing. Recitation 5 September 27 th, 2016

Cross platform enablement for the yocto project with containers. ELC 2017 Randy Witt Intel Open Source Technology Center

A Hands on Introduction to Docker

Configure a Small Alpine Linux Docker Image on IOx

Docker for Sysadmins: Linux Windows VMware

Establishing Technology Trust in a Containerised World

Docker and Oracle Everything You Wanted To Know

[Docker] Containerization

Quick Prototyping+CI with LXC and Puppet

USING DOCKER FOR MXCUBE DEVELOPMENT AT MAX IV

Red Hat Container Development Kit 2.0 Getting Started Guide

SAINT LOUIS JAVA USER GROUP MAY 2014

Containerized Cloud Scheduling Environment

Docker Deep Dive. Daniel Klopp

Containers. Pablo F. Ordóñez. October 18, 2018

Red Hat Quay 2.9 Deploy Red Hat Quay - Basic

Think Small to Scale Big

Con$nuous Deployment with Docker Andrew Aslinger. Oct

GestióIP IPAM v3.0 IP address management software Installation Guide v0.4

Getting Started With Containers

RED HAT ENTERPRISE LINUX ATOMIC HOST, CONTAINERS AND KUBERNETES

Continuous Integration using Docker & Jenkins

Fixing the "It works on my machine!" Problem with Docker

Introduction to containers

Container Security and new container technologies. Dan

Linux Containers Roadmap Red Hat Enterprise Linux 7 RC. Bhavna Sarathy Senior Technology Product Manager, Red Hat

Singularity: container formats

Singularity CRI User Documentation

SELinux Introduction. Jason Zaman FOSSASIA 2017 March 17th - 19th blog.perfinion.com

Multi-Arch Layered Image Build System

MySQL operations with Docker A quick guide for the uninitiated

Docker for Developers

Shifter at CSCS Docker Containers for HPC

Introduc)on to Docker

Infoblox Kubernetes1.0.0 IPAM Plugin

Improving User Accounting and Isolation with Linux Kernel Features. Brian Bockelman Condor Week 2011

CS-580K/480K Advanced Topics in Cloud Computing. Container III

Bioshadock. O. Sallou - IRISA Nettab 2016 CC BY-CA 3.0

GestióIP IPAM. v3.2. Installation Guide. v0.12. IP address management software.

Midterm Presentation Schedule

SQL Server inside a docker container. Christophe LAPORTE SQL Server MVP/MCM SQL Saturday 735 Helsinki 2018

Index. Bessel function, 51 Big data, 1. Cloud-based version-control system, 226 Containerization, 30 application, 32 virtualize processes, 30 31

Red Hat JBoss Middleware for OpenShift 3

Apache Manual Install Ubuntu Php Mysql. Phpmyadmin No >>>CLICK HERE<<<

Real world Docker applications

what is the problem to be solved

Dockerize Your IT! Centrale Nantes Information Technology Department Yoann Juet Dec, 2018

Dockerized Tizen Platform

GitLab-CI and Docker Registry

Docker in Appsoma PaaS. Containers FTW

Build your own Lightweight Webserver - Hands-on I - Information Network I. Marius Georgescu. Internet Engineering Laboratory. 17 Apr

Creating pipelines that build, test and deploy containerized artifacts Slides: Tom Adams

ROBIN SYSTEMS. Containerizing Oracle: Not Thinking About It Yet? You Should Be!!!

IPBRICK Installation Manual

Android meets Docker. Jing Li

Configuring CloudN using ESXi 5.0 or later (EST mode)

Best Practices for Developing & Deploying Java Applications with Docker

Zenoss Resource Manager Upgrade Guide

Lesson: Web Programming(3) Omid Jafarinezhad Sharif University of Technology

Building A Better Test Platform:

Installation and setup guide of 1.1 demonstrator

Red Hat Containers Cheat Sheet

DCCN Docker Swarm Cluster Documentation

From the Beginning: Your First Node.js Web Service

ISLET: Jon Schipp, AIDE jonschipp.com. An Attempt to Improve Linux-based Software Training

, Inc

Quipucords Documentation

Running Oracle Database on Docker

Splunk N Box. Splunk Multi-Site Clusters In 20 Minutes or Less! Mohamad Hassan Sales Engineer. 9/25/2017 Washington, DC

Transcription:

Docker Master the execution environment of your applications Aurélien Dumez Inria Bordeaux - Sud-Ouest Tuesday, March 24th 2015 Aurélien Dumez Docker 1 / 34

Content 1 The bad parts 2 Overview 3 Internals 4 Docker@Inria-BSO 5 Let s play 6 Conclusion Aurélien Dumez Docker 2 / 34

The bad parts Aurélien Dumez Docker 3 / 34

The bad parts 09/09/14 [ Is Docker ready for production? Feedbacks of a 2 weeks hands on ] 02/07/15 [ Lets review.. Docker (again) ] 03/06/15 [ Docker, la plateforme à la mode (linuxfr) ] Aurélien Dumez Docker 4 / 34

Overview Aurélien Dumez Docker 5 / 34

Overview About Automates the deployment of applications into containers Starts as an internal project within dotcloud (now Docker, Inc.) Is not a virtualization tool (not a new Vsomething) Does not turn a bad programmer (or sysadmin) into a good one Remember the keyword : container Aurélien Dumez Docker 6 / 34

Overview About Open-source (Apache 2.0 license) Written in Go (mainly because C/Java/Python/Other sucks) Heavily relies on Linux kernel s isolation features : cgroups, namespaces, capabilities... First public release : March 2013 Good release rate : 2014 : 1.1 (Jul), 1.2 (Aug), 1.3 (Oct), 1.4 (Dec) 2015 : 1.5 (Feb), 1.6 (due : Mar) Aurélien Dumez Docker 7 / 34

Overview Philosophy Portable deployment across machines : simplier dependencies Application-centric : one container per task (not a full VM) Automatic build : Dockerfile Versioning : git-like versions tracking Component re-use : share images between containers Sharing : registry / Docker Hub Aurélien Dumez Docker 8 / 34

Overview Requirements 64-bit GNU/Linux distribution Kernel : 3.10+ / older with some patches (CentOS 6.5+) Storage backend : Device Mapper, AUFS, VFS, BTRFS [ See RedHat developer blog for more details ] Preferably one or more security layer : SELinux, AppArmor... [ J. Petazzoni: Containers & Docker: How Secure Are They? ] Successfully tested on : Debian GNU/Linux 8 CentOS 6.6 (+EPEL Testing repository) ArchLinux (btrfs) Aurélien Dumez Docker 9 / 34

Internals Aurélien Dumez Docker 10 / 34

Internals Architecture Client-Server application RESTful API Host Docker Daemon Docker Client docker pull docker run docker... Container 1 Container 2 Container 3 Container... Docker Index Aurélien Dumez Docker 11 / 34

Internals Containers isolation libcontainer Docker libvirt LXC systemdnspawn Linux kernel cgroups namespaces SELinux Netlink Netfilter capabilities AppArmor Aurélien Dumez Docker 12 / 34

Internals Terminology Base Image : image without parent Image : read-only layer on top of another image Container : read-write layer on top of another image Aurélien Dumez Docker 13 / 34

Internals Terminology Aurélien Dumez Docker 14 / 34

Docker@Inria-BSO Aurélien Dumez Docker 15 / 34

Docker@Inria-BSO First contact : June 2014 Into production : November 2014 OS : CentOS 6.6 (with EPEL Testing repository) Web sites powered by Docker : Forum «Poppy Project» Forum «Dessine-moi un Robot» Forum «OpenLab Flowers» Other uses : web apps testing (Joomla!, WordPress...) Aurélien Dumez Docker 16 / 34

Let s play Aurélien Dumez Docker 17 / 34

Let s play cmd : docker version Who are you? 1 ~$ docker version 2 Client version: 1.3.3 3 Client API version: 1.15 4 Go version ( client ): go1.3.3 5 Git commit (client ): d344625 6 OS/Arch (client ): linux /amd64 7 Server version: 1.3.3 8 Server API version: 1.15 9 Go version (server): go1.3.3 10 Git commit (server): d344625 Aurélien Dumez Docker 18 / 34

Let s play The Docker Hub : https://hub.docker.com/ Registry : public or private place to store docker s images Docker Hub : public registry + web interface + REST API User account needed to publish images Pricing : free for unlimited public repos + 1 private repo 1 ~$ docker login 2 Username: dumez 3 Password: 4 Email: aurelien.dumez@... 5 Account created. Please use the confirmation link we sent to your e mail to activate it. Security concerns? You may run your own registry! Really... Aurélien Dumez Docker 19 / 34

Let s play cmd : docker images / search Search for and download an image 1 ~$ docker images 2 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 3 4 ~$ docker search centos 5 NAME DESCRIPTION STARS OFFICIAL AUTOMATED 6 centos The official build of CentOS. 877 [OK] 7 ansible/centos7 ansible Ansible on Centos7 35 [OK] 8 tutum/centos Centos image with SSH access. For the root... 13 [OK] 9 blalor /centos Bare bones base CentOS 6.5 image 9 [OK] 10 11 ~$ docker pull centos:7 12 Pulling repository centos 13 88f9454e60dd: Download complete 14 511136ea3c5a: Download complete 15 5b12ef8fd570: Download complete 16 Status: Downloaded newer image for centos:7 17 18 ~$ docker images 19 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 20 centos 7 88f9454e60dd 13 days ago 210 MB 21 centos centos7 88f9454e60dd 13 days ago 210 MB 22 centos latest 88f9454e60dd 13 days ago 210 MB Aurélien Dumez Docker 20 / 34

Let s play cmd : docker run / ps Create and list containers 1 ~$ docker ps a 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 4 ~$ docker run ti centos:7 /bin/bash 5 [root@dce6ed9c055c /]# cat /etc/os release 6 NAME="CentOS Linux" 7 VERSION="7 (Core)" 8 ID="centos" 9 ID_LIKE="rhel fedora" 10 VERSION_ID="7" 11 PRETTY_NAME="CentOS Linux 7 (Core)" 12 ANSI_COLOR="0;31" 13 CPE_NAME="cpe:/o:centos:centos:7" 14 HOME_URL="https://www.centos.org/" 15 BUG_REPORT_URL="https://bugs.centos.org/" 16 [root@dce6ed9c055c /]# ps aux 17 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 18 root 1 0.0 0.0 11752 2924? Ss 13:04 0:00 /bin/bash 19 root 19 0.0 0.0 19756 2260? R+ 13:05 0:00 ps aux 20 [root@dce6ed9c055c /]# exit 21 exit 22 23 ~$ docker ps a 24 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 25 dce6ed9c055c centos:7 "/bin/bash" 2 minutes ago Exited (130) 3 seconds ago kickass_poincare Aurélien Dumez Docker 21 / 34

Let s play cmd : docker start Restart a container 1 ~$ docker start ai dce6 2 [root@dce6ed9c055c /]# ping c 2 linuxfr.org 3 PING linuxfr.org (88.191.250.176) 56(84) bytes of data. 4 64 bytes from prod. linuxfr.org (88.191.250.176): icmp_seq=1 ttl=49 time=16.5 ms 5 64 bytes from prod. linuxfr.org (88.191.250.176): icmp_seq=2 ttl=49 time=16.5 ms 6 7 linuxfr.org ping statistics 8 2 packets transmitted, 2 received, 0% packet loss, time 1001ms 9 rtt min/avg/max/mdev = 16.567/16.572/16.578/0.128 ms 10 [root@dce6ed9c055c /]# exit 11 ~$...and yes, networking just works out of the box! Aurélien Dumez Docker 22 / 34

Let s play cmd : docker logs What happened in my container? 1 ~$ docker logs dce6 2 [root@dce6ed9c055c /]# cat /etc/os release 3 NAME="CentOS Linux" 4 VERSION="7 (Core)" 5 ID="centos" 6 ID_LIKE="rhel fedora" 7 VERSION_ID="7" 8 PRETTY_NAME="CentOS Linux 7 (Core)" 9 ANSI_COLOR="0;31" 10 CPE_NAME="cpe:/o:centos:centos:7" 11 HOME_URL="https://www.centos.org/" 12 BUG_REPORT_URL="https://bugs.centos.org/" 13 14 [root@dce6ed9c055c /]# ps aux 15 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 16 root 1 0.0 0.0 11752 2924? Ss 13:04 0:00 /bin/bash 17 root 19 0.0 0.0 19756 2260? R+ 13:05 0:00 ps aux 18 [root@dce6ed9c055c /]# exit 19 exit 20 [root@dce6ed9c055c /]# ping c 2 linuxfr.org 21 PING linuxfr.org (88.191.250.176) 56(84) bytes of data. 22 64 bytes from prod. linuxfr.org (88.191.250.176): icmp_seq=1 ttl=49 time=16.5 ms 23 64 bytes from prod. linuxfr.org (88.191.250.176): icmp_seq=2 ttl=49 time=16.5 ms 24 25 linuxfr.org ping statistics 26 2 packets transmitted, 2 received, 0% packet loss, time 1001ms 27 rtt min/avg/max/mdev = 16.567/16.572/16.578/0.128 ms 28 [root@dce6ed9c055c /]# exit Aurélien Dumez Docker 23 / 34

Let s play cmd : docker run Launch multiple containers in daemon mode 1 ~$ docker run d centos:7 /bin/cat /etc/hostname 2 b9d0952884d1dcb8e3a4a666088e8c34fbe3f3e8c3e3ea73dc0eb4695e0bf6e5 3 4 ~$ docker run d centos:7 /bin/cat /etc/hostname 5 7393f6df79b73bd9a2a780d0f7bd49b711cf1f7b687eb44985d56ff81ed45f05 6 7 ~$ docker run d centos:7 /bin/cat /etc/hostname 8 7c9011c9867a52810322c364831baa706572b15e5f2ff04af1eb1d17b876b07f 9 10 ~$ docker ps a 11 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12 7c9011c9867a centos:7 "/bin/cat /etc/hostn 2 seconds ago Exited (0) 2 seconds ago jolly_goodall 13 7393f6df79b7 centos:7 "/bin/cat /etc/hostn 3 seconds ago Exited (0) 3 seconds ago insane_carson 14 b9d0952884d1 centos:7 "/bin/cat /etc/hostn 5 seconds ago Exited (0) 4 seconds ago happy_feynman 15 dce6ed9c055c centos:7 "/bin/bash" 58 minutes ago Exited (0) 10 minutes ago kickass_poincare Aurélien Dumez Docker 24 / 34

Let s play cmd : docker rm Some housekeeping 1 ~$ docker ps a 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 7c9011c9867a centos:7 "/bin/cat /etc/hostn 2 seconds ago Exited (0) 2 seconds ago jolly_goodall 4 7393f6df79b7 centos:7 "/bin/cat /etc/hostn 3 seconds ago Exited (0) 3 seconds ago insane_carson 5 b9d0952884d1 centos:7 "/bin/cat /etc/hostn 5 seconds ago Exited (0) 4 seconds ago happy_feynman 6 dce6ed9c055c centos:7 "/bin/bash" 58 minutes ago Exited (0) 10 minutes ago kickass_poincare 7 8 ~$ docker rm 7c 73 b9 9 7c 10 73 11 b9 12 ~$ docker ps a 13 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 14 dce6ed9c055c centos:7 "/bin/bash" 58 minutes ago Exited (0) 10 minutes ago kickass_poincare Aurélien Dumez Docker 25 / 34

Let s play WordPress in two or three steps Did you say : "Lego R bricks"? 1 docker run name some_mysql e MYSQL_ROOT_PASSWORD=mysecretpassword d P mysql 2 docker run name some_wordpress link some_mysql:mysql p 127.0.0.1:8080:80 d wordpress Aurélien Dumez Docker 26 / 34

Let s play WordPress in two or three steps No magic inside 1 ~$ docker exec ti 58 /bin/bash 2 root@5887fa436734:/var/www/html# env 3 [...] 4 HOSTNAME=5887fa436734 5 MYSQL_ENV_MYSQL_ROOT_PASSWORD=mysecretpassword 6 MYSQL_PORT_3306_TCP_PORT=3306 7 MYSQL_PORT_3306_TCP=tcp://172.17.0.2:3306 8 MYSQL_ENV_MYSQL_VERSION=5.6.23 9 MYSQL_NAME=/some_wordpress/mysql 10 MYSQL_PORT_3306_TCP_PROTO=tcp 11 MYSQL_PORT_3306_TCP_ADDR=172.17.0.2 12 MYSQL_ENV_MYSQL_MAJOR=5.6 13 MYSQL_PORT=tcp://172.17.0.2:3306 14 15 root@5887fa436734:/var/www/html# cat /etc/hosts 16 [...] 17 172.17.0.3 5887fa436734 18 172.17.0.2 mysql Aurélien Dumez Docker 27 / 34

Let s play cmd : docker build Dockerfile 1 FROM centos:6 2 MAINTAINER Aurelien Dumez <aurelien.dumez@inria.fr> 3 RUN yum y update; yum clean all 4 RUN yum y install httpd; yum clean all 5 RUN mkdir p /var/www/html 6 ADD index.html /var/www/html/ 7 ADD start.sh / 8 EXPOSE 80 9 10 #CMD ["/usr/sbin/httpd", " DFOREGROUND"] 11 CMD ["/bin/bash", "/ start.sh"] Build 1 ~$ docker build rm t dumez/centos_httpd. 2 Sending build context to Docker daemon 4.608 kb 3 Sending build context to Docker daemon 4 Step 0 : FROM centos:6 5 > f6808a3e4d9e 6 [...] 7 Step 8 : CMD /bin/bash /start.sh 8 > Running in fd917c365721 9 > 80557bbfc1d0 10 Removing intermediate container fd917c365721 11 Successfully built 80557bbfc1d0 12 ~$ Aurélien Dumez Docker 28 / 34

Let s play cmd : docker history Step by step 1 ~$ docker history dumez/centos_httpd 2 IMAGE CREATED CREATED BY SIZE 3 80557bbfc1d0 23 hours ago /bin/sh c #(nop) CMD [/bin/bash /start.sh] 0 B 4 d79a897fa0a6 23 hours ago /bin/sh c #(nop) EXPOSE map[80/tcp:{}] 0 B 5 e271b2439c32 23 hours ago /bin/sh c #(nop) ADD file:f70778d9d3db9a13c0 63 B 6 55049b1cdb19 23 hours ago /bin/sh c #(nop) ADD file:302d28059438a7495f 156 B 7 a28e0f8428fe 23 hours ago /bin/sh c mkdir p /var/www/html 0 B 8 437ee40ad1d5 23 hours ago /bin/sh c yum y install httpd; yum clean al 29.95 MB 9 fef0a9e288f0 23 hours ago /bin/sh c yum y update; yum clean all 13.42 MB 10 3764a81cd6e5 23 hours ago /bin/sh c #(nop) MAINTAINER Aurelien Dumez < 0 B 11 f6808a3e4d9e 2 weeks ago /bin/sh c #(nop) ADD file:2b2b26209d285cd1a9 202.6 MB 12 5b12ef8fd570 5 months ago /bin/sh c #(nop) MAINTAINER The CentOS Proje 0 B 13 511136ea3c5a 21 months ago 0 B Aurélien Dumez Docker 29 / 34

Let s play cmd : docker exec Connect to a running container 1 ~$ docker run d P dumez/centos_httpd 2 b71600b5b407286248e0cc0d0af2685b9770fc3a822885beab901e368dbe4068 3 4 ~$ docker exec ti b71 /bin/bash 5 [root@b71600b5b407 /]# ps aux 6 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 7 root 1 0.0 0.0 11360 2344? Ss 15:26 0:00 /bin/bash /start.sh 8 root 9 0.0 0.0 175336 6344? Ss 15:26 0:00 /usr/sbin/httpd 9 root 10 0.0 0.0 4164 456? S 15:26 0:00 tail f /var/log/httpd/access_log 10 apache 11 0.0 0.0 175336 3860? S 15:26 0:00 /usr/sbin/httpd 11 apache 12 0.0 0.0 175336 3860? S 15:26 0:00 /usr/sbin/httpd 12 apache 13 0.0 0.0 175336 3860? S 15:26 0:00 /usr/sbin/httpd 13 apache 14 0.0 0.0 175336 3860? S 15:26 0:00 /usr/sbin/httpd 14 apache 15 0.0 0.0 175336 3860? S 15:26 0:00 /usr/sbin/httpd 15 apache 16 0.0 0.0 175336 3860? S 15:26 0:00 /usr/sbin/httpd 16 apache 17 0.0 0.0 175336 3860? S 15:26 0:00 /usr/sbin/httpd 17 apache 18 0.0 0.0 175336 3860? S 15:26 0:00 /usr/sbin/httpd 18 root 19 2.0 0.0 14784 3004? S 15:26 0:00 /bin/bash 19 root 32 0.0 0.0 16668 2140? R+ 15:26 0:00 ps aux Aurélien Dumez Docker 30 / 34

Let s play cmd : docker logs 1 $ docker logs f b7 2 172.17.42.1 [19/Mar/2015:15:31:19 +0000] "GET / HTTP/1.1" 200 156 " " "Mozilla/5.0 3 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36" 4 172.17.42.1 [19/Mar/2015:15:31:19 +0000] "GET /favicon.ico HTTP/1.1" 404 287 " " "Mozilla/5.0 5 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36" Aurélien Dumez Docker 31 / 34

Conclusion Aurélien Dumez Docker 32 / 34

Conclusion Form your own opinion : use Docker Don t stay alone : use the Hub Docker can really save your time (Discourse@Inria-BSO) Docker evolves quickly : stay tuned Aurélien Dumez Docker 33 / 34

Conclusion Thanks! Questions? Aurélien Dumez Docker 34 / 34