Docker

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

docker-architektura.png

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:

  1. zjistit ID spuštěného kontejneru
  2. 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
Není-li uvedeno jinak, obsah této stránky je pod licencí Creative Commons Attribution-ShareAlike 3.0 License