Docker
Kamil y3ti Grabowski
UW@IT- 25.02.2015
DOCKER Czym jest?
• nowa „seksi” technologia?
• tak, ale działająca również na starym sprzęcie! (kernel 3.8)
• chroot, bsd jail oraz solaris zones również działały!
• oczywiście, ale:
• docker images
• warstwowy system plików
• docker hub
• docker registry
• HTTP REST like API
• biblioteki dla większości popularnych języków
programowania
DOCKER vs VIRTUAL MACHINE
Hardware
Host OS
Hypervisor
Guest OS
Bin/Libs
APP
Guest OS
Bin/Libs
APP
Guest OS
Bin/Libs
DB
Hardware
Host OS
Bin/Libs
APP APP
Bin/Libs
DB
Docker
Virtual Machine
DOCKER Jak to działa?
• lxc - LinuX Containers
• linux namespaces (pid, net, mnt, ipc, uts)
• cgroups (przypisywanie procesów do grup, kontrola
zasobów, limity)
• union filesystem
• format kontenerów (libcontainer oraz lxc)
DOCKER Gdzie on jest?
DOCKER Instalacja
# apt-get install docker.io
Instalacja z oficjalnego repozytorium ubuntu
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-
keys 36A1D7869245C8950F966E92D8576A8BA88D21E9



# echo "deb https://get.docker.com/ubuntu docker main" 

> /etc/apt/sources.list.d/docker.list



# apt-get update

# apt-get install lxc-docker
Instalacja z 3rd-party repozytorium dockera
więcej informacji w dokumentacji:
https://docs.docker.com/installation/#installation
DOCKER Pobieranie obrazu aplikacji
host # docker pull ubuntu:14.04



511136ea3c5a: Pull complete 

511136ea3c5a: Download complete 

fa4fd76b09ce: Download complete 

1c8294cc5160: Download complete 

117ee323aaa9: Download complete 

2d24f826cb16: Download complete 

Status: Downloaded newer image for ubuntu:14.04



host # docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

ubuntu trusty-20150218.1 2d24f826cb16 2 days ago 188.3 MB

ubuntu latest 2d24f826cb16 2 days ago 188.3 MB

ubuntu 14.04 2d24f826cb16 2 days ago 188.3 MB

ubuntu 14.04.2 2d24f826cb16 2 days ago 188.3 MB

ubuntu trusty 2d24f826cb16 2 days ago 188.3 MB
DOCKER Uruchomienie aplikacji bash
host # docker run -ti ubuntu:14.04 /bin/bash



root@749b70696917:/# ps au



USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.3 0.3 18168 1912 ? Ss 21:45 0:00 /bin/bash

root 19 0.0 0.2 15568 1136 ? R+ 21:45 0:00 ps au
root@749b70696917:/# exit

exit
DOCKER Detach containers
host # docker run -d postgres:latest



Unable to find image 'postgres:latest' locally

429ae004fde9: Pull complete 

662027bf7ac7: Downloading [===============> ] 98.63 MB/104.4 MB 2s

52dec81c6cd5: Download complete 

9fccd63a9a1f: Download complete 

Status: Downloaded newer image for postgres:latest
a2fef904f62d815c7c7f993bff66e82c91608ad12482f2916423c025ae078bb0
DOCKER Lista kontenerów
host # docker ps



CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 

a2fef904f62d postgres … 1 min… Up 9 min… 5432/tcp sleepy_darwin



host # docker ps -a



CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 

a2fef904f62d postgres … 1 min… Up 9 min… 5432/tcp sleepy_darwin

28ec28d16d57 ubuntu:14 … 30 min… Exited (0) silly_morse
host # docker ps -a -q



a2fef904f62d

28ec28d16d57
DOCKER Konfiguracja nazwy i portu tcp
host # docker run -d --name postgres -p 5432:5432 postgres:latest



c3b16d4d682aac528ead5cded3e7c29b32de66101bc9639b05fc45ab02cf338e



host # docker ps



CONTAINER ID IMAGE … PORTS NAMES 

c3b16d4d682a postgres:latest … 0.0.0.0:5432->5432/tcp postgres

a2fef904f62d postgres:latest … 5432/tcp sleepy_darwin



host # docker run -d --name postgres02 -P postgres:latest



391390c80134079f40747f34c240218b9f4c06c5b6537048ab795ebc89cd01d9
host # docker ps



CONTAINER ID IMAGE … PORTS NAMES 

391390c80134 postgres:latest … 0.0.0.0:49153->5432/tcp postgres02

c3b16d4d682a postgres:latest … 0.0.0.0:5432->5432/tcp postgres

a2fef904f62d postgres:latest … 5432/tcp sleepy_darwin
DOCKER exec
host # docker exec -ti postgres /bin/bash



root@38d0dc500374:/# ps auxf
PID TTY STAT TIME COMMAND

14 ? S 0:00 /bin/bash

26 ? R+ 0:00 _ ps axf

1 ? Ss 0:00 postgres

9 ? Ss 0:00 postgres: checkpointer process 

10 ? Ss 0:00 postgres: writer process

11 ? Ss 0:00 postgres: wal writer process

12 ? Ss 0:00 postgres: autovacuum launcher process

13 ? Ss 0:00 postgres: stats collector process
DOCKER diff
host # docker diff postgres



C /var

C /var/lib

C /var/lib/postgresql

A /var/lib/postgresql/data

C /run

C /run/postgresql

A /run/postgresql/.s.PGSQL.5432

A /run/postgresql/.s.PGSQL.5432.lock

C /root

A /root/.bash_history

C /tmp
DOCKER volumes oraz data containers
host # docker rm -f postgres



host # docker create --name postgres_data 

-v /var/lib/postgreql/data postgres



4399af09862693f2c0b36e3473c737ac7d4d9e0f7b6301f8715835b1b08ccd6a



host # docker run -d —name postgres 

--volumes-from postgres_data postgres



2c0e1e0ab084c886d66358a02c561e1c1d7a7b47ef5dc7883e493bdba97750fd
DOCKER bind volumes
host # docker rm -f postgres

host # docker run -d —name postgres 

-v /data/postgresql:/var/lib/postgreql/data postgres



79da06295d684b5b5120e6eddd24d0af38309590ef264b39c741781bdf7a58c4



host # ls /data/postgresql/



base pg_clog pg_hba.conf pg_logical pg_notify
pg_serial pg_stat pg_subtrans pg_twophase pg_xlog
postgresql.conf postmaster.pid global pg_dynshmem
pg_ident.conf pg_multixact pg_replslot pg_snapshots 

pg_stat_tmp pg_tblspc PG_VERSION postgresql.auto.conf
postmaster.opts
DOCKER operacje na obrazach
• build
• history
• save / load
• images (list images)
• pull / push
• rmi (remove)
• search
• tag
DOCKER operacje na kontenerach
• attach / wait
• diff / commit
• cp
• create / run / exec
• export
• inspect
• kill / start / stop / restart
• ps / top
• rename / rm (remove)
DOCKER budowanie własnych obrazów
host # ls

Dockerfile



host # cat Dockerfile



FROM ubuntu:14.04



RUN apt-get update

RUN apt-get install -y nginx



EXPOSE 80

EXPOSE 443



CMD ["nginx", "-g", "daemon off;"]



host # docker build -t my-nginx .



host # docker run -d -p 80:80 my-nginx

DOCKER co jeszcze warto powiedzieć?
• hub.docker.com
• Własne registry
• Docker events
• HTTP API (json) + biblioteki dla wielu języków
programowania
• CoreOS (docker + etcd + confd + systemd + fleet)
• Fig
• www.dotcloud.com / www.cloud66.com
DOCKER Bibliografia
• https://www.docker.com
• instalacja i konfiguracja
• dokumentacja (commandline, API, registry)
• https://hub.docker.com
• http://www.fig.sh
• https://coreos.com
Pytania?
Dziękuję za uwagę
Kamil y3ti Grabowski

Docker

  • 1.
  • 4.
    DOCKER Czym jest? •nowa „seksi” technologia? • tak, ale działająca również na starym sprzęcie! (kernel 3.8) • chroot, bsd jail oraz solaris zones również działały! • oczywiście, ale: • docker images • warstwowy system plików • docker hub • docker registry • HTTP REST like API • biblioteki dla większości popularnych języków programowania
  • 5.
    DOCKER vs VIRTUALMACHINE Hardware Host OS Hypervisor Guest OS Bin/Libs APP Guest OS Bin/Libs APP Guest OS Bin/Libs DB Hardware Host OS Bin/Libs APP APP Bin/Libs DB Docker Virtual Machine
  • 6.
    DOCKER Jak todziała? • lxc - LinuX Containers • linux namespaces (pid, net, mnt, ipc, uts) • cgroups (przypisywanie procesów do grup, kontrola zasobów, limity) • union filesystem • format kontenerów (libcontainer oraz lxc)
  • 7.
  • 8.
    DOCKER Instalacja # apt-getinstall docker.io Instalacja z oficjalnego repozytorium ubuntu # apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv- keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
 
 # echo "deb https://get.docker.com/ubuntu docker main" 
 > /etc/apt/sources.list.d/docker.list
 
 # apt-get update
 # apt-get install lxc-docker Instalacja z 3rd-party repozytorium dockera więcej informacji w dokumentacji: https://docs.docker.com/installation/#installation
  • 9.
    DOCKER Pobieranie obrazuaplikacji host # docker pull ubuntu:14.04
 
 511136ea3c5a: Pull complete 
 511136ea3c5a: Download complete 
 fa4fd76b09ce: Download complete 
 1c8294cc5160: Download complete 
 117ee323aaa9: Download complete 
 2d24f826cb16: Download complete 
 Status: Downloaded newer image for ubuntu:14.04
 
 host # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
 ubuntu trusty-20150218.1 2d24f826cb16 2 days ago 188.3 MB
 ubuntu latest 2d24f826cb16 2 days ago 188.3 MB
 ubuntu 14.04 2d24f826cb16 2 days ago 188.3 MB
 ubuntu 14.04.2 2d24f826cb16 2 days ago 188.3 MB
 ubuntu trusty 2d24f826cb16 2 days ago 188.3 MB
  • 10.
    DOCKER Uruchomienie aplikacjibash host # docker run -ti ubuntu:14.04 /bin/bash
 
 root@749b70696917:/# ps au
 
 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 root 1 0.3 0.3 18168 1912 ? Ss 21:45 0:00 /bin/bash
 root 19 0.0 0.2 15568 1136 ? R+ 21:45 0:00 ps au root@749b70696917:/# exit
 exit
  • 11.
    DOCKER Detach containers host# docker run -d postgres:latest
 
 Unable to find image 'postgres:latest' locally
 429ae004fde9: Pull complete 
 662027bf7ac7: Downloading [===============> ] 98.63 MB/104.4 MB 2s
 52dec81c6cd5: Download complete 
 9fccd63a9a1f: Download complete 
 Status: Downloaded newer image for postgres:latest a2fef904f62d815c7c7f993bff66e82c91608ad12482f2916423c025ae078bb0
  • 12.
    DOCKER Lista kontenerów host# docker ps
 
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
 a2fef904f62d postgres … 1 min… Up 9 min… 5432/tcp sleepy_darwin
 
 host # docker ps -a
 
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
 a2fef904f62d postgres … 1 min… Up 9 min… 5432/tcp sleepy_darwin
 28ec28d16d57 ubuntu:14 … 30 min… Exited (0) silly_morse host # docker ps -a -q
 
 a2fef904f62d
 28ec28d16d57
  • 13.
    DOCKER Konfiguracja nazwyi portu tcp host # docker run -d --name postgres -p 5432:5432 postgres:latest
 
 c3b16d4d682aac528ead5cded3e7c29b32de66101bc9639b05fc45ab02cf338e
 
 host # docker ps
 
 CONTAINER ID IMAGE … PORTS NAMES 
 c3b16d4d682a postgres:latest … 0.0.0.0:5432->5432/tcp postgres
 a2fef904f62d postgres:latest … 5432/tcp sleepy_darwin
 
 host # docker run -d --name postgres02 -P postgres:latest
 
 391390c80134079f40747f34c240218b9f4c06c5b6537048ab795ebc89cd01d9 host # docker ps
 
 CONTAINER ID IMAGE … PORTS NAMES 
 391390c80134 postgres:latest … 0.0.0.0:49153->5432/tcp postgres02
 c3b16d4d682a postgres:latest … 0.0.0.0:5432->5432/tcp postgres
 a2fef904f62d postgres:latest … 5432/tcp sleepy_darwin
  • 14.
    DOCKER exec host #docker exec -ti postgres /bin/bash
 
 root@38d0dc500374:/# ps auxf PID TTY STAT TIME COMMAND
 14 ? S 0:00 /bin/bash
 26 ? R+ 0:00 _ ps axf
 1 ? Ss 0:00 postgres
 9 ? Ss 0:00 postgres: checkpointer process 
 10 ? Ss 0:00 postgres: writer process
 11 ? Ss 0:00 postgres: wal writer process
 12 ? Ss 0:00 postgres: autovacuum launcher process
 13 ? Ss 0:00 postgres: stats collector process
  • 15.
    DOCKER diff host #docker diff postgres
 
 C /var
 C /var/lib
 C /var/lib/postgresql
 A /var/lib/postgresql/data
 C /run
 C /run/postgresql
 A /run/postgresql/.s.PGSQL.5432
 A /run/postgresql/.s.PGSQL.5432.lock
 C /root
 A /root/.bash_history
 C /tmp
  • 16.
    DOCKER volumes orazdata containers host # docker rm -f postgres
 
 host # docker create --name postgres_data 
 -v /var/lib/postgreql/data postgres
 
 4399af09862693f2c0b36e3473c737ac7d4d9e0f7b6301f8715835b1b08ccd6a
 
 host # docker run -d —name postgres 
 --volumes-from postgres_data postgres
 
 2c0e1e0ab084c886d66358a02c561e1c1d7a7b47ef5dc7883e493bdba97750fd
  • 17.
    DOCKER bind volumes host# docker rm -f postgres
 host # docker run -d —name postgres 
 -v /data/postgresql:/var/lib/postgreql/data postgres
 
 79da06295d684b5b5120e6eddd24d0af38309590ef264b39c741781bdf7a58c4
 
 host # ls /data/postgresql/
 
 base pg_clog pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_xlog postgresql.conf postmaster.pid global pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots 
 pg_stat_tmp pg_tblspc PG_VERSION postgresql.auto.conf postmaster.opts
  • 18.
    DOCKER operacje naobrazach • build • history • save / load • images (list images) • pull / push • rmi (remove) • search • tag
  • 19.
    DOCKER operacje nakontenerach • attach / wait • diff / commit • cp • create / run / exec • export • inspect • kill / start / stop / restart • ps / top • rename / rm (remove)
  • 20.
    DOCKER budowanie własnychobrazów host # ls
 Dockerfile
 
 host # cat Dockerfile
 
 FROM ubuntu:14.04
 
 RUN apt-get update
 RUN apt-get install -y nginx
 
 EXPOSE 80
 EXPOSE 443
 
 CMD ["nginx", "-g", "daemon off;"]
 
 host # docker build -t my-nginx .
 
 host # docker run -d -p 80:80 my-nginx

  • 21.
    DOCKER co jeszczewarto powiedzieć? • hub.docker.com • Własne registry • Docker events • HTTP API (json) + biblioteki dla wielu języków programowania • CoreOS (docker + etcd + confd + systemd + fleet) • Fig • www.dotcloud.com / www.cloud66.com
  • 22.
    DOCKER Bibliografia • https://www.docker.com •instalacja i konfiguracja • dokumentacja (commandline, API, registry) • https://hub.docker.com • http://www.fig.sh • https://coreos.com
  • 23.
  • 24.