Ł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