Ł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 rethinkdb
Tworzenie 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:82
Wszystkie 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 start
Adres:
- http://localhost:3000/
Tworzenie Dockerfile - frontend
Wybór obrazu bazowego:
- ubuntu
- phusion/baseimage
- java
- python
- node
- ...
FROM node
MAINTAINER lpilatowski@teonite.com
Zróbmy to w Dockerze!
npm install
FROM node
MAINTAINER lpilatowski@teonite.com
ADD . .
RUN npm install
FROM 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 start
docker build -t test_frontend .
docker run -p 3000:3000 test_frontend
Uruchomienie 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:latest
docker login
docker 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 up
Uruchomienie stacku
Podsumowaie
- Skalowalność
- Aplikacja w pełni zdockeryzowana
- Działanie niezależne od systemu
docker-compose up
Dziękuję za uwagę
Łukasz Piłatowski
@lpilatowski
lpilatowski@teonite.com
Świeżym okiem na dockera
By vandavv
Świeżym okiem na dockera
- 702