Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker for Developers

Docker for Developers

Docker and containerization technology is all the hype these days. But as developers why would we use Docker? This talk provides a brief introduction to getting started developing your next project using Docker and embracing the "Docker way".

https://www.youtube.com/watch?v=KaNeJ8CBJxg

Avatar for Bud Siddhisena

Bud Siddhisena

May 17, 2016

Other Decks in Technology

Transcript

  1. “We ❤ Virtual Machines (VMs)” - Won’t mess our system

    - Production like - Portable “and we don’t like when VMs…” - Slow - Eats resources (memory, disk, cpu) - Painful when if it crashed
  2. Over 100K+ apps Reusable Cheap to spin up Your own

    PROD Version control DEVs ❤ Docker
  3. Getting started - What you need to know 1.Docker containers

    run only on Linux(for now) $ docker … docker-daemon REST https://localhost 2.Docker machine is how you run on Mac/Win $ docker … docker-daemon REST https://DOCKER_HOST Linux VM (docker machine) Mac/Win container container container container
  4. Getting started - What you need to know 3. Uses

    a layered filesystem (Union FS) Ubuntu:16.04 (base img) Ruby:2.3 Rails:4.2 Your App docker images (read-only) docker container (R/W)
  5. Getting started - What you need to know 4. Networking

    via port forwarding & linking Rails App container 
 Port 3000 Postgres container 
 Port 5432 (linked via private network) Exposed via port forwarding e.g http://localhost:32768 Containers can be started to forward internal ports to an outside port (fixed or random)
  6. Spinning up a Docker container Setup DOCKER_HOST env on mac/win

    docker-machine $ docker-machine env export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/bsiddhisena/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval $(docker-machine env) $ docker run -it ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 6d28225f8d96: Pull complete 166102ec41af: Pull complete d09bfba2bd6a: Pull complete c80dad39a6c0: Pull complete a3ed95caeb02: Pull complete Digest: sha256:5718d664299eb1db14d87db7bfa6945b28879a67b74f36da3e34f5914866b71c Status: Downloaded newer image for ubuntu:latest root@711d7f8ad897:/# cat /etc/issue Ubuntu 16.04 LTS \n \l Spin up a container or two interactively (-it)…
  7. Basic container management $ docker ps CONTAINER ID IMAGE COMMAND

    CREATED STATUS PORTS NAMES 711d7f8ad897 ubuntu "/bin/bash" 54 minutes ago Up 54 minutes hungry_raman $ docker attach hungry_raman <ctrl>+p+q $ docker stop hungry_raman $ docker ps -l $ docker rm $(docker ps -l -q) $ docker rm $(docker ps -a -q) To detach from an interactive container <Ctrl> + P + Q To exit from an interactive container <Ctrl> + D
  8. Basic container management To run a container detached (non interactive)

    $ docker run --name my-nginx —d -P nginx $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c20bdcd2c5be nginx "nginx -g 'daemon off" 2 seconds ago Up 1 seconds 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp my-nginx -d = detached, -P use random port mapping, -p explicit port mapping, -v mount local:remote --link = Link two containers via local DNS $ mkdir ~/site $ echo 'Welcome to nginx on docker' > ~/site/index.html $ docker run --name my-nginx -d -p 80:80 -v $HOME/site:/usr/share/nginx/html nginx $ docker run --name bar -d -P nginx $ docker run --name foo --link bar:bar -it busybox / # ping bar PING bar (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.085 ms
  9. Basic docker image management $ docker images REPOSITORY TAG IMAGE

    ID CREATED VIRTUAL SIZE nginx latest sha256:3edcc 13 days ago 182.8 MB ubuntu latest sha256:c5f1c 13 days ago 120.8 M $ docker search ruby NAME DESCRIPTION STARS OFFICIAL AUTOMATED ruby Ruby is a dynamic, reflective, object-orie... 547 [OK] jruby JRuby (http://www.jruby.org) is an impleme... 35 [OK] abevoelker/ruby Docker images for lots of MRI Ruby and JRu... 14 [OK] $ docker pull ruby $ docker pull ruby:2.2.5-alpine $ docker rmi ruby Visit https://hub.docker.com or docker search to find images
  10. Building a Docker image Dockerfile is how you build a

    custom image $ cat Dockerfile FROM ubuntu ENV REFRESHED_AT 2016-05-17 RUN apt-get update && apt-get install -y busybox && \ rm -fr /var/lib/apt/lists/* RUN ln -s /bin/busybox /sbin/ifconfig CMD /bin/bash $ docker build -t mybuntu .
  11. Basic Docker Orchestration Spinning up multiple containers can be done

    via docker-compose $ git clone https://github.com/rmetzler/sinatra-redis-docker-example.git $ cat docker-compose.yml web: build: . ports: - "4567:4567" links: - redis redis: image: redis $ docker build -t sintra-app .
  12. Finally, some wisdom on the Docker way Containers are meant

    to be disposable Updating containers is an anti-pattern Containers works best with a single process Be careful with untrusted containers