Skip to content

Среда разработки на Windows: Docker

В данном посте поговорим про то, как настроить Docker — платформу для исполнения ваших проектов в изолированных окружениях.

Docker позволяет запускать наши веб-приложения в изолированных легких контейнерах, позволяя забыть о медленных виртуальных машинах и громоздких веб-серверах.

Недавно Microsoft на своей конференции для разработчиков — Build 2019 — рассказали о будущей версии WSL 2, которая будет напрямую использовать ядро Linux. Что позволит совершать все системные вызовы, делая возможным запуск Docker в WSL.

Но пока эта технология еще не вышла в релиз, мы продолжаем пользоваться Docker Desktop. Инструкции по установки можно найти на странице продукта на Docker Hub. После установки принимаемся за настройку.

В основных настройках Docker Desktop необходимо открыть доступ к демону Docker без TLS:

В основных настройках Docker Desktop необходимо открыть доступ к демону Docker без TLS

В подсказке к настройке нас предупреждают о возможных опасностях при использовании не зашифрованного соединения. Но в нашем случае это безопасно, так как мы не собираемся открывать доступ к нашей машине в публичной сети.

Это позволит нам подключаться к демону Docker из WSL. Трафик даже не покидает нашу среду разработки, поскольку демон связан только с localhost, поэтому даже другие машины в локальной сети не смогут подключиться. Другими словами, это достаточно безопасно для передачи данных в виде простого текста.

Установка Docker в WSL

Не смотря на то, что мы не можем запустить Docker внутри WSL, нам все еще требуется установить его, чтобы иметь доступ к cli приложениям.

Далее следует инструкция по установке Docker для Ubuntu 18.04. Вы можете просто копировать команды ниже и вставлять их в терминал. Если вы не используете Ubuntu, то следуйте гиду по установке для вашего дистрибутива из официальной документации.

# Update the apt package list.
sudo apt-get update -y

# Install Docker's package dependencies.
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

# Download and add Docker's official public PGP key.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Verify the fingerprint.
sudo apt-key fingerprint 0EBFCD88

# Add the `stable` channel's Docker upstream repository.
#
# If you want to live on the edge, you can change "stable" below to "test" or
# "nightly". I highly recommend sticking with stable!
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

# Update the apt package list (for the new apt repo).
sudo apt-get update -y

# Install the latest version of Docker CE.
sudo apt-get install -y docker-ce

# Allow your user to access the Docker CLI without needing root access.
sudo usermod -aG docker $USER

После выполнения этих команд вы должны закрыть терминал и открыть заново, чтобы выполнять Docker без sudo.

Установка Docker Compose в WSL

Следующим шагом установим Docker Compose через PIP.

# Install Python and PIP.
sudo apt-get install -y python python-pip

# Install Docker Compose into your user's home directory.
pip install --user docker-compose

Примечание. Вы можете прочитать на блоге Ника Джанетакис, почему установка через PIP работает быстрее, чем пред-скомпилированный бинарник с GitHub.

Не помешает удостовериться, что установленные инструменты доступны в $PATH. PIP устанавливает исполняемые файлы в ~/.local/bin, в зависимости от дистрибутива эта директория может присутствовать в $PATH или нет.

Проверить это можно, выполнив команду echo $PATH | grep ~/.local/bin в терминале. Если она возвращает пустой ответ, то следует добавить строку export PATH="$PATH:$HOME/.local/bin" в конфиг вашей оболочки (.zshrc).

Подключаемся к Docker Desktop из WSL

Для того, чтобы Docker подключался и работал с удаленным демоном по сети, необходимо указать переменную окружения $DOCKER_HOST. Помните, мы в настройках открыли доступ к демону Docker Desktop по tcp на порту 2375? Теперь надо указать параметры подключения в WSL в конфиге облочки. Это можно сделать одной строкой в терминале:

echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.zshrc && source ~/.zshrc

Первая команда добавляет строчку с указанием переменной окружения в ваш конфиг .zshrc (замените, если используете другую оболочку). Затем командой source загружаем конфигурацию оболочки, так что нам не требуется переоткрывать терминал.

Проверяем что все работает

Выполните команду docker info, чтобы получить информацию о Docker демоне, и команду docker-compose --version, чтобы проверить версию установленной команды Docker Compose.

Монтирование локальных директорий

Последнее, что нам осталось сделать для настройки работы Docker в WSL, это правильное монтирование локальных директорий в контейнер.

Дело в том, что Docker Desktop на Windows ожидает полный путь до директории для монтирования в формате /d/dev/myapp. Но, по-умолчанию, WSL монтирует ваши локальные диски в поддиректории /mnt.

Начиная со сборки Windows 10 1803 у нас есть возможность указать в настройках WSL корневую директорию, в которую будут смонтированы локальные диски Windows. Это позволит нам избавится от лишнего уровня /mnt для правильной работы монтирования локальных директорий в Docker контейнер.

Примечание. Если у вас более старая сборка Windows 10, вы можете посмотреть пост из блога Ника Джанетакис, где он рассматривает настройку Docker в WSL для различных сборок.

Открываем в текстовом редакторе конфиг WSL:

sudo nano /etc/wsl.conf

И добавляем в него следующие настройки:

[automount]
root = /
options = "metadata"

Настройка automount.root указывает директорию монтирования локальных дисков. Теперь они будут доступны по /c и /d, вместо /mnt/c и /mnt/d.

Настройка automount.options не обязательна, но позволяет избежать проблем с правами на файлы в локальных дисках. Указав значение metadata, на локальные диски будут установлены права 777.

После того, как вы прописали настройки в конфиге, необходимо перезагрузить систему.

Вместо заключения

Спасибо, что дочитали до конца. Надеюсь, информация из данного поста была вам полезна. До встречи в следующих постах серии.

Данная запись является частью серии "Среда разработки на Windows".

Среда разработки на Windows: PHP и Node.js

Среда разработки на Windows: алиасы из WSL в Windows