🢂Docker ‑ Cheatsheet (ściąga)

Ten cheatsheet zawiera krótkie podsumowanie podstawowych pojęć, komend i opcji Dockera. Zawiera również informacje o źródłach dodatkowych informacji.

Docker to platforma do tworzenia, dystrybucji i uruchamiania aplikacji w kontenerach. Kontenery to lekkie, odizolowane środowiska, które zawierają wszystko, czego aplikacja potrzebuje do działania.

Podstawowe pojęcia:

  • Obraz: Plik zawierający cały system plików i konfigurację niezbędną do uruchomienia aplikacji.
  • Kontener: Działająca instancja obrazu.
  • Repozytorium: Miejsce, gdzie przechowywane są obrazy (np. Docker Hub).
  • Rejestr: Serwer przechowujący obrazy (np. Docker Hub).
  • Warstwa: Część obrazu składająca się z plików i instrukcji.

Poniżej wybrane polecenia, które mogą okazać się niezastąpione w codziennej pracy z Dockerem:

Podstawowe komendy:

Instalacja Dockera:

  • sudo apt-get update: Aktualizuj listę pakietów.
  • sudo apt-get install docker-ce docker-ce-cli containerd.io: Instaluj Docker Engine.

Zarządzanie kontenerami:

  • docker ps [opcje]: Wyświetl działające kontenery.
  • docker stop [ID_KONTENERA]: Zatrzymaj działający kontener.
  • docker run [opcje] obraz [polecenie] [argumenty...]: Uruchom nowy kontener.

Obrazy Dockera:

  • docker images: Pokaż wszystkie obrazy.
  • docker pull [nazwa_obrazu]: Pobierz obraz z Docker Hub.
  • docker rmi [nazwa_obrazu]: Usuń obraz.

Zarządzanie siecią:

  • docker network ls: Wyświetl dostępne sieci.
  • docker network create [nazwa]: Stwórz nową sieć.

Woluminy i przechowywanie danych:

  • docker volume create [nazwa]: Utwórz nowy wolumin.
  • docker volume ls: Wyświetl dostępne woluminy.

Dockerfile i budowanie obrazów:

  • docker build -t [nazwa_obrazu]:[tag] .: Zbuduj obraz z Dockerfile w bieżącym katalogu.

Docker Compose:

  • docker-compose up: Uruchom usługi zdefiniowane w pliku docker-compose.yml.
  • docker-compose down: Zatrzymaj i usuń wszystkie kontenery zdefiniowane w docker-compose.yml.

Logi i monitorowanie:

  • docker logs [ID_KONTENERA]: Wyświetl logi kontenera.
  • docker stats: Wyświetl statystyki zużycia zasobów przez kontenery.

Zaawansowane zarządzanie:

  • docker exec -it [ID_KONTENERA] bash: Wejdź do działającego kontenera.
  • docker system prune: Usuń nieużywane dane Dockera, zwalniając miejsce na dysku.

Interakcja z kontenerem:

  • docker attach [ID_KONTENERA]: Podłącz terminal do działającego kontenera.
  • docker cp [ŚCIEŻKA_HOSTA]:[ŚCIEŻKA_KONTENERA]: Kopiuj pliki/dane między kontenerem a systemem hosta.

Zarządzanie obrazami:

  • docker buildx build --platform linux/amd64,linux/arm64 -t [nazwa_obrazu]:[tag] .: Buduj obrazy wieloplatformowe.
  • docker save -o [nazwa_pliku.tar] [nazwa_obrazu]: Zapisz obraz do pliku TAR.
  • docker load -i [nazwa_pliku.tar]: Załaduj obraz z pliku TAR.

Zarządzanie kontenerami na poziomie systemu:

  • docker top [ID_KONTENERA]: Pokaż procesy działające w kontenerze.
  • docker pause [ID_KONTENERA]: Wstrzymaj wszystkie procesy w kontenerze.
  • docker unpause [ID_KONTENERA]: Wznów wszystkie procesy w kontenerze.

Zaawansowane zarządzanie siecią:

  • docker network connect [nazwa_sieci] [ID_KONTENERA]: Podłącz kontener do sieci.
  • docker network disconnect [nazwa_sieci] [ID_KONTENERA]: Odłącz kontener od sieci.

Zarządzanie woluminami:

  • docker volume inspect [nazwa_woluminu]: Wyświetl szczegółowe informacje o woluminie.
  • docker volume rm [nazwa_woluminu]: Usuń wolumin.

Docker Compose zaawansowane:

  • docker-compose logs [usługa]: Pokaż logi dla określonej usługi.
  • docker-compose restart [usługa]: Zrestartuj określoną usługę.

Bezpieczeństwo i zarządzanie:

  • docker secret create [nazwa_sekretu] [plik_sekretu]: Utwórz nowy sekret.
  • docker secret ls: Wyświetl listę sekretów.

Optymalizacja i diagnostyka:

  • docker system df: Pokaż zużyte miejsce przez Docker.
  • docker inspect [ID_KONTENERA/OBRAZU]: Wyświetl niskopoziomowe informacje na temat kontenera/obrazu.

Tagowanie i wersjonowanie obrazów:

  • docker tag [nazwa_obrazu]:[aktualny_tag] [nazwa_obrazu]:[nowy_tag]: Oznacz obraz nowym tagiem.

Przykłady

Zdefiniujmy konfigurację Docker Compose dla aplikacji w PHP, Java oraz JavaScript/TypeScript. Poniższe przykłady są zgodne z wersją 3.1 Docker Compose.

PHP

W tym kontenerze uruchomiona zostanie aplikacja PHP z serwerem Apache. Katalog ./php na Twoim komputerze zostanie zamontowany jako katalog roboczy w kontenerze, umożliwiając łatwą modyfikację kodu bez potrzeby przebudowywania obrazu.

version: '3.1'
services:
    php-app:
        image: php:7.4-apache
        volumes:
            - ./php:/var/www/html
        ports:
            - '80:80'
        environment:
            PHP_INI_DIR: '/usr/local/etc/php'

Java

Kontener dla aplikacji Java używa obrazu openjdk:11. Kod źródłowy aplikacji Java znajduje się w katalogu ./java na Twoim komputerze. Kontener kompiluje i uruchamia aplikację przy pomocy javac i java.

version: '3.1'
services:
    node-app:
        image: node:14
        volumes:
            - ./js:/usr/src/app
        working_dir: /usr/src/app
        command: bash -c "npm install && npm start"
        ports:
            - '3000:3000'

JavaScript/TypeScript

Dla aplikacji w JavaScript lub TypeScript używany jest obraz node:14. Katalog ./js zawiera kod źródłowy aplikacji i jest zamontowany w kontenerze. Aplikacja jest uruchamiana po zainstalowaniu zależności przez npm install oraz wykonaniu polecenia npm start.

version: '3.1'
services:
    node-app:
        image: node:14
        volumes:
            - ./js:/usr/src/app
        working_dir: /usr/src/app
        command: bash -c "npm install && npm start"
        ports:
            - '3000:3000'

WordPress , phpmyadmin i MySQL docker-compose.yml

Mapowanie lokalnego folderu do kontenera z WordPress umożliwia łatwą edycję plików WordPress bezpośrednio z poziomu Twojego systemu plików, co jest szczególnie przydatne podczas rozwoju i testowania motywów czy wtyczek.

version: '3.1'

services:
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        restart: always
        environment:
            PMA_PORT: 3307 # Ustawienie phpMyAdmin do używania niestandardowego portu
            PMA_HOST: mysql
            PMA_USER: user
            PMA_PASSWORD: password
            PMA_ARBITRARY: 1
            UPLOAD_LIMIT: 300M
        ports:
            - '1111:80'
        depends_on:
            - mysql

    mysql:
        image: mysql:5.7
        restart: always
        command: --port=3307 # Tylko przykład, wymaga dostosowania
        environment:
            MYSQL_ROOT_PASSWORD: rootpassword
            MYSQL_DATABASE: wordpressdb
            MYSQL_USER: user
            MYSQL_PASSWORD: password
        ports:
            - '3307:3307'
        volumes:
            - db:/var/lib/mysql

    wordpress:
        image: wordpress:latest
        restart: always
        volumes:
            - ./wordpress:/var/www/html
        environment:
            WORDPRESS_DB_HOST: mysql:3307
            WORDPRESS_DB_USER: user
            WORDPRESS_DB_PASSWORD: password
            WORDPRESS_DB_NAME: wordpressdb
            WORDPRESS_TABLE_PREFIX: wp_163_
            WORDPRESS_CONFIG_EXTRA: |
                define('DISABLE_WP_CRON', true);
                define('WP_ALLOW_MULTISITE', true);
                define('MULTISITE', true);
                define('SUBDOMAIN_INSTALL', false);
                define('DOMAIN_CURRENT_SITE', 'localhost:8080');
                define('PATH_CURRENT_SITE', '/');
                define('SITE_ID_CURRENT_SITE', 1);
                define('BLOG_ID_CURRENT_SITE', 1);
                define('WP_DEBUG',         true);
                define('WP_DEBUG_LOG',     true);
                define('WP_DEBUG_DISPLAY', true);
        depends_on:
            - mysql
        ports:
            - '1112:80'

volumes:
    wordpress:
    db:

Grafana i docker docker-compose.yml

version: '3.1'

services:
    grafana:
        image: grafana/grafana:latest
        container_name: grafana
        ports:
            - '3000:3000'
        environment:
            GF_SECURITY_ADMIN_USER: 'admin'
            GF_SECURITY_ADMIN_PASSWORD: 'strongpassword'
        volumes:
            - grafana_data:/var/lib/grafana
            - grafana_logs:/var/log/grafana
            - grafana_config:/etc/grafana
        restart: unless-stopped

volumes:
    grafana_data:
    grafana_logs:
    grafana_config:

W tej konfiguracji:

  • Service grafana: Uruchamia najnowszą wersję Grafana, dostosowując ustawienia takie jak nazwa użytkownika i hasło administratora poprzez zmienne środowiskowe (GF_SECURITY_ADMIN_USER, GF_SECURITY_ADMIN_PASSWORD).
  • Porty: Usługa jest dostępna na porcie 3000 hosta, co umożliwia dostęp do Grafana poprzez przeglądarkę internetową.
  • Woluminy: Trzy woluminy (grafana_data, grafana_logs, grafana_config) są używane do trwałego przechowywania danych aplikacji, logów i plików konfiguracyjnych. Dzięki temu konfiguracje i dane nie zostaną utracone przy restartowaniu lub rekreacji kontenera.
  • Restart: Polityka unless-stopped sprawia, że kontener będzie automatycznie restartowany po zatrzymaniu (chyba że zostanie zatrzymany ręcznie).

Uruchomienie Kontenerów

Po zdefiniowaniu woluminu w pliku docker-compose.yml, uruchom lub ponownie uruchom swoje kontenery, aby zastosować zmiany. Możesz to zrobić za pomocą poniższego polecenia wykonanego w katalogu, w którym znajduje się Twój plik docker-compose.yml:

docker-compose up -d

Dodatkowe informacje:

Uwaga: Ten cheatsheet jest tylko krótkim podsumowaniem. Więcej informacji można znaleźć w dokumentacji Dockera. Polecenia Dockera mogą się różnić w zależności od wersji.