Difference between revisions of "Docker (Русский)"
(Translated subchapter images location) |
(Synchronization Docker) |
||
Line 85: | Line 85: | ||
}} | }} | ||
+ | === Proxies === | ||
==== Конфигурация Proxy ==== | ==== Конфигурация Proxy ==== | ||
Line 142: | Line 143: | ||
ExecStart= | ExecStart= | ||
ExecStart=/usr/bin/dockerd --data-root=''/path/to/new/location/docker'' -H fd://}} | ExecStart=/usr/bin/dockerd --data-root=''/path/to/new/location/docker'' -H fd://}} | ||
+ | |||
+ | === Insecure registries === | ||
+ | |||
+ | If you decide to use a self signed certificate for your private registry, Docker will refuse to use it until you declare that you trust it. | ||
+ | Add a [[Drop-in snippet]] for the {{ic|docker.service}}, adding the {{ic|--insecure-registry}} parameter to the {{ic|dockerd}}: | ||
+ | {{hc|/etc/systemd/system/docker.service.d/override.conf|2= | ||
+ | [Service] | ||
+ | ExecStart= | ||
+ | ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry my.registry.name:5000 | ||
+ | }} | ||
== Docker 0.9.0 — 1.2.x и LXC == | == Docker 0.9.0 — 1.2.x и LXC == |
Revision as of 12:18, 20 January 2019
Docker — это утилита для упаковки, загрузки и запуска любых приложений через легковесный контейнер.
Contents
Установка
Установите docker, доступный в официальных репозиториях. Для i686 установите docker-gitAUR из AUR. Затем включите и запустите службу docker.service
и проверьте ее работу:
# docker info
Обратите внимание, что запуск службы Docker может завершиться сбоем, если у вас есть активное VPN-соединение из-за конфликтов IP между VPN и сетевым мостом и оверлейной сетью Docker. Если это так, попробуйте отключить VPN перед запуском службы Docker. Вы можете переподключить VPN сразу после этого. Вы также можете попытаться разрешить конфликт сетей.
Если вы хотите иметь возможность запускать docker как обычный пользователь, добавьте его в docker
user group и перелогиньтесь:
# gpasswd -a user docker
Настройка
Storage driver
Docker storage driver (или graph driver) оказывает огромное влияние на производительность. Его задача - эффективно хранить слои изображений контейнеров, то есть, когда несколько изображений совместно используют слой, только один слой использует дисковое пространство. Совместимая опция `devicemapper` предлагает неоптимальную производительность, которая просто ужасна на вращающихся дисках. Кроме того, `devicemapper` не рекомендуется в производстве.
Поскольку Arch linux поставляется с новым ядром Linux, нет смысла использовать опцию совместимости. Хороший, современный выбор - overlay2
.
Чтобы увидеть текущий драйвер хранилища, запустите # docker info | head
, современная установка Docker уже должна использовать overlay2
по умолчанию.
Чтобы установить свой собственный драйвер хранилища, отредактируйте /etc/docker/daemon.json
(создайте его, если он не существует):
/etc/docker/daemon.json
{ "storage-driver": "overlay2" }
После этого restart докер.
Дополнительную информацию о вариантах можно найти в руководстве пользователя.
Для получения дополнительной информации о параметрах в daemon.json
см. dockerd документацию.
Remote API
Чтобы открыть Remote API для порта 4243
, используйте:
# /usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
-H tcp://0.0.0.0:4243
часть для открытия Remote API.
-H unix:///var/run/docker.sock
часть для доступа к хост-машине через терминал.
Remote API с systemd
Чтобы запустить удаленный API с помощью docker демона, создайте Drop-in snippet со следующим содержимым:
/etc/systemd/system/docker.service.d/override.conf
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
Конфигурация сокета демона
Демон docker по умолчанию прослушивает Сокет домена Unix. Чтобы прослушивать определённый порт, создайте Drop-in snippet со следующим содержимым:
/etc/systemd/system/docker.socket.d/socket.conf
[Socket] ListenStream=0.0.0.0:2375
Proxies
Конфигурация Proxy
Создайте Drop-in snippet со следующим содержанием:
/etc/systemd/system/docker.service.d/proxy.conf
[Service] Environment="HTTP_PROXY=192.168.1.1:8080" Environment="HTTPS_PROXY=192.168.1.1:8080"
Убедитесь, что конфигурация была загружена:
# systemctl show docker --property Environment
Environment=HTTP_PROXY=192.168.1.1:8080 HTTPS_PROXY=192.168.1.1:8080
Конфигурация контейнера
Настройки в файле docker.service
не будут применены к контейнерам. Чтобы достичь этого, вы должны установить ENV
переменные в Dockerfile
так:
FROM base/archlinux ENV http_proxy="http://192.168.1.1:3128" ENV https_proxy="https://192.168.1.1:3128"
Docker предоставляет подробную информацию о конфигурации через ENV
в Dockerfile.
Конфигурация DNS
По умолчанию docker создаёт resolv.conf
в контейнере с /etc/resolv.conf
на хост-машине, отфильтровывая локальные адреса (например, 127.0.0.1
). Если это приводит к пустому файлу, тогда используются Google DNS серверы. Если вы используете службу типа dnsmasq для предоставления разрешения имен, вам может потребоваться добавить запись в /etc/resolv.conf
для сетевого интерфейса докера, чтобы она не отфильтровывалась.
Запуск Docker с сетью, заданной вручную, в systemd-networkd
Если вы вручную конфигурируете свою сеть, используя systemd-networkd версии 220 или выше, контейнеры, которые вы запускаете с помощью Docker, могут не иметь доступа к вашей сети.
Начиная с версии 220, параметр переадресации для данной сети (net.ipv4.conf.<Interface>.forwarding
) по умолчанию равен off
. Этот параметр запрещает переадресацию IP. Он также конфликтует с Docker, который включает параметр net.ipv4.conf.all.forwarding
внутри контейнера.
Обходной путь - отредактировать файл <interface>.network
в /etc/systemd/network/
, добавив IPForward=kernel
на хосте Docker:
/etc/systemd/network/<interface>.network
[Network] ... IPForward=kernel ...
Эта конфигурация разрешает переадресацию IP из контейнера, как и ожидалось.
Расположение образов
По умолчанию Docker образы расположены в /var/lib/docker
. Они могут быть перемещены в другие разделы.
Во-первых, остановите docker.service
.
Если вы запустили Docker образы, вам необходимо убедиться, что они полностью размонтированы. После этого вы можете переместить изображения из /var/lib/docker
в целевой путь.
Затем добавьте Drop-in snippet для docker.service
, добавив параметр --data-root
в ExecStart
:
/etc/systemd/system/docker.service.d/docker-storage.conf
[Service] ExecStart= ExecStart=/usr/bin/dockerd --data-root=/path/to/new/location/docker -H fd://
Insecure registries
If you decide to use a self signed certificate for your private registry, Docker will refuse to use it until you declare that you trust it.
Add a Drop-in snippet for the docker.service
, adding the --insecure-registry
parameter to the dockerd
:
/etc/systemd/system/docker.service.d/override.conf
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry my.registry.name:5000
Docker 0.9.0 — 1.2.x и LXC
Начиная с версии 0.9.0, Docker предоставляет новый способ запуска контейнеров без необходимости в LXC, называемый libcontainer.
LXC может быть удален в ближайшем будущем, однако таким образом вы не сможете использовать lxc-attach
с контейнерами, управляемыми Docker 0.9.0+ по умолчанию (запрос 5797). Для этого потребуется запускать службу Docker с параметром -e lxc
.
Вы можете создать файл с именем lxc.conf
в /etc/systemd/system/docker.service.d/
со следующим содержимым:
[Service] ExecStart= ExecStart=/usr/bin/docker -d -e lxc
Skype
Смотрите Skype#Docker[broken link: invalid section].
Сборка образа i686
Для архитектуры i686, мы не можем использовать образ x86_64, полученный с помощью следующей команды:
# docker pull base/archlinux
Образ ArchLinux
Вместо этого, посетите реестр base/archlinux и перейдите по ссылке mkimage-arch.sh
для скачивания mkimage-arch.sh
и mkimage-arch-pacman.conf
. Затем сделайте скрипт исполняемым:
$ chmod +x mkimage-arch.sh
и выполните следущее:
# LC_ALL=C ./mkimage-arch.sh # LC_ALL=C потому что скрипт парсит вывод консоли
Скрипт проверит наличие необходимых утилит. В случае их отсутствия будет предложено их установить.
$ docker run -t -i --rm archlinux /bin/bash # для запуска
Для медленных сетевых подключений и/или на слабых машинах можно увеличить тайм-аут сборки:
$ sed -i 's/timeout 60/timeout 120/' mkimage-arch.sh
Образ Debian
Собрать образ Debian можно с помощью debootstrap из AUR:
$ mkdir wheezy-chroot # debootstrap wheezy ./wheezy-chroot http://http.debian.net/debian/ $ cd wheezy-chroot # tar cpf - . | docker import - debian $ docker run -t -i --rm debian /bin/bash