Docker 2

docker-compose

Inštalácia

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# or

pip install docker-compose

Orchestrácia

https://www.docker.com/blog/containerized-python-development-part-2/

docker-compose.yml

  • version
  • services
  • networks
  • volumes

Config & Secrets

configs:
  # Krakend
  clientzone-gateway-endpoints:
    file: ./krakend/endpoints.json
    name: clientzone-gateway-endpoints
  
  clientzone-gateway-krakend:
    file: ./krakend/krakend.json
    name: clientzone-gateway-krakend


# V services
krakend:
    image: registry.gitlab.com/api-gateway
    networks:
      - internal-clientzone
      - traefik
    configs:
      - source: clientzone-gateway-endpoints
        target: "/etc/krakend/config/partials/endpoints.json"
      - source: clientzone-gateway-krakend
        target: "/etc/krakend/krakend.json"

Wordpress

version: "3.9"

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

volumes:
  db_data:

React, Express, MongoDB

version: "3.7"
services:
  frontend:
    build: frontend
    ports:
      - 3000:3000
    stdin_open: true # Aby sme mohli poslať signál na zastavenie
    volumes:
      - ./frontend:/usr/src/app
      - /usr/src/app/node_modules
    container_name: frontend
    restart: always
    networks:
      - react-express
    depends_on:
      - backend

  backend:
    container_name: backend
    restart: always
    build: backend
    volumes:
      - ./backend:/usr/src/app
      - /usr/src/app/node_modules
    depends_on:
      - mongo
    networks:
      - express-mongo
      - react-express
    expose: 
      - 3000
  mongo:
    container_name: mongo
    restart: always
    image: mongo:4.2.0
    volumes:
      - ./data:/data/db
    networks:
      - express-mongo
    expose:
      - 27017

networks:
  react-express:
  express-mongo:
FROM python:3.6 as base
RUN apt-get update && apt-get upgrade -y
RUN pip install pipenv pip
COPY Pipfile ./
# some more common configuration...

FROM base as dev
RUN pipenv install --system --skip-lock --dev
ENV FLASK_ENV development
ENV FLASK_DEBUG 1

FROM base as prod
RUN pipenv install --system --skip-lock
ENV FLASK_ENV production
# docker-compose.yml
version: '3.4'
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile
      target: prod

Python

Príkazy

docker-compose ps # Aktuálne služby
docker-compose logs # Logy
docker-compose run # Spustí jeden kontainer
docker-compose down # Zmaže kontajnery (odstrni aj restart: always)
docker-compose stop # Stopne
docker-compose up # Spustenie všetkých kontajnerov -d naštartuje na pozadí
docker-compose up -d --scale worker=5

docker-compose run -it app db:migrate

Kedy používať docker-compose

  • Lokálny vývoj
  • Deployment na menšiu Infra
  • Menšie prostredia - test, qa, prod
  • Swarm

Tips & tricks

  • docker-compose -p project-qa
docker-compose -p project-qa -f docker-compose.yml -f .compose/qa.yml
  • Env súbory
services:
  some-service:
    env_file:
      - a.env
      - b.env
  • Verzujte *.yml

Docker 2

By VeeeneX

Docker 2

Lokálny docker development cez orchestrátor docker-compose.

  • 7