В данном посте поговорим про то, как настроить Docker — платформу для исполнения ваших проектов в изолированных окружениях.
Docker позволяет запускать наши веб-приложения в изолированных легких контейнерах, позволяя забыть о медленных виртуальных машинах и громоздких веб-серверах.
Недавно Microsoft на своей конференции для разработчиков — Build 2019 — рассказали о будущей версии WSL 2, которая будет напрямую использовать ядро Linux. Что позволит совершать все системные вызовы, делая возможным запуск Docker в WSL.
Но пока эта технология еще не вышла в релиз, мы продолжаем пользоваться Docker Desktop. Инструкции по установки можно найти на странице продукта на Docker Hub. После установки принимаемся за настройку.
В основных настройках 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.
После того, как вы прописали настройки в конфиге, необходимо перезагрузить систему.
Вместо заключения
Спасибо, что дочитали до конца. Надеюсь, информация из данного поста была вам полезна. До встречи в следующих постах серии.