apt install docker.io
Jeżeli mamy skonfigurowany bridge i korzystamy z wirtualizacji przy użyciu libvirt często po instalacji dockera pojawiają się problemy z działaniem sieci. Najprostszym rozwiązaniem (o ile nie korzystamy z ebtables/iptables do kształtowania ruchu w naszym połączeniu zmostkowanym) jest wyłączenie modułu br_netfilter. Wspomniany moduł możemy usunąć z dostępnych dla kernela modułów dodając wpis blacklist br_netfilter w pliku /etc/modprobe.d/blacklist.conf a następnie wywołując update-initramfs -u.
Niestety niekiedy to rozwiązanie okazuje się nie być do końca skutecznym. Ostateczne rozwiąznie problemu to:
echo install br_netfilter /bin/true > /etc/modprobe.d/disable-br-netfilter.conf
Drugą opcją jest wyłączenie funkcjonalności tego modułu bez usuwania go:
sysctl -w net.bridge.bridge-nf-call-iptables=0
Przy czym to polecenie musi być wywoływane przy starcie systemu.
Trzecia opcja (po każdym uruchomieniu hosta):
iptables -I FORWARD -i br0 -o br0 -j ACCEPT
Prócz tego warto dodać swojego użytkownika do grupy docker by móc używać dockera przez ciągłego wywoływania sudo
usermod -a -G docker USERNAME
W katalogu /var/lib/docker przetrzymywane są dane związane z dockerem.
Podkatalog image zwiera obraz a containers zawiera dane kontenerów. Każdy kontnere ma katalog zaczynający się od jego CONTAINER ID.
Edytując plik hostconfig.json możemy zmienić konfigurację istniejącego kontenera. Przykładowo możemy zmienić numer portu na którym kontener wystawia swój port, żeby tego dokonać należy:
docker stop ID_KONTENERAHostPort na nowy numer portudocker start ID_KONTENERA
Jeżeli nie zatrzymamy całej usługi dockera to niestety zmiany które wprowadzimy zostaną od razu nadpisane i nie będą uwzględnione.Lista dostępnych lokalnie obrazów
docker image ls
Usuwanie obrazu z lokalnego repozytorium
docker image rm ID_OBRAZU
Pobieranie konkretnego obrazu
docker image pull NAZWA_OBRAZU:TAG
Przypisywanie oznaczenia obrazowi
docker tag ID_OBRAZU NAZWA:TAG
Lista wszystkich kontenerów
docker container ls -a
Uruchamianie konsoli bash podpiętej pod wybrany kontener
docker exec -it ID_KONTENERA bash
Uruchomienie kontenera z portem przekierowanym przez docker-proxy na lokalną maszynę (należy pamiętać, że run za każdym razem tworzy nowy kontener)
docker container run -d -P ID_KONTENERA
Uruchomienie kontenera który udostępnia port 80 na porcie 81 lokalnego hosta (należy pamiętać, że run za każdym razem tworzy nowy kontener)
docker container run -d -p 81:80 ID_KONTENERA
Jeżeli chcemy utworzyć kontener z systemem operacyjnym który ma działać to musimy go wywołać z powłoką, tylko wtedy będzie się go dało ponownie uruchomić polecenim docker start ID_KONTENERA. By tego dokonać należy wydać polecenie
docker container run NAZWA_SYSTEMU bash
Zatrzymywanie pracy kontenera
docker container stop ID_KONTENERA
Zabicie kontenera
docker container kill ID_KONTENERA
Usuwanie kontenera
docker container rm ID_KONTENERA
Przeglądanie szczegółowych danych na temat kontenera
docker container inspect ID_KONTENERA
Uruchomienie systemu w kontenerze w trybie interaktywnym z bash
docker run -it ubuntu bash
W nowym katalogu tworzymy plik dockerfile. Każda linia tego pliku to nowa wartwa w obrazie dockera. Umieszczając polecenia w pliku należy mieć na uwadze by były zupełnie nieinteraktywne.
FROM ubuntu:16.04
LABEL maintainer="dane do kontaktu"
RUN apt-get update
RUN apt-get install -y python3
FROM - oznacza skąd pobieramy pierwotną warstwę - podajemy nazwę obrazu. Brak tagu po dwukropku spowoduje pobranie najnowszej wersji.
LABEL maintainer - tutaj warto podać dane kontaktowe jeśli będziemy publikować obraz.
RUN to polecenie które ma być wykonane w kontenerze.
docker pull influxdb
Jeżli zależy nam na pobraniu konkretnej wersji (na przykład Ubuntu) to wydajemy polecenie:
docker pull ubuntu:18.04
docker run -it influxdb
Domyślnie kontener uruchomi się bez przekierowania portów a parametr -it podpina na stałe terminal.
Zeby uruchomić kontener w trybie headless i z przekierowanymi portami użyć trzeba polecenia:
docker run -d -P --name nasz_influx influxdb
Porty zostaną wybrane losowo, by zobaczyć jakie porty zostały przydzielona wystarczy wydać komendę
docker port nasz_influx
Możemy na sztywno wyznaczyć porty używając składni:
docker run -d -p 8086:8086 nasz_influx
Co spowoduje przekierowanie portu 8086 z nasz_influx na port 8086 maszyny hostującej nasze kontenery.
Pierwszy port to port maszyny hosta a drugi port z kontenera.
Stworzenie kontenera influxdb o nazwie nasz_influx z przekierowaniem na port 8086 przechowującego dane w katalog /var/lib/influxdb2 maszyny hostującej kontener wygląda następująco:
docker run -d -p 8086:8086 -v myInfluxVolume:/var/lib/influxdb2 --name nasz_influx influxdb
docker stop nasz_influx
docker start nasz_influx
docker images
docker ps
Jeżeli dodamy parametr -a to zobaczymy również kontenery, które zakończyły pracę.