Docker для фронтендера

Алексей Авдеев, Neuron.Digital

Docker для фронтендера

Алексей Авдеев, Neuron.Digital

FrontendConf Background

Требования: Docker

Эра Docker

👨‍💻 О себе

  1. 👨 Алексей Авдеев (https://github.com/avdeev)

Зачем?

Поднимаем backend

😫 Без Docker

            $ brew update
            $ brew install mysql
            ...
            $ \curl -sSL https://get.rvm.io | bash
            ...
            $ rails s
        

👍 С Docker

            $ docker-compose up api
            ...
            Listening localhost:8080
        

👍 С Docker

Автоматизируй

Устойчивость ⚖

👍 С Docker

            $ docker rm --volumes api
        
            $ docker system prune --all
        

Контролируем эксплуатацию

😫 Без Docker

👍 С Docker

Упаковано в Docker 📦

KEEP CALM
IT WORKS
ON ALL MACHINES

Пишите код для продакшна

Безопасно собирайте, делитесь и запускайте любое приложение где угодно

Установка
Docker ⏬

♻ Установка Docker через Homebrew

            $ brew cask install docker
        

Что входит в Docker Desktop

Docker — это не только для
админов

Что-то для админов

Docker как NPM,
но для Ops

Знакомые понятия

Знакомые понятия

Hello World (1)

            $ docker run ubuntu:14.04 /bin/echo 'Hello world'
             
            Hello world
        

Hello World (2)

            $ docker run hello-world
            
            Unable to find image 'hello-world:latest' locally
            latest: Pulling from library/hello-world
            ...
            Hello from Docker!
            This message shows that your installation appears...
            ...
        

Немного
рецептов

Запускаем Lighthouse

😫 Без Docker

            Установить Google Chrome for Desktop.
            Установить текущую LTS-версию Node.
            $ npm install -g lighthouse
            $ lighthouse http://frontendconf.ru
        

👍 С Docker

            $ docker run \
              --rm \
              --name lighthouse \
              -it \
              --volume ~:/home/chrome/reports \
              --cap-add=SYS_ADMIN \
              femtopixel/google-lighthouse http://frontendconf.ru
        

Нагрузка

👍 С Docker

            $ docker service scale frontend=10
             
            frontend scaled to 10
        

Решение организационных вопросов

Dockerfile

            LABEL maintainer="[email protected]"
        

docker inspect

            $ docker inspect NAME|ID
        
            "Labels": {
              "maintainer": "[email protected]"
            }
        

Выбираем
технологию

Dockerfile (1)

            FROM    node:10-alpine as builder
            WORKDIR /app
            COPY    package*.json ./
            RUN     npm ci
            COPY    vue.config.js babel.config.js ./
            COPY    src src
            RUN     npm run build
        

Dockerfile (2)

            FROM   nginx:1.13-alpine
            COPY   nginx /etc/nginx/conf.d
            COPY   --from=builder /app/dist/ /usr/share/nginx/html/
            EXPOSE 5000
        

Запускаем контейнер

            docker build --tag my-app .
            docker run -p 5000:5000 --tag my-app
        

Демо

Dockerfile для Node.js

            FROM node:10-alpine
            WORKDIR /app
            COPY package*.json ./
            RUN npm ci
            COPY . .
            EXPOSE 5000
            CMD ["node", "server.js"]
        

Dockerfile для Python

            FROM python:3-alpine
            WORKDIR /usr/src/app
            COPY requirements.txt ./
            RUN pip install --no-cache-dir -r requirements.txt
            COPY . .
            EXPOSE 5000
            CMD ["python", "./your-daemon-or-script.py"]
        

Демо

Универсальная абстракция

Компонуемость

👍 С Docker (docker-compose.yml)

            services:
              api:
                build: ./api
              front:
                build: ./front
              reverse-proxy:
                image: abiosoft/caddy
                ports:
                  - 80:80
                volumes:
                  - ./Caddyfile:/etc/Caddyfile
        

Запускаем связку контейнеров

            $ docker-compose up
        

Демо

Виртуализируй

👏 Спасибо!

я