V technologii dockeru potkáváme tři základní objekty: image, container a volume.

Container
Virtuální stroj. Může být spuštěný nebo zastavený. Jako parametry má:
- id
- název
- image
- volume
- porty
- network
- …
Práce s kontejnery:
docker ps # vypíše spuštěné kontejnery
docker ps - a # vypíše všechny kontejnery
docker rm ... # smaže kontejner
docker start ... # spustí existující kontejner. Nedají se měnit parametry!!!
docker stop ... # vypne existující kontejner
docker create
docker run # vytvoří a spustí kontejner
Vytvoření kontejneru:
docker run -ti ubuntu
kde:
- -ti znamená interaktivně a s terminálem
- ubuntu je název image, která se spustí
Zajímavější příklad:
docker run -p 8080:80 -v "$PWD":/var/www/html php:7.2-apache
kde:
- -p 8080:80 - můj port 8080 připoj na vnitřní port 80
- -v "$PWD":/var/www/html - můj aktuální adresář připoj na vnitřní adresář /var/www/html
- php:7.2-apache - jméno image
Pojmenování
Kontejner je možné pojmenovat:
docker run --name apache -p 8080:80 -v "$PWD":/var/www/html php:7.2-apache
Když potom spustím předchozí příkaz 2x po sobě, dostanu hlášku, že nelze vytvořit stejný kontejner 2x:
docker: Error response from daemon: Conflict. The container name "/apache" is already in use by container "ee1ea76325e894c8852b821acb8bbf6cce6053e5e96504c5a165285b5cb1862d". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
Řešení:
1. smazat kontejner se stejným jménem:
$ docker rm apache
2. spustit existující:
docker start apache # spustí ho na pozadí
docker start -i apache # spustí ho na popředí
Předávání parametrů
Pro předávání parametrů se často používají environment variables takto:
$ docker run --name db -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7
Image
Je to filesystém, disk, image, který obsahuje spustitelný kód a data pro běh kontejneru. Může mít několik vrstev.
Práce s image:
docker image ls # vypíše image, které mám v systému
docker image ls -a # vypíše image, které mám v systému včetně intermediate verzí
docker rm ... # smaže image
docker build # vytvoří image z Dockerfile
docker pull
docker push # stáhne / nahraje image do registry
Vytvoření image:
docker build -t mojeimg .
Vytvoří image podle zadání v souboru Dockerfile
Volume
Volume slouží k uložení dat. Nemusí se používat vždy - např. apache, ubuntu - mohou fungovat i bez volume. Avšak po vypnutí se ztratí všechna data.
Pozor! Některé image používají volume a pokud není specifikován, vytvoří se sám od sebe.
Práce s volume:
docker volume ls
docker volume
Připojení dovnitř do dockeru
Do některých běžících kontejnerů se lze snadno připojit:
- zjistit ID spuštěného kontejneru
- připojit se do něj takto:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c377003e6aa zaletsi2docker_php "docker-php-entrypoi…" 24 hours ago Up 24 hours 0.0.0.0:5004->80/tcp zaletsi2docker_php_1
2f59763bf781 mysql:5.7 "docker-entrypoint.s…" 24 hours ago Up 24 hours 3306/tcp, 33060/tcp zaletsi2docker_db_1
$ docker exec -ti 1c377003e6aa bash
root@1c377003e6aa:/var/www/html#
Kopírování dat z volume do lokální složky
docker run -ti -v cng_uploads:/volume -v `pwd`/backup:/backup busybox sh