# Docker

# Multi-stage сборка

Используйте multi-stage сборку: первый образ помогает собрать артефакт, второй - содержит сам артефакт. Для конечного образа используйте alpine или stretch. Пример:

# Stage 1
FROM golang:1.12 AS builder

ARG GO_PROJECT_PATH
ARG APP_VERSION
ARG APP_TIMESTAMP

WORKDIR /build

COPY ./ ./

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo \
            -ldflags "-X \"main.appVersion=${APP_VERSION}\" -X \"main.appTimestamp=${APP_TIMESTAMP}\"" \
            -o /main .


# Stage 2
FROM alpine:latest
RUN apk --no-cache add ca-certificates

WORKDIR /app
COPY --from=builder /build/main app
CMD ["./app"]
EXPOSE 80

# Docker Sync

Сервисы запущенные в docker-compose работают очень медленно на Mac OS и Windows. Желательно сразу предсмотреть в проекте конфиги для docker-sync.

Пример конфигов для rails-приложения:

docker-sync.yml:

version: "2"
options:
  verbose: true
  compose-dev-file-path: 'docker-compose.sync.yml'
syncs:
  p2p-web-sync:
    src: '.'
    notify_terminal: true
    sync_strategy: ${SYNC_STRATEGY}
    sync_prefer: src
    sync_excludes: ['.git', 'tmp']

docker-compose.sync.yml:

version: '3.5'
services:
  rails:
    volumes:
      - p2p-web-sync:/app:nocopy
      - vendor:/vendor
volumes:
  p2p-web-sync:
    external: true

.env.sample:

SYNC_STRATEGY=native_osx

# Если docker-sync перестает видеть обновления файлов

Зачастую помогает только перезагрузка рабочией машины.

# Docker на Windows 10

(Иформация актуальна на ноябрь 2019)

# Требования

  • Windows 10 PRO и круче (если HOME, то ниже описание как обновиться)
  • Поддержка Hyper-V (Home версия не поддерживает). Проверить можно зайдя в настройки биоса (как сделано читать раздел Этапы. пункт 1)
  • Процессор 64-битный
  • 4 Гб оперативной памяти и более
  • Место на диске с операционной системой

# Этапы

  1. Включить технологию Hyper-v в биосе: ** Для процессоров Intel
  • Перезагрузите компьютер и войдите в BIOS. Используйте клавиши от F2 до F12 или Delete (точная клавиша зависит от версии).
  • Теперь вам нужно перейти в пункт «Advanced». Также он может называться «Integrated Peripherals».
  • В нём нужно перейти в «CPU Configuration».
  • Там необходимо найти пункт «Intel Virtualization Technology». Если данного пункта нет, то это значит, что ваш компьютер не поддерживает виртуализацию.
  • Если он есть, то обратите внимание на значение, которое стоит напротив него. Должно быть «Enable». Если там другое значение, то выберите данный пункт при помощи клавиш со стрелочками и нажмите Enter. Появится меню, где нужно выбрать корректное значение.
  • Теперь можно сохранить изменения и выйти из BIOS с помощью пункта «Save & Exit» или клавиши F10. ** Для процессоров AMD
  • Войдите в BIOS (описано выше)
  • Перейдите в «Advanced», а оттуда в «CPU Configuration».
  • Там обратите внимание на пункт «SVM Mode». Если напротив него стоит «Disabled», то вам нужно поставить «Enable» или «Auto». Значение меняется по аналогии с предыдущей инструкцией.
  • Сохраните изменения и выйдите из BIOS.
  1. Обновить Windows 10 Home до версии Pro. Читать ниже если у вас версия Home, пропустить пункт если другая версия.
  2. Включение Hyper-V через раздел "Параметры":
  • Через поиск (внизу слева возле кнопки Пуск) находим Панель управления.
  • Далее «Программы и компоненты» — «Включение и отключение компонентов Windows» (пункт слева) -> Hyper-V = ставим галочку
  1. Идем по ссылке https://hub.docker.com/signup для регистрации.
  2. Пройдя все этапы регистрации в системе docker hub подпадаем автоматически на https://hub.docker.com/ , где в свою очередь предлагается уставить самую актуальную версию Docker для Windows.
  3. Скачиваем Docker.
  4. После установки и при первом запуске появиться окно с предупреждением о том, что если у вас установлены виртуальные машины типа VirtualBox или VmMare, то виртуализация для них будет отключена. Подтверждаем действие.
  5. Теперь Docker установлен и для активной работы должен быть включен (значок отображается в трее возле часов)
  6. Кликаем на значек Docker в трее и ищем пункт с авторизацией. Проходим авторизацию
  7. Заходим в настройки и в пункте General в самом низу ставим галочку Expose deamon on tcp://localhost:2375 without TSL (что бы была связь между docker и WSL)

# Возможные проблемы для работы с проектом на Windows 10 Pro

Для работы требуется выполнение команд работающих конкретно под Linux и Unix системами. Виндовс сам ничего не умеет. Попытки установить GNU для виндовса могут создать трудности и трату времени, поэтому далее будет описан метод установки Linux как подсистемы Windows. Возможные проблемы при установки Linux под Windows , как подсистемы, описаны ниже в отдельном разделе.

# Установка Linux как подсистемы Windows.

  1. Идем в «Панель управления» — «Программы и компоненты» — «Включение и отключение компонентов Windows».
  2. Ищем и активируем в списке "Подсистема windows для Linux".
  3. Теперь у вас есть консоль Linux помимо PowerShell и NodeJs , если вы его конечно ставили для работы.
  4. В правом нижнем углу Windows 10 в поиске (значок Лупа) вводим "microsoft store". Жмем найденное приложение MS Store.
  5. В правом верхнем углу видим строку поиска. Вводим Ubuntu. Выдает варианты поиск. Выбираем просто Ubuntu приложение, без указания всякой версии Ubuntu.
  6. Возможно MS Store Попросит авторизоваться или зарегестироваться. Делаем этот пункт.
  7. Далее будет кнопка "Получить это приложение" (или что-то в этом духе) на странице приложения Ubuntu.
  8. Далее кнопка поменяет свой текст на "Установать". Устанавливаем.
  9. После установки. Жмем кнопку "Запустить".
  10. Должна появиться консоль в которой вас попросят указать UserName. Пишем строчными буквами имя пользователя.
  11. Попросят указать и пароль. Ввод пароля кажется не активным, но это не так! Пароль вводим и жмем Enter на клавиатуре и ожидаем окончания установки Linux под Windows 10.

Теперь есть возможность выполнять команды Linux под Windows. Как этим пользоваться: На папке с проектом наводим курсор мыши, зажимаем shift и кликаем правой клавишей мыши. В выпадающем меню выбираем "Откройте здесь оболочку Linux". Выполняем команды Linux (make например, правда нужно для make конкретно сперва выполнить sudo apt-get install make).

# Устнаовка Docker и Docker Compose

Для работы так же потребуется установить docker-compose. Его ставим так:

  1. на папке проекта зажав shift, кликаем правой клавишей мыши и выбираем "Октройте здесь оболочку Linux".
  2. вводим sudo apt install docker.io
  3. docker-compose -v => должно выдать docker-compose version 1.24.1, build a133471

Если не ставится, то читать здесь https://docs.docker.com/install/linux/docker-ce/ubuntu.

Настройте suduers, чтобы запускать команды docker без sudo https://docs.docker.com/install/linux/linux-postinstall/.

# Устранение "Некоторыми параметрами управляет ваша организация"

Ниже описана проблема связанная с блокировкой автоматического обновления Windows. (Иные проблемы возможно возникнут у вас, но здесь может не быть описания их решения)

  1. Ошибка установки Linux через MS Store, гласит: Центр обновления Windows отключен. В самом центре обновления в параметрах есть надпись "*Некоторыми параметрами управляет ваша организация".
  2. Жми и удерживай кнопку со значком Window (она обычно слева внизу возле Ctrl) и нажимай R. Откроется строка поиска. Там вбивай gpedit.msc
  3. Идем по пути Конфигурация компьютера –> Административные шаблоны –> Компоненты Windows –> Центр обновления Windows
  4. В списке ищем "Настройка автоматического обновления". Кликаем 2 раза левой клавишей мыши.
  5. Выставляем значение "Не назначено".
  6. Идем обратно в Центр обновления Windows и проверяем исчезла ли надпись "Некоторыми параметрами управляет ваша организация".
  7. Если да, то возвращаемся на старницу установки Ubuntu в MS Store и ставим Ubuntu как подсистему Windows 10.

# Обновление Windows Home на Windows PRO

!!! Сохраните важные данные с диска C, возможны сбои и потеря этих данных. Windows 10 Home Edition на Windows 10 Pro путем открытия обновления параметров: Пуск => Параметры (значок шестеренки) => Обновление и безопасность => Активации (пункт меню слева). Если у вас есть лицензионный ключ виндовс 10, то жмем "Изменить ключ продукта". Важно помнить, что речь идет о ключе для лицензии виндовс. Этот ключ может быть куплен ранее отдельно или же указан на дне ноутбука или на коробке с диском, или же когда вы полкупали електронную версию через интернет (тогда ищите в своем email). После обновленния необходимо активировать ваш ключ лицензии: в пункте Активация жмем "изменить ключ продукта" => далее => кнопка Активировать.

Если нет ключа лицензионного, то жмем "Перейти в Microsoft Store." Будет указана стоимость обновления до версии PRO. Далее заполняем данные для авторизации (или регистрации, если не были ранее зарегестрированы в сервисах Microsoft). После оплата электронного ключа, само обновление.

# Если контейнеры поднимаются с пустыми volume

Создайте файл /etc/wsl.conf с содержимым:

[automount]
root = /
options = "metadata"

Затем

sudo mkdir /c
sudo mount --bind /mnt/c /c
echo "sudo mount --bind /mnt/c /c" >> ~/.bashrc && source ~/.bashrc

Чтобы не просило пароль:

sudo visudo

и добавьте в конец

username ALL=(root) NOPASSWD: /bin/mount