Łukasz Piłatowski
Full Stack Developer
TEONITE
Świeżym okiem na Dockera
Kilka słów o mnie
6 lat programowania
- Pascal, PHP (Symphony 2)
- Java (Dropwizard)
- Javascript (React) & Python (Django)
Od czerwca w JUGu
Prywatnie: tata, ratownik i saksofonista
Moje początki z Dockerem
- Problem ze zrozumieniem
- Używanie na codzień
- Jak ja mogłem bez tego funkcjonować?
Wykonywanie tych samych instrukcji w kółko



W czym pomaga Docker
Używając Dockera
docker run -P postgres
docker run -P mongo
docker run -P rethinkdbTworzenie obrazów i ich udotępnianie
FROM node:5.12
MAINTAINER lpilatowski@teonite.com
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN npm install
RUN npm build
VOLUME ["/app/dist"]docker build -t my_app:latest .
docker push "myrepo.com/myapp-frontend:latest"Tworzenie powiązań między kontenerami
db:
image: postgres
backend:
image: myrepo.com/myapp-frontend:latest
command: ./run.sh
environment:
- DB_HOST=db
- DB_PORT=5432
links:
- db
frontend:
image: myrepo.com/myapp-backend:latest
links:
- backend
ports:
- 9852:82Wszystkie kontenery korzystają z jednego kernela
Kontener:
- maszyna wirtualna na sterydach
- Posiada niezbędne pliki binarne do uruchomienia
Co to jest obraz i kontener?
Obraz
Kontener
Kontener
Kontener
Obrazy i kontenery
Kontener
Pliki źródłowe
oraz binarne
Host
Kontener
Aplikacja
Pliki źródłowe
oraz binarne
Host
Kontener
Aplikacja
5432
Pliki źródłowe
oraz binarne
Host
Kontener
Aplikacja
5432
1234
Pliki źródłowe
oraz binarne
Host
Kontener
Aplikacja
5432
1234
wolumen
env vars
Uruchomienie z portem, zmiennymi środowiskowymi i volumenem
docker run \
-dp 1234:5432 \
-e POSTGRES_USER="foo" \
-e POSTGRES_PASSWORD="my_secret_pass" \
-v /home/vandavv/path/to/db_volume:/var/lib/postgresql/data \
postgres- Korzystanie z Dockerfile
- Wybieranie obrazu bazowego
- Budowanie i uruchomienie obrazu
Tworzenie własnych obrazów
- Frontend: React.js
- Backend: Django Rest Framework
- Baza: Postgres
Przykładowy projekt

Struktura projektu
Wymagania:
- Node oraz npm
Uruchomienie:
npm install
npm startAdres:
- http://localhost:3000/
Tworzenie Dockerfile - frontend






Wybór obrazu bazowego:
- ubuntu
- phusion/baseimage
- java
- python
- node
- ...
FROM node
MAINTAINER lpilatowski@teonite.comZróbmy to w Dockerze!
npm install
FROM node
MAINTAINER lpilatowski@teonite.com
ADD . .
RUN npm installFROM node
MAINTAINER lpilatowski@teonite.com
ADD package.json .
RUN npm install
ADD . .Przygotowanie systemu
npm start
FROM node
MAINTAINER lpilatowski@teonite.com
ADD package.json .
RUN npm install
ADD . .
EXPOSE 3000
CMD npm startdocker build -t test_frontend .
docker run -p 3000:3000 test_frontendUruchomienie aplikacji

- W jaki sposób połączyć 2 kontenery
- Wysyłanie obrazów na własnego hub'a
- Tworzenie docker-compose.yml
Tworzenie relacji pomiędzy komponentami - backend
DB
Backend
?
Tworzenie Dockerfile
Stworzyć obraz backendu
FROM python
MAINTAINER lpilatowski@teonite.com
ADD requirements.txt .
RUN pip install -r requirements.txt
ADD . .Wysyłanie na docker hub'a
docker tag test_frontend vandavv/test_frontend:latest
docker tag test_backend vandavv/test_backend:latestdocker logindocker push vandavv/test_frontend:latest
docker push vandavv/test_backend:latest
Tworzymy relacje
- Docker Compose
version: '2'
services:
db:
image: postgres
backend:
image: vandavv/test_backend
ports:
- 8000:8000
links:
- db
Uruchamiamy compose'a
docker-compose up
Stwórzmy stack aplikacji
version: '2'
services:
db:
image: postgres
backend:
image: vandavv/test_backend
ports:
- 8000:8000
links:
- db
frontend:
image: vandavv/test_frontend
ports:
- 3000:3000
links:
- backend
docker-compose upUruchomienie stacku


Podsumowaie
- Skalowalność
- Aplikacja w pełni zdockeryzowana
- Działanie niezależne od systemu
docker-compose upDziękuję za uwagę
Łukasz Piłatowski
@lpilatowski
lpilatowski@teonite.com
Świeżym okiem na dockera
By vandavv
Świeżym okiem na dockera
- 835