Summary: Настраиваем удаленное управление docker

Docker Remote

ВНИМАНИЕ! Статья актуальна на 2018 год.

Управление докером на удаленной машине

Источники: https://docs.docker.com/engine/admin/#configure-the-docker-daemon https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option https://docs.docker.com/engine/security/https/#secure-by-default https://github.com/moby/moby/issues/25471

Операции на удаленной машине

Создаем новую директорию, например certs, и переходим в нее

mkdir ~/certs
cd ~/certs

Выполняем инструкцию https://docs.docker.com/engine/security/https/

В результате должно получиться нечто похожее на это:

~/certs$ ll
total 40
drwxr-xr-x  2 misuz misuz 4096 авг 14 20:14 ./
drwxr-xr-x 10 misuz misuz 4096 авг 14 20:46 ../
-r--------  1 misuz misuz 3326 авг 14 20:01 ca-key.pem
-r--r--r--  1 misuz misuz 1972 авг 14 20:04 ca.pem
-rw-r--r--  1 misuz misuz   17 авг 14 20:13 ca.srl
-r--r--r--  1 misuz misuz 1797 авг 14 20:13 cert.pem
-rw-r--r--  1 misuz misuz   30 авг 14 20:13 extfile.cnf
-r--------  1 misuz misuz 3243 авг 14 20:12 key.pem
-r--r--r--  1 misuz misuz 1818 авг 14 20:11 server-cert.pem
-r--------  1 misuz misuz 3247 авг 14 20:09 server-key.pem
misuz@misuz:~/certs$ 

Создаем директорию /var/docker и копируем туда некоторые файлы

sudo mkdir /var/docker

sudo cp ca.pem server-cert.pem server-key.pem /var/docker
ls /var/docker
ca.pem  server-cert.pem  server-key.pem

Останавливаем докер-демон

sudo service docker stop

Изменяем конфигурацию по-умолчанию докер-демона

sudo mkdir /etc/systemd/system/docker.service.d/
sudo vim /etc/systemd/system/docker.service.d/override.conf
# /etc/systemd/system/docker.service.d/hosts.conf
# /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

Перезапускаем systemd-демон

sudo systemctl daemon-reload
sudo systemctl restart docker.service

Создаем (корректируем) файл конфигурации докер-демона

sudo vim /etc/docker/daemon.json
{
  "debug": true,
  "tls": true,
  "tlscacert": "/var/docker/ca.pem",
  "tlscert": "/var/docker/server-cert.pem",
  "tlskey": "/var/docker/server-key.pem",
  "hosts": ["fd://", "tcp://0.0.0.0:2376"]
}

Запускаем докер-демон

sudo service docker start
sudo service docker status
# ---
sudo systemctl daemon-reload
sudo systemctl restart docker.service

systemctl cat docker | grep Exec
# --- журналы
systemctl status docker.service
journalctl -xe

Операции на локальной машине

Создаем директорию .docker в домашней директории пользователя

Копируем файлы из директории certs в директорию ~/.docker ca.pemсert.pemkey.pem

Получаем доступ к удаленному докеру

DOCKER_HOST=tcp://misuz.ru:2376 DOCKER_TLS_VERIFY=1 docker ps
DOCKER_HOST=tcp://misuz.ru:2376 DOCKER_TLS_VERIFY=1 docker-compose --file docker-compose.yml pcs ps

Операции на очередной удаленной машине

Если есть необходимость управлять докерами на разных удаленных машинах, то на второй и последующей машинах требуется выполнить ограниченый перечень операций

Создаем новую директорию, например certs, и переходим в нее

mkdir ~/certs
cd ~/certs

Копируем в эту директорию файлы ca-key.pem и ca.pem

Выполняем инструкцию https://docs.docker.com/engine/security/https/ в части создания файлов server-key.pem и server-cert.pem. Клиентские файлы создавать не надо.

Далее выполняем все операции, начиная с позиции "Создаем директорию /var/docker и копируем туда некоторые файлы" раздела "Операции на удаленной машине".

Обобщенный алгоритм

1) ca-key.pem 2) ca-key.pem -> ca.pem

--- серверная часть --- 3) server-key.pem 4) server-key.pem -> server.csr 5) server.csr + ca.pem + ca-key.pem -> server-cert.pem

--- клиентская часть --- 6) key.pem 7) key.pem -> client.csr 8) client.csr + ca.pem + ca-key.pem -> cert.pem

Written with StackEdit.