Docker

24
Docker Kamil y3ti Grabowski UW@IT - 25.02.2015

Transcript of Docker

DockerKamil 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 aplikacjihost # 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' locally429ae004fde9: 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 c3b16d4d682aac528ead5cded3e7c29b32de66101bc9639b05fc45ab02cf338ehost # docker ps CONTAINER ID IMAGE … PORTS NAMES c3b16d4d682a postgres:latest … 0.0.0.0:5432->5432/tcp postgresa2fef904f62d 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 diffhost # 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 4399af09862693f2c0b36e3473c737ac7d4d9e0f7b6301f8715835b1b08ccd6ahost # 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