Docker
Установка
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
Установить последнюю версию
Настройка
Dockerfile
FROM — указывает название образа (image), который будет взят за основу.
ENV — устанавливает переменную среды
RUN — запустить команду в контейнере (все команды исполняются с полными правами в пределах контейнера)
ADD — добавить файл в контейнер
VOLUME — указать монтируемые директории (их можно монтировать на хост машину или на другие контейнеры)
EXPOSE — указать транслируемые порты (их можно транслировать на хост машину или на другие контейнеры)
CMD — запустить процесс (это и будет процесс, вокруг которого построен контейнер)
docker-compose
$ 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
xhyve - (Используется для MacOs)
virtualbox
generic
$ docker-machine create \
--driver generic \
--generic-ip-address=203.0.113.81 \
--generic-ssh-key ~/.ssh/id_rsa \
machine-name
запустить
$ docker-machine start machine-name
выполнение команд на удаленном хосте
$ docker-machine ssh machine-name cat/etc/hosts
или подключится к удаленному хосту
$ docker-machine ssh machine-name
просмотреть список доступных хостов
получить подробную информацию о хосте
$ 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
список удаленных хостов
Сценарии
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 pull alpine
$ docker pull alpine:latest
Чистые образы
Готовые сервисы
Готовые сборки
Создание образа
$ docker build -t image-name .
Вывод списка образов
Запуск образа
$ 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-machine - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
Docker Toolbox - Комплект необходимых программ для Windows или MacOs (Внимание!!! ставит VirtualBox )
Weave Scope - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.
cAdvisor - Система мониторинга за контейнерами
Документация / Статьи
Другие системы виртуализации
| 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 |