Docker: wprowadzenie
Opublikowano śro 18 listopada 2020 w containers • 2 min read
Docker - odtwarzanie/reprodukcja środowiska, wirtualizuje system operacyjny a nie hardware (jak np. virtual machine) -> docker tworzy "odizolowane mikrokomputery"
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
Źródła:
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