🢂Docker ‑ Zadania rekrutacyjne i odpowiedzi
Te zadania mają na celu ocenę wiedzy kandydatów na temat praktycznego wykorzystania Dockera.
Zadania i odpowiedzi mogą być użyteczne podczas rekrutacji na stanowiska związane z obsługą i zarządzaniem kontenerami Docker, od deweloperów po administratorów systemów i inżynierów DevOps.
Zadanie 1: Podstawy Dockera
- Pytanie: Jakie polecenie użyjesz do uruchomienia kontenera Docker z obrazu nginx, aby był dostępny pod portem 8080 na hoście, mapując go na port 80 w kontenerze?
- Odpowiedź: Użyłbym polecenia
docker run -d -p 8080:80 nginx
. Opcja-d
uruchamia kontener w tle, a-p 8080:80
mapuje port 8080 na hoście na port 80 w kontenerze.
Zadanie 2: Dockerfile
- Pytanie: Napisz prosty Dockerfile dla aplikacji Node.js, która nasłuchuje na porcie 3000. Załóż, że plik startowy to app.js.
- Odpowiedź:
FROM node:alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Ten Dockerfile zaczyna od obrazu bazowego node:alpine
, kopiuje pliki aplikacji, instaluje zależności i uruchamia aplikację.
Zadanie 3: Docker Compose
- Pytanie: Jak skonfigurować
docker-compose.yml
dla aplikacji webowej uruchomionej w kontenerze web i bazy danych MySQL w kontenerze db? - Odpowiedź:
version: '3'
services:
web:
image: webapp:latest
depends_on:
- db
ports:
- '8000:8000'
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
Konfiguracja ta definiuje dwie usługi: web i db, gdzie web zależy od db, a MySQL jest konfigurowany z hasłem roota.
Zadanie 4: Sieci w Dockerze
- Pytanie: Jak stworzyć niestandardową sieć w Dockerze i uruchomić w niej dwa kontenery, tak aby mogły się ze sobą komunikować?
- Odpowiedź: Stwórz sieć:
docker network create moja_siec
Uruchom kontenery w tej sieci, np.:
docker run -d --name kontener1 --network moja_siec alpine sleep infinity
docker run -d --name kontener2 --network moja_siec alpine sleep infinity
Kontenery będą mogły się komunikować, używając nazw kontener1 i kontener2 jako adresów.
Zadanie 5: Zarządzanie Obrazami
- Pytanie: Jak zbudować obraz z
Dockerfile
znajdującego się w bieżącym katalogu i otagować go jakomojaaplikacja:1.0
? - Odpowiedź: Użyłbym polecenia
docker build -t mojaaplikacja:1.0 .
, gdzie-t mojaaplikacja:1.0
oznacza tagowanie zbudowanego obrazu, a.
wskazuje na bieżący katalog jako kontekst budowania.
Zadanie 6: Optymalizacja Obrazów Dockera
- Pytanie: Jak zmniejszyć rozmiar obrazu Dockera dla aplikacji napisanej w Pythonie?
- Odpowiedź: Aby zmniejszyć rozmiar obrazu:
- Użyj obrazu bazowego Pythona z tagiem alpine, np.,
FROM python:3.8-alpine
. - Zminimalizuj liczbę warstw, łącząc polecenia, gdzie to możliwe, używając
&&
wRUN
. - Usuń niepotrzebne pliki i zależności po ich instalacji w
Dockerfile
. - Skorzystaj z multi-stage builds, jeśli to możliwe, aby zbudować aplikację w jednym etapie, a następnie skopiować tylko potrzebne artefakty do ostatecznego obrazu.
- Użyj obrazu bazowego Pythona z tagiem alpine, np.,
Zadanie 7: Docker Networking
- Pytanie: Wyjaśnij, jak zabezpieczyć komunikację między kontenerami Dockera w ramach tej samej sieci.
- Odpowiedź: Aby zabezpieczyć komunikację:
- Użyj sieci typu overlay dla aplikacji rozproszonych na wielu hostach Docker, co zapewnia izolację i bezpieczną sieć.
- Stosuj zasady firewalla na hoście i wewnątrz kontenerów, aby ograniczyć ruch tylko do upoważnionych usług.
- Wykorzystaj Docker Secret i Docker Swarm do zarządzania poufnymi danymi, zapewniając bezpieczną komunikację między kontenerami.
Zadanie 8: Docker Volumes
- Pytanie: Jak przenieść dane między hostem a kontenerem Dockera?
- Odpowiedź: Aby przenieść dane, użyj wolumenów Docker:
Zadanie 9: Docker Logs
- Pytanie: Jak śledzić i zarządzać logami generowanymi przez kontenery Dockera?
- Odpowiedź: Do zarządzania logami:
- Użyj
docker logs [ID_KONTENERA]
do wyświetlenia logów kontenera. - Skonfiguruj sterownik logowania na poziomie kontenera lub demona Dockera, aby logi były przekazywane do systemu zewnętrznego, np. systemu agregacji logów.
- Można też wykorzystać narzędzia i usługi zewnętrzne, takie jak ELK Stack lub Fluentd, do bardziej zaawansowanego gromadzenia i analizy logów.
- Użyj
Zadanie 10: Docker Security
- Pytanie: Jakie są najlepsze praktyki dotyczące bezpieczeństwa kontenerów Dockera?
- Odpowiedź: Do najlepszych praktyk należą:
- Regularne aktualizowanie Dockera i obrazów kontenerów do najnowszych wersji, aby minimalizować ryzyko podatności.
- Używanie obrazów z zaufanych źródeł i skanowanie ich pod kątem podatności za pomocą narzędzi takich jak Clair.
- Ograniczanie dostępu do kontenerów za pomocą zasad sieciowych i zarządzania użytkownikami.
- Stosowanie zasad najmniejszych uprawnień dla procesów wewnątrz kontenerów.
- Wykorzystanie mechanizmów Docker Secrets lub innych narzędzi do zarządzania poufnymi danymi, unikając ich eksponowania w konfiguracji.