Quantcast
Viewing all articles
Browse latest Browse all 1318

Docker - [Рецепты]

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

Запуск от пользователя

$ 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 удобно использовать в окружении разработчика, когда требуется, например, производить некоторые действия при изменении исходников.

С docker-compose все просто, но есть нюансы. Использовать one shot контейнеры возможно только, если docker-compose up выполняется с опцией “-d”, в противном случае по завершении работы такого контейнера, 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

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

Чистые образы

Готовые сервисы

Готовые сборки

Создание образа

$ 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 - Система мониторинга за контейнерами

Документация / Статьи

Другие системы виртуализации


Viewing all articles
Browse latest Browse all 1318