Docker
Image may be NSFW.
Clik here to view.
VIRTUAL MACHINES | CONTAINERS |
Image may be NSFW. Clik here to view. ![]() | Image may be NSFW. Clik here to view. ![]() |
Virtual machines include the application, the necessary binaries and libraries, and an entire guest operating system -- all of which can amount to tens of GBs. | Containers include the application and all of its dependencies --but share the kernel with other containers, running as isolated processes in user space on the host operating system. Docker containers are not tied to any specific infrastructure: they run on any computer, on any infrastructure, and in any cloud. |
Установка
nano /etc/apt/sources.list
deb https://apt.dockerproject.org/repo debian-stretch main
$ apt autoremove --purge"lxc-docker*""docker.io*" docker-engine docker-compose $ apt install docker-engine docker-compose $ docker run hello-world $ cd ./project/ $ docker-compose up
- Запуск производится от root
- docker - клиент для управления docker-engine
- docker-engine - движок ситемы docker
- docker-compose - Если установлен компоновщик/композитор, то контейнеры следует запускать docker-compose up
Запуск от пользователя
$ sudo groupadd docker $ sudo gpasswd -a${USER} docker $ sudo service docker restart
Mac OS
$ brew install docker docker-machine docker-compose docker-machine-driver-xhyve
Подробнее: https://github.com/zchee/docker-machine-driver-xhyve
Установить последнюю версию
$ curl -L"https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)"-o/usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose
Работает с docker-compose.yml файлом
Подробнее: https://docs.docker.com/compose/install/
Пример: https://docs.docker.com/compose/gettingstarted/
Настройка
Dockerfile
- FROM — указывает название образа (image), который будет взят за основу.
- ENV — устанавливает переменную среды
- RUN — запустить команду в контейнере (все команды исполняются с полными правами в пределах контейнера)
- ADD — добавить файл в контейнер
- VOLUME — указать монтируемые директории (их можно монтировать на хост машину или на другие контейнеры)
- EXPOSE — указать транслируемые порты (их можно транслировать на хост машину или на другие контейнеры)
- CMD — запустить процесс (это и будет процесс, вокруг которого построен контейнер)
docker-compose
- docker-compose - средство сборки и настройки контейнеров
- docker-compose up - поднять контейнеры с учетом правил сборки docker-compose.yml
- -d - Для запуска сервисов в фоне (for "detached" mode)
$ docker-compose config $ docker-compose up
Отдельно стоит запомнить команду docker-compose up. Она представляет собой упрощенный вызов docker-compose build && docker-compose run
Сборочные контейнеры в связке с docker-compose удобно использовать в окружении разработчика, когда требуется, например, производить некоторые действия при изменении исходников.
Рабочий процесс
Определение Dockerfile для каждого из сервисов Определение связей между сервисами при помощи docker-compose.ymlЗапус системы при помощи docker-compose up
Документация
docker-compose-mixer
Содержание конфигурационного docker-compose-mixer.yml файла по своей сути является небольшим конфигом, который описывает как именно два или более проектов будут стартовать вместе.
$ wget https://github.com/paunin/docker-compose-mixer/blob/master/dist/dc-mixer?raw=true-O/usr/local/bin/docker-compose-mixer $ chmod +x /usr/local/bin/docker-compose-mixer
Работает с docker-compose-mixer.yml файлом
Решает проблемы:
- Конфликты имен контейнеров c обновлением всего дерева конфигурации
- Конфликты портов пробрасываемых на хост-машину
- Переопределение свойств сервиса
- Разрешение относительных путей
- Удаление лишних или дублирующихся сервисов
Подробнее: https://habrahabr.ru/post/274581/
docker-machine
В GitHub-репозитории Docker Machine можно найти три bash-сценария, которые упрощают работу команд docker и docker-machine. Они отвечают за выполнение команд и пользовательские настройки командной строки bash.
Использование
создания нового хоста
$ docker-machine create --driver virtualbox machine-name
- -d --driver задаёт драйвер (список доступных драйверов)
- generic
- xhyve - (Используется для MacOs)
- virtualbox
generic
$ docker-machine create \ --driver generic \ --generic-ip-address=203.0.113.81 \ --generic-ssh-key ~/.ssh/id_rsa \ machine-name
- где machine-name - название создаваемой машины
запустить
$ docker-machine start machine-name
выполнение команд на удаленном хосте
$ docker-machine ssh machine-name cat/etc/hosts
или подключится к удаленному хосту
$ docker-machine ssh machine-name
просмотреть список доступных хостов
$ docker-machine ls
получить подробную информацию о хосте
$ docker-machine inspect machine-name
настройки соединения хоста,
$ docker-machine config machine-name
отображает IP-адрес хоста
$ docker-machine ip machine-name
отключение
$ docker-machine stop machine-name
удаление
$ docker-machine rm machine-name
список удаленных хостов
$ docker-machine ls
Сценарии
1 Сценарий
$ wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O/etc/bash_completion.d/docker-machine-prompt.bash
Чтобы завершить установку этого файла, нужно установить пользовательское значение переменной PS1 в файле .bashrc. PS1 – это специальная переменная оболочки, которая используется для редактирования командной строки bash. Откройте файл:
nano ~/.bashrc
Этот файл содержит три строки, которые начинаются с PS1:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
В конец каждой строки нужно вставить $(__docker_machine_ps1 " [%s]"). Должно получиться следующее:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__docker_machine_ps1 " [%s]")\$ ' PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__docker_machine_ps1 " [%s]")\$ ' PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$(__docker_machine_ps1 " [%s]")$PS1"
Теперь имя активной машины будет отображаться в командной строке оболочки.
2 Сценарий
Второй сценарий называется docker-machine-wrapper.bash. Он добавляет к команде docker-machine подкоманду use, которая позволяет быстро переключаться между машинами Docker. Чтобы загрузить этот сценарий, наберите:
$ wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O/etc/bash_completion.d/docker-machine-wrapper.bash
3 Сценарий
Последний сценарий называется docker-machine.bash. Он отвечает за завершение команд docker-machine.
$ wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O/etc/bash_completion.d/docker-machine.bash
Чтобы активировать внесённые изменения, закройте и снова откройте терминал. Если вы находитесь в сессии SSH, закройте и снова откройте сессию. Теперь завершение команд docker и docker-machine включено.
Контейнер
О контейнере
$ docker info Containers: 9 Running: 6 Paused: 0 Stopped: 3 Images: 28 Server Version: 1.12.5 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 90 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: null overlay host bridge Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: seccomp Kernel Version: 3.16.0-4-amd64 Operating System: Debian GNU/Linux stretch/sid OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 7.8 GiB Name: nas.ztc ID: 6JPA:SQDY:WJRJ:F2R7:NDTL:SIYE:Z6UK:AVIH:3EZS:7GJM:UCXZ:KPDU Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ 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: 127.0.0.0/8
Статус
$ docker stats CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS c8d1eb7a8f7a 0.02%0 B /0 B 0.00%38.07 kB /649.1 kB 258 kB /0 B 0 271073504ac9 0.10%0 B /0 B 0.00%6.517 kB /648 B 0 B /4.096 kB 0 462c8942181f 0.00%0 B /0 B 0.00%7.701 kB /648 B 0 B /0 B 0 94e2422ce234 0.33%0 B /0 B 0.00%22.98 MB /558.9 kB 1.798 MB /314.8 MB 0 6a43329858d9 18.18%0 B /0 B 0.00%7.431 kB /648 B 249.9 kB /20.62 GB 0 404d5b6bf024 0.08%0 B /0 B 0.00%7.959 kB /648 B 0 B /0 B 0
Работа с контейнером
$ docker exec-it security-mysql /bin/bash $ docker exec-it security-mysql cat/etc/passwd
Список контейнеров (запущенных и нет)
$ docker ps-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c8d1eb7a8f7a teratek_web "/usr/bin/supervisord" About an hour ago Up 57 minutes 443/tcp, 0.0.0.0:80->80/tcp, 9000/tcp security-web 271073504ac9 stefobark/sphinxdocker "sh -c '/bin/sleep 5 " About an hour ago Up 57 minutes 0.0.0.0:9306->9306/tcp, 0.0.0.0:9312->9312/tcp security-sphinx 462c8942181f imkulikov/docker-grand-ambassador "/usr/bin/grand-ambas" About an hour ago Up 57 minutes security-proxy 94e2422ce234 mvertes/alpine-mongo "/root/run.sh mongod" About an hour ago Up 57 minutes 0.0.0.0:27017->27017/tcp, 0.0.0.0:28017->28017/tcp security-mongo 6a43329858d9 mysql "docker-entrypoint.sh" About an hour ago Up 57 minutes 0.0.0.0:3306->3306/tcp security-mysql 404d5b6bf024 redis:alpine "docker-entrypoint.sh" About an hour ago Up 57 minutes 6379/tcp security-redis
- -a - Позволяет увидеть не запущенные контейнеры
- -l - Выведет список недавно созданных контейнеров
- где docker-grand-ambassador прокси для 2-ух направленной связи контейнеров
Остановка контейнера
$ docker stop 7d0eb5cd3b3b
Удаление контейнера
$ docker rm 7d0eb5cd3b3b
Образы
Поиск образов
$ docker search alpine
Загрузка образа в систему
$ docker pull alpine $ docker pull alpine:latest
Чистые образы
Готовые сервисы
- https://hub.docker.com/r/mvertes/alpine-mongo/ (mvertes/alpine-mongo) 78 MB
- https://hub.docker.com/r/vinsonzou/alpine-mariadb/ (vinsonzou/alpine-mariadb) 48.7 MB
- https://hub.docker.com/r/yobasystems/alpine-mariadb/ (yobasystems/alpine-mariadb) 47.9 MB
- https://hub.docker.com/r/jaskipper/alpine-mariadb/ (jaskipper/alpine-mariadb) 8.5 MB
- https://hub.docker.com/_/php/ (php, php:7.1-alpine, php:7-alpine, php:alpine, php:5.6-alpine, 5-alpine итд)
- https://hub.docker.com/r/matriphe/alpine-php/ (matriphe/alpine-php:fpm, matriphe/alpine-php:cli, matriphe/alpine-php:fpm7) <50 MB
- https://hub.docker.com/_/redis/ (redis:alpine) ~5 MB + redis
- https://hub.docker.com/r/stefobark/sphinxdocker/ (stefobark/sphinxdocker)
- https://hub.docker.com/_/nginx/ (nginx:alpine) ~5 MB + nginx
- https://hub.docker.com/_/memcached/ - (memcached:alpine) ~5 MB + memcached
Готовые сборки
- https://hub.docker.com/r/matriphe/alpine-nginx/ (matriphe/alpine-nginx)
- https://github.com/kost/docker-alpine (kost/docker-alpine)
- https://hub.docker.com/r/leanlabs/npm-builder/ (leanlabs/npm-builder)
- https://hub.docker.com/r/imega/composer/ (imega/composer) 43 MB
- https://hub.docker.com/r/leanlabs/kanban/ (leanlabs/kanban) - Аналог Trello
Создание образа
$ docker build -t image-name .
- Где . папка, где расположен Dockerfile
- container-name - название создаваемого контейнера
Вывод списка образов
$ docker images
Запуск образа
$ docker run -d-p80:80-t image-name $ docker run -d--publish8080:80-t image-name
- 8080 - Порт хост машины
- 80 - Порт контейнера
- -i - откроет интерактивную оболочку контейнера (лучше не использова, а подключаться с помощью docker exec)
- -t - название запускаемого контейнера
Пример управления контейнером из другого контейнера
$ docker run -v/var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/bin/docker \ -ti nachine_name
Пространства
Применяется для монтирования пространств из внешних источников. К примеру virtualbox
Сетевые драйверы
Логирование
Рецепты
Проблемы и их решения
Circular import between fpm and nginx
Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) В качестве решенияпроблемы, на данный момент, можно воспользоваться прокси сервером/контейнером docker-grand-ambassador
fpm: build: ./build/fpm links: - ambassador:nginx nginx: build: ./build/nginx links: - ambassador:fpm ambassador: image: cpuguy83/docker-grand-ambassador volumes: - "/var/run/docker.sock:/var/run/docker.sock" command: "-name testapp_fpm_1 -name testapp_nginx_1"
ERROR: Couldn't connect to Docker daemon - you might need to rundocker-machine start default`
скорее всего вам потребуется сделать следующее:
$ docker-machine create --driver=xhyve dev --xhyve-experimental-nfs-share
Компоненты
- docker-compose - Компановщик контейнеров
- docker-machine - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
- Docker Toolbox - Комплект необходимых программ для Windows или MacOs (Внимание!!! ставит VirtualBox )
- Weave Scope - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.
- cAdvisor - Система мониторинга за контейнерами
Документация / Статьи
- https://habrahabr.ru/post/253877/Image may be NSFW.
Clik here to view. - https://habrahabr.ru/post/309556/Image may be NSFW.
Clik here to view.
Другие системы виртуализации
2016/12/05 03:08 | vagrant, chef, shell, puppet, salt, ansible, docker, devops, virtual | |
2017/11/09 16:38 | container, virtual | |
2017/11/09 16:34 | linux, container, containers, virtual | |
2015/10/13 12:01 | virtual | |
2015/10/13 12:01 | system, kernel, virtual | |
2015/10/13 12:01 | vagrant, chef, shell, puppet, salt, ansible, docker, virtual | |
2015/10/13 12:01 | virtualbox, virtual | |
2018/03/01 01:23 | vagrant, chef, shell, puppet, salt, ansible, docker, virtual |