Wyszukaj / o blogu

Docker: wprowadzenie

Opublikowano śro 18 listopada 2020 w containers • 2 min read

docker-logo

Docker - odtwarzanie/reprodukcja środowiska, wirtualizuje system operacyjny a nie hardware (jak np. virtual machine) -> docker tworzy "odizolowane mikrokomputery"

docker-vs-vm

Docker-file - plan pozwalający na stworzenie docker-image/ tu znajduje się definicja środowiska (lista zależności) dla Docker-image

Docker-image - środowisko obsługujące docker-kontenerów/ niezmienne "snapshot" środowiska

Docker-Container - proces/pracujący (running process) Docker-imag'a


Podstawowe komendy

docker ps -> docker process - ukazuje działające dockery (ukazuje min. powiązanie z obrazem oraz portem)

docker build -t userName_dockerHub/nazwa_aplikacji:numer.wersji ścieżkaDoPlikuDockerfile

-> switch -t = tag pozwala na przypisanie tagu do dockera w trakcie jego budowy (build), umożliwia to jego proste odnalezienia / (nazwa użytkownika jest opcjonalna)

// np.
docker build -t userName_dockerHub/nazwa_aplikacji:1.0 .

docker push/pull - komendy pozwalające na wypychanie i pobieranie dockera z remota

docker run - uruchomienie Dockera

docker stop $(docker ps -aq) - zatrzymuje wszystkie pracujące dockery

docker compose down - zamyka wszystkie dockery stworzone przez up


Prosta nodejs Express Aplikacja

źródło poniższego kodu: GH- fireship-io/docker-nodejs-basic-demo

wyjściowa aplikacja -> src/index.js

    // index.js
    const app = require('express')();

    app.get('/', (req, res ) => 
        res.json({ message: 'Docker jest prosty 🐳' }) 
    );

    const port = process.env.PORT || 8080;

    app.listen(port, () => console.log(`app listening on http://localhost:${port}`) );

>>> Dockerfile <<<

1 stworzenie Dockerfile

--------------- dodanie instrukcji (zwanych warstwami) -----------------

2 wskazanie środowiska -> np. FROM node:12 (wersja 12 node.js)

3 Dodanie źródła kodu poprzez zdefiniowanie Working Directory -> np. WORKDIR /app

4 Wskazanie ścieżki pozwalającej na skopiowanie zależności -> COPY package*.json ./ (1. skąd 2. dokąd)

5 Wskazanie instrukcji wykonania istalacji pakietów node.js -> RUN np install

6.1 Wskazanie lokalnych modułów nodejs do zignorowania w trakcie kopiowania plików lokalnych -> stworzenie .dockerignore -> dodanie node_modules

6.2 Skopiowanie kodu źródłowego (skopowanie plików lokalnych do CWD, wskazanie lokalnych modułów do zignorowania w trakcie kopiowania) -> COPY . .

7 Wskazanie zmienna środowiskowa pracy -> ENV PORT=8080

8 Zdefiniowanie nasłuchiwania (port) -> EXPOSE 8080

9 Command/komenda wskazuje w jaki sposób ma pracować (run) docker -> CMD ["npm", "start"]

Docker Image

1 Wpisanie komendy w terminalu -> docker build -t nazwa_aplikacji lub docker build -t userName_dockerHub/nazwa_aplikacji:1.0 .

2 Wypchnięcie do remota -> docker push adres_repozytorium_na_np.DockerHub

3 Uruchomienie dockera docker run idDockera/tagDockera

4 Uruchomienie dockera jeśli port jest niewidoczny - wówczas należy przekierować port na dostępny docker run -p 5000:8080 idDockera/tagDockera (p->port forwarding local:container -> 5000:8080)

5 Zamknięcie Dockera -> docker stop kluczDockera/id np docker stop 11da141426d3a0 docker stop tagDockera

Volumes

  • folder do przechowywania informacji/plików, które zostaną zapisane po wyłączeniu dockera

    // stworzenie docker volume create nazwaFolderu

    // użycie --mount source=nazwaFolderu,nazwaKolejnegoFolderu


Docker Hub

Docker-Hub - miejsce (strona) która pozwoli na przechowywanie, rozpowszechnianie obrazów Dockera oraz na kolaborację nad/z nimi


Moby Project - tool to build container-base system przykładowo ten przy użyciu LinuxKit

przy użyciu Mobiego można pracować z LinuxKit w celu stworzenia własnej dystrybucji Linuxa

moby i docker


Źródła:

docs.docker.com

Learn Docker in 7 Easy Steps - Full Beginner's Tutorial

Docker - Complete Tutorial [Docker For Everyone In 2 Hours]

you need to learn Docker RIGHT NOW!! // Docker Containers 101

Demystifying the Relationship Between Moby & Docker

OK, I give up. Is Docker now Moby? And what is LinuxKit?