Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| system:docker [2018/06/23 04:20] – [Образы] mirocow | system:docker [2026/01/12 20:37] (текущий) – 192.168.1.159 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | {{tag> | + | {{tag> |
| ====== Docker ====== | ====== Docker ====== | ||
| Строка 5: | Строка 5: | ||
| {{https:// | {{https:// | ||
| - | | VIRTUAL MACHINES | ||
| - | | {{https:// | ||
| - | | Virtual machines include the application, | ||
| - | ===== Установка ===== | + | ====== Установка |
| - | * https:// | + | ===== Ubuntu ===== |
| - | + | ||
| - | nano / | + | |
| - | < | + | |
| - | deb https:// | + | |
| - | </ | + | |
| <code bash> | <code bash> | ||
| - | $ apt autoremove | + | $ apt update && \ |
| - | $ apt install docker-engine | + | apt install ca-certificates curl gnupg lsb-release |
| - | $ docker run hello-world | + | mkdir -p / |
| - | $ cd ./project/ | + | curl -fsSL https:// |
| - | $ docker-compose | + | echo "deb [arch=$(dpkg |
| + | apt update && \ | ||
| + | apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y | ||
| </ | </ | ||
| - | * Запуск производится от root | + | ===== Debian ===== |
| - | * [[system: | + | |
| - | * [[system: | + | |
| - | * [[system: | + | |
| - | * [[system: | + | |
| - | + | ||
| - | === Запуск от пользователя | + | |
| <code bash> | <code bash> | ||
| - | $ sudo groupadd | + | $ apt update && \ |
| - | $ sudo gpasswd | + | apt install ca-certificates curl gnupg lsb-release -y && \ |
| - | $ sudo service | + | mkdir -p / |
| + | curl -fsSL https:// | ||
| + | echo "deb [arch=$(dpkg --print-architecture) signed-by=/ | ||
| + | apt update && \ | ||
| + | apt install | ||
| </ | </ | ||
| - | ==== Mac OS ==== | ||
| - | <code bash> | + | ====== |
| - | $ brew install docker docker-machine docker-compose docker-machine-driver-xhyve | + | |
| - | </ | + | |
| - | Подробнее: | + | |
| - | ==== Установить последнюю версию | + | |
| - | + | ||
| - | <note tip>< | + | |
| - | $ curl -L " | + | |
| - | $ chmod +x / | + | |
| - | </ | + | |
| - | Работает с docker-compose.yml файлом</ | + | |
| - | Подробнее: | + | |
| - | Пример: | + | |
| - | ===== Настройка ===== | + | |
| - | + | ||
| - | ==== Dockerfile ==== | + | |
| - | + | ||
| - | * FROM — указывает название образа (image), который будет взят за основу. | + | |
| - | * ENV — устанавливает переменную среды | + | |
| - | * RUN — запустить команду в контейнере (все команды исполняются с полными правами в пределах контейнера) | + | |
| - | * ADD — добавить файл в контейнер | + | |
| - | * VOLUME — указать монтируемые директории (их можно монтировать на хост машину или на другие контейнеры) | + | |
| - | * EXPOSE — указать транслируемые порты (их можно транслировать на хост машину или на другие контейнеры) | + | |
| - | * CMD — запустить процесс (это и будет процесс, | + | |
| - | + | ||
| - | * [[system: | + | |
| - | * [[system: | + | |
| - | ==== docker-compose ==== | + | |
| - | + | ||
| - | * docker-compose - средство сборки и настройки контейнеров | + | |
| - | * docker-compose up - поднять контейнеры с учетом правил сборки docker-compose.yml | + | |
| - | * -d - Для запуска сервисов в фоне (for " | + | |
| <code bash> | <code bash> | ||
| - | $ docker-compose config | + | $ sudo groupadd |
| - | $ docker-compose up | + | $ sudo usermod |
| + | $ newgrp | ||
| </ | </ | ||
| - | Отдельно стоит запомнить команду docker-compose up. Она представляет собой упрощенный вызов docker-compose build && docker-compose run | + | ====== Docker Swarm ====== |
| - | Сборочные контейнеры в связке с docker-compose удобно использовать в окружении разработчика, | + | Если Docker |
| - | + | ||
| - | <note tip>С docker-compose все просто, | + | |
| - | + | ||
| - | === Рабочий процесс === | + | |
| - | + | ||
| - | Определение Dockerfile для каждого из сервисов | + | |
| - | Определение связей между сервисами при помощи [[system: | + | |
| - | Запус системы при помощи docker-compose up | + | |
| - | + | ||
| - | == Документация == | + | |
| - | + | ||
| - | * https:// | + | |
| - | + | ||
| - | ==== docker-compose-mixer ==== | + | |
| - | + | ||
| - | Содержание конфигурационного docker-compose-mixer.yml файла по своей сути является небольшим конфигом, | + | |
| - | + | ||
| - | <note tip>< | + | |
| - | $ wget https:// | + | |
| - | $ chmod +x / | + | |
| - | </ | + | |
| - | Работает с docker-compose-mixer.yml файлом</ | + | |
| - | + | ||
| - | Решает проблемы: | + | |
| - | + | ||
| - | * Конфликты имен контейнеров c обновлением всего дерева конфигурации | + | |
| - | * Конфликты портов пробрасываемых на хост-машину | + | |
| - | * Переопределение свойств сервиса | + | |
| - | * Разрешение относительных путей | + | |
| - | * Удаление лишних или дублирующихся сервисов | + | |
| - | + | ||
| - | Подробнее: | + | |
| - | + | ||
| - | ==== docker-machine ==== | + | |
| - | + | ||
| - | В GitHub-репозитории Docker | + | |
| - | + | ||
| - | === Использование === | + | |
| - | + | ||
| - | == создания нового хоста == | + | |
| - | + | ||
| - | <code bash>$ docker-machine create --driver virtualbox machine-name</ | + | |
| - | + | ||
| - | * -d --driver задаёт драйвер ([[https:// | + | |
| - | * generic | + | |
| - | * [[https:// | + | |
| - | * virtualbox | + | |
| - | * [[https:// | + | |
| - | + | ||
| - | **generic** | + | |
| <code bash> | <code bash> | ||
| - | $ docker-machine create \ | + | $ docker |
| - | --driver generic \ | + | # В вответ docker swarm join --token SWMTKN-1-54k2k418tw2j0juwm3inq6crp4ow6xogswihcc5azg7oq5qo7e-a3rfeyfwo7d93heq0y5vhyzod 172.31.245.104:2377 |
| - | | + | # Эту команду необходимо будет выполнить на каждой присоединяймой ноде |
| - | | + | |
| - | machine-name | + | |
| </ | </ | ||
| - | * где machine-name - название | + | Если необходимо присоеденить к уже существующему |
| - | + | ||
| - | == запустить == | + | |
| - | + | ||
| - | <code bash>$ docker-machine start machine-name</ | + | |
| - | + | ||
| - | == выполнение команд на удаленном хосте == | + | |
| - | + | ||
| - | <code bash>$ docker-machine ssh machine-name cat / | + | |
| - | + | ||
| - | или подключится к удаленному хосту | + | |
| - | + | ||
| - | <code bash>$ docker-machine ssh machine-name</ | + | |
| - | + | ||
| - | == просмотреть список доступных хостов == | + | |
| - | + | ||
| - | <code bash>$ docker-machine ls</ | + | |
| - | + | ||
| - | == получить подробную информацию о хосте == | + | |
| - | + | ||
| - | <code bash>$ docker-machine inspect machine-name</ | + | |
| - | + | ||
| - | == настройки соединения хоста, == | + | |
| - | + | ||
| - | <code bash>$ docker-machine config machine-name</ | + | |
| - | + | ||
| - | == отображает IP-адрес хоста == | + | |
| - | + | ||
| - | <code bash>$ docker-machine ip machine-name</ | + | |
| - | + | ||
| - | == отключение == | + | |
| - | + | ||
| - | <code bash>$ docker-machine stop machine-name</ | + | |
| - | + | ||
| - | == удаление == | + | |
| - | + | ||
| - | <code bash>$ docker-machine rm machine-name</ | + | |
| - | + | ||
| - | == список удаленных хостов == | + | |
| - | + | ||
| - | <code bash>$ docker-machine ls</ | + | |
| - | + | ||
| - | === Сценарии === | + | |
| - | + | ||
| - | == 1 Сценарий == | + | |
| - | + | ||
| - | <code bash>$ wget https:// | + | |
| - | + | ||
| - | Чтобы завершить | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | Этот файл содержит три строки, | + | |
| - | + | ||
| - | < | + | |
| - | PS1=' | + | |
| - | PS1=" | + | |
| - | + | ||
| - | В конец каждой строки нужно вставить < | + | |
| - | + | ||
| - | < | + | |
| - | PS1=' | + | |
| - | PS1=" | + | |
| - | + | ||
| - | Теперь имя активной машины будет отображаться в командной строке оболочки. | + | |
| - | + | ||
| - | == 2 Сценарий == | + | |
| - | + | ||
| - | Второй сценарий называется docker-machine-wrapper.bash. Он добавляет к команде docker-machine подкоманду use, которая позволяет быстро переключаться между машинами Docker. Чтобы загрузить этот сценарий, | + | |
| - | + | ||
| - | <code bash>$ wget https:// | + | |
| - | + | ||
| - | == 3 Сценарий == | + | |
| - | + | ||
| - | Последний сценарий называется docker-machine.bash. Он отвечает за завершение команд docker-machine. | + | |
| - | + | ||
| - | <code bash>$ wget https:// | + | |
| - | + | ||
| - | Чтобы активировать внесённые изменения, | + | |
| - | ===== Контейнер ===== | + | |
| - | + | ||
| - | ==== О контейнере ==== | + | |
| <code bash> | <code bash> | ||
| - | $ docker | + | $ docker |
| - | + | # В вответ | |
| - | Containers: 9 | + | # Эту команду необходимо будет выполнить на каждой присоединяймой ноде |
| - | | + | |
| - | | + | |
| - | | + | |
| - | Images: 28 | + | |
| - | Server Version: 1.12.5 | + | |
| - | Storage Driver: aufs | + | |
| - | Root Dir: /var/lib/docker/aufs | + | |
| - | | + | |
| - | Dirs: 90 | + | |
| - | | + | |
| - | Logging Driver: json-file | + | |
| - | Cgroup Driver: cgroupfs | + | |
| - | Plugins: | + | |
| - | | + | |
| - | | + | |
| - | Swarm: inactive | + | |
| - | Runtimes: runc | + | |
| - | Default Runtime: runc | + | |
| - | Security Options: seccomp | + | |
| - | Kernel Version: 3.16.0-4-amd64 | + | |
| - | Operating System: Debian GNU/Linux stretch/ | + | |
| - | OSType: linux | + | |
| - | Architecture: | + | |
| - | CPUs: 2 | + | |
| - | Total Memory: 7.8 GiB | + | |
| - | Name: nas.ztc | + | |
| - | ID: 6JPA: | + | |
| - | Docker Root Dir: / | + | |
| - | Debug Mode (client): false | + | |
| - | Debug Mode (server): false | + | |
| - | Registry: https:// | + | |
| - | WARNING: No memory limit support | + | |
| - | WARNING: No swap limit support | + | |
| - | WARNING: No kernel memory limit support | + | |
| - | WARNING: No oom kill disable support | + | |
| - | WARNING: No cpu cfs quota support | + | |
| - | WARNING: No cpu cfs period support | + | |
| - | Insecure Registries: | + | |
| - | | + | |
| </ | </ | ||
| - | ==== Статус ==== | + | ====== Настройки ====== |
| - | <code bash> | + | === Log drivers: управление логами === |
| - | $ docker stats | + | |
| - | CONTAINER | + | nano /etc/docker/daemon.json |
| - | c8d1eb7a8f7a | + | <code json> |
| - | 271073504ac9 | + | { |
| - | 462c8942181f | + | " |
| - | 94e2422ce234 | + | " |
| - | 6a43329858d9 | + | " |
| - | 404d5b6bf024 | + | " |
| + | } | ||
| + | } | ||
| </ | </ | ||
| - | ==== Работа с контейнером | + | ====== |
| - | + | ||
| - | <code bash> | + | |
| - | $ docker exec -it security-mysql /bin/bash | + | |
| - | $ docker exec -it security-mysql cat / | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Список контейнеров (запущенных и нет) ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | $ docker ps -a | + | |
| - | CONTAINER ID IMAGE | + | |
| - | c8d1eb7a8f7a | + | |
| - | 271073504ac9 | + | |
| - | 462c8942181f | + | |
| - | 94e2422ce234 | + | |
| - | 6a43329858d9 | + | |
| - | 404d5b6bf024 | + | |
| - | </ | + | |
| - | + | ||
| - | * -a - Позволяет увидеть не запущенные контейнеры | + | |
| - | * -l - Выведет список недавно созданных контейнеров | + | |
| - | * где docker-grand-ambassador прокси для 2-ух направленной связи контейнеров | + | |
| - | * curl -L http:// | + | |
| - | + | ||
| - | ==== Остановка контейнера ==== | + | |
| - | + | ||
| - | < | + | |
| - | $ docker stop 7d0eb5cd3b3b | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Удаление контейнера ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | $ docker rm 7d0eb5cd3b3b | + | |
| - | </ | + | |
| - | + | ||
| - | ===== Образы ===== | + | |
| - | + | ||
| - | + | ||
| - | <note tip> | + | |
| - | **screen ~/ | + | |
| - | + | ||
| - | ==== Расположение ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | $ -la / | + | |
| - | total 200 | + | |
| - | drwx------ | + | |
| - | drwx--x--x | + | |
| - | drwx------ | + | |
| - | </ | + | |
| - | ==== Поиск образов ==== | + | |
| - | + | ||
| - | <code bash>$ docker search alpine</ | + | |
| - | + | ||
| - | ==== Загрузка образа в систему ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | $ docker pull alpine | + | |
| - | $ docker pull alpine: | + | |
| - | </ | + | |
| - | ==== Чистые образы ==== | + | |
| - | + | ||
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | + | ||
| - | ==== Готовые сервисы ==== | + | |
| - | + | ||
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | + | ||
| - | ==== Готовые сборки ==== | + | |
| - | + | ||
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | ==== Создание образа ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | $ docker build -t image-name . | + | |
| - | </ | + | |
| - | + | ||
| - | * Где . папка, где расположен Dockerfile | + | |
| - | * container-name - название создаваемого контейнера | + | |
| - | + | ||
| - | ==== Вывод списка образов ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | $ docker images | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Запуск образа ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | $ docker run -d -p 80:80 -t image-name | + | |
| - | $ docker run -d --publish 8080:80 -t image-name | + | |
| - | </ | + | |
| - | + | ||
| - | * 8080 - Порт хост машины | + | |
| - | * 80 - Порт контейнера | + | |
| - | * -i - откроет интерактивную оболочку контейнера (лучше не использова, | + | |
| - | * -t - название запускаемого контейнера | + | |
| - | + | ||
| - | + | ||
| - | ===== Пример управления контейнером из другого контейнера ===== | + | |
| - | + | ||
| - | <code bash>$ docker run -v / | + | |
| - | -v $(which docker):/ | + | |
| - | -ti nachine_name</ | + | |
| - | + | ||
| - | ===== Пространства ===== | + | |
| - | + | ||
| - | Применяется для монтирования пространств из внешних источников. К примеру virtualbox | + | |
| - | + | ||
| - | * https:// | + | |
| - | + | ||
| - | ===== Сетевые драйверы ===== | + | |
| - | + | ||
| - | * https:// | + | |
| - | + | ||
| - | ===== Логирование ===== | + | |
| - | + | ||
| - | * https:// | + | |
| - | + | ||
| - | ====== Рецепты ====== | + | |
| - | + | ||
| - | * [[system: | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | + | ||
| - | ====== Проблемы и их решения ====== | + | |
| - | + | ||
| - | ===== Circular import between fpm and nginx ===== | + | |
| - | + | ||
| - | Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) | + | |
| - | В качестве решенияпроблемы, | + | |
| - | + | ||
| - | <code yaml> | + | |
| - | fpm: | + | |
| - | build: ./ | + | |
| - | links: | + | |
| - | - ambassador: | + | |
| - | nginx: | + | |
| - | build: ./ | + | |
| - | links: | + | |
| - | - ambassador: | + | |
| - | ambassador: | + | |
| - | image: cpuguy83/ | + | |
| - | volumes: | + | |
| - | - "/ | + | |
| - | command: "-name testapp_fpm_1 -name testapp_nginx_1" | + | |
| - | </ | + | |
| - | + | ||
| - | ===== ERROR: Couldn' | + | |
| - | + | ||
| - | скорее всего вам потребуется сделать следующее: | + | |
| - | <code bash>$ docker-machine create --driver=xhyve dev --xhyve-experimental-nfs-share</ | + | |
| - | ====== Компоненты ====== | + | |
| - | + | ||
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | + | ||
| - | ====== Документация / Статьи ====== | + | |
| - | + | ||
| - | * [[https:// | + | |
| - | * [[http:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * http:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * http:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | * http:// | + | |
| - | * https:// | + | |
| - | * http:// | + | |
| - | * https:// | + | |
| - | * https:// | + | |
| - | ====== Другие системы виртуализации ====== | + | * [[docker-socket|Docker Socket]] |
| - | {{topic> | + | ====== Мониторинг ====== |
| + | * [[software: | ||
| + | * [[software: | ||
| + | * [[software: | ||