Docker Introduction

Installation

Docker je možné nainštalovať dvoma spôsobmi - buď priamo z balíčka distribúcie alebo stiahnutím zo stránok http://docker.com.

Inštalácia z balíčkov distribúcie

V prípade, že používate distribúciu založenú na distribúcii Debian (ako napr. Ubuntu):

sudo apt-get install docker

V prípade, že používate distribúciu založenú na distribúcii RedHat (ako napr. Fedora):

$ sudo dnf install docker
$ sudo systemctl start docker

Inštalácia z oficiálnej stránky

$ curl -fsSL https://get.docker.com/ | sh

Poinštalačná konfigurácia

Pridanie do skupiny docker:

$ sudo usermod -aG docker ${USER}

Spustenie docker démona, ak nie je spustený:

$ sudo systemctl start docker

Vytvorenie skupiny docker a priradenie používateľa do nej, aby nebolo potrebné spúšťať docker cez sudo:

$ sudo groupadd docker && sudo gpasswd -a ${USER} docker && sudo systemctl restart docker
$ newgrp docker

Overenie inštalácie

Zobrazenie verzie nainštalovaného docker-u

$ docker version
Client:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-common-1.12.6-6.gitae7d637.fc25.x86_64
 Go version:      go1.7.4
 Git commit:      ae7d637/1.12.6
 Built:           Mon Jan 30 16:15:28 2017
 OS/Arch:         linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Spustenie kontajnera s názvom hello-world

$ sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

Zobrazenie všetkých kontajnerov v systéme

sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
e6e8100709d7        hello-world         "/hello"            About a minute ago   Exited (0) About a minute ago                       furious_blackwell

Containers Basics

Zobrazíme si zoznam všetkých image-ov, ktoré máme k dispozícii:

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              48b5124b2768        12 weeks ago        1.84 kB

Stiahneme si image s názvom alpine, na ktorom budeme stavať svoje riešenie

$ docker pull alpine
Using default tag: latest
Trying to pull repository docker.io/library/alpine ... 
sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4: Pulling from docker.io/library/alpine

Digest: sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4
Status: Downloaded newer image for docker.io/alpine:latest

Z image-u spustíme container a v ňom príkaz, pomocou ktorého zobrazíme obsah súboru /etc/lsb-release :

$ docker run alpine cat /etc/os-release 
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.5.2
PRETTY_NAME="Alpine Linux v3.5"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"

Môžeme sa tiež pozrieť na verziu jadra, ktorá by mala byť rovnaká ako verzia jadra hosťovského systému:

$ uname -a
Linux discovery 4.10.10-200.fc25.x86_64 #1 SMP Thu Apr 13 01:11:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ docker run alpine uname -a
Linux 5176596c6c99 4.10.10-200.fc25.x86_64 #1 SMP Thu Apr 13 01:11:51 UTC 2017 x86_64 Linux

Keď si teraz necháme zobraziť zoznam vytvorených kontajnerov, nájdeme medzi nimi aj tento:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                      PORTS               NAMES
5185d1e18b80        alpine              "uname -a"              2 seconds ago       Exited (0) 2 seconds ago                        berserk_turing
390191de5f61        alpine              "cat /etc/os-release"   10 seconds ago      Exited (0) 10 seconds ago                       suspicious_easley

Pomocou príkazu ps -a sa zobrazia všetky kontajnery - či už aktívne alebo neaktívne. Ak chcete kontajner zo zoznamu všetkých kontajnerov odstrániť, musíte tak urobiť príkazom

$ docker rm 5185d1e18b80 390191de5f61

Aby sa tak udialo samo po ukončení kontajneru, použite prepínač --rm, napr.:

$ docker run --rm alpine echo "hello world"
hello world

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Niekedy je však potrebné získať priamy prístup do kontajneru pomocou shell-u. Pokiaľ spustíte len samotný shell, ten sa po spustení okamžite ukončí. Aby nedošlo k jeho okamžitému ukončeniu, je potrebné spustiť kontajner s prepínačmi -ti, napr.:

$ docker run --rm -ti alpine /bin/sh
/ # hostname
a6014e2a1080
/ # exit

Committing changes to an image

Spustíme interaktívny shell, doinštalujeme do neho apliáciu figlet overíme ju a interaktívny shell ukončíme ukončením štandardného vstupu (CTRL+D):

$ docker run --rm -ti alpine /bin/sh
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
v3.5.2-46-gdf4d97eba7 [http://dl-cdn.alpinelinux.org/alpine/v3.5/main]
v3.5.2-47-ga46d5990dc [http://dl-cdn.alpinelinux.org/alpine/v3.5/community]
OK: 7959 distinct packages available
/ # apk add figlet
(1/1) Installing figlet (2.2.5-r0)
Executing busybox-1.25.1-r0.trigger
OK: 5 MiB in 12 packages
/ # figlet docker
     _            _             
  __| | ___   ___| | _____ _ __ 
 / _` |/ _ \ / __| |/ / _ \ '__|
| (_| | (_) | (__|   <  __/ |   
 \__,_|\___/ \___|_|\_\___|_|   

/ # exit

Ak však vytvoríme kontajner z rovnakého image-u znova, nástroj figlet sa v ňom už nebude nachádzať - zmeny vykonané v kontajnery totiž nie sú trvalé:

$ docker run --rm -ti alpine /bin/sh
/ # figlet docker
/bin/sh: figlet: not found
^D

Ak chceme, aby boli tieto zmeny trvácne, z upraveného kontajneru potrebujeme vytvoriť nový obraz (ale nesmieme ho vypnúť):

$ docker run --rm -ti alpine /bin/sh
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
v3.5.2-46-gdf4d97eba7 [http://dl-cdn.alpinelinux.org/alpine/v3.5/main]
v3.5.2-47-ga46d5990dc [http://dl-cdn.alpinelinux.org/alpine/v3.5/community]
OK: 7959 distinct packages available
/ # apk add figlet
(1/1) Installing figlet (2.2.5-r0)
Executing busybox-1.25.1-r0.trigger
OK: 5 MiB in 12 packages
/ # figlet docker
     _            _             
  __| | ___   ___| | _____ _ __ 
 / _` |/ _ \ / __| |/ / _ \ '__|
| (_| | (_) | (__|   <  __/ |   
 \__,_|\___/ \___|_|\_\___|_|   

/ #

A následne z druhej konzoly spustíme

$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
docker.io/alpine                latest              4a415e366388        6 weeks ago         3.984 MB

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
10ac49989822        alpine              "/bin/sh"           2 minutes ago       Up 2 minutes                            gloomy_fermat

$ docker commit 10ac49989822 lab-image 
sha256:25ff95b661848a5275c8c3ad90392d1b87ff784af1468ed91326aaa05f6f848f

$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
lab-image                       latest              25ff95b66184        2 seconds ago       5.666 MB
docker.io/alpine                latest              4a415e366388        6 weeks ago         3.984 MB

Teraz môžeme uzavrieť predchádzajúci container a vytvoriť nový z novovytvoreného image-u:

$ docker run --rm -ti lab-image /bin/sh
figlet docker
     _            _             
  __| | ___   ___| | _____ _ __ 
 / _` |/ _ \ / __| |/ / _ \ '__|
| (_| | (_) | (__|   <  __/ |   
 \__,_|\___/ \___|_|\_\___|_|  
^D

References

results matching ""

    No results matching ""