Docker
VIRTUAL MACHINES | CONTAINERS |
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
Использование
Работа с образами / Images
Для справки
$ docker image
Вывести список образов
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yii2_php latest 6a950c96e01d 23 hours ago 159MB
Удалить образ
$ docker image rm 6a950c96e01d
Анализировать образ
$ docker image inspect 6a950c96e01d [{"Id": "sha256:6a950c96e01de12b463f1fce232b48f530c487c2d7af5fef2e59c693c21c8af1", "RepoTags": ["yii2_php:latest"], "RepoDigests": [], "Parent": "sha256:a0883c ... }
Избавляемся от неиспользуемых образов
$ docker image prune
Список образов
Алиас к
$ docker images
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE yii2_php latest 6a950c96e01d 23 hours ago 159MB yii2_nginx latest 878bb2a77dfa 27 hours ago 23.2MB yii2_kibana latest e3f6594b57e1 27 hours ago 221MB yii2_elasticsearch latest 117a536c2655 27 hours ago 129MB yii2_redis latest 546a364104fd 27 hours ago 31.1MB yii2_mariadb latest 03ddc39bcf15 27 hours ago 204MB
Работа с контейнерами / Containers
Для справки
$ docker $ docker exec--help
Запуск контейнера
Необходим Dockerfile
$ docker up
Список запущеных контейнеров
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a50423920e0d yii2_php "/usr/sbin/php-fpm -F"23 hours ago Up 23 hours 9001/tcp, 0.0.0.0:9001->9000/tcp yii2_php_1 fa24abd60049 yii2_nginx "sh -c 'envsubst \"`e…"24 hours ago Up 24 hours 0.0.0.0:80->80/tcp yii2_n
Подсоеденение к контейнеру
Проверить предварительно на наличие запрашиваемой оболочки. В alpine по умолчанию нет bash
$ sudo docker exec-i-t a50423920e0d /bin/bash $ sudo docker exec-i-t a50423920e0d /bin/sh
Запустить контейнер
$ docker start a50423920e0d
Остановить контейнер
$ docker stop a50423920e0d
Пребить контейнер
$ docker kill a50423920e0d
Использование docker-composer.yml
Для справки
$ docker-compose
$ docker-compose exec
Подсоеденение к контейнеру
$ docker-compose exec php /bin/sh
Где php название используемого сервиса / services
Запуск с использованием локального конфига
$ docker-compose -f docker-compose.yml -f docker-compose-local.yaml up -d
Особенности работы с MAC OS
Все контейнеры в MAC OSнаходятся в виртуальной машине qcow2 и находятся по адресу /Users/mirocow/Library/Containers/com.docker.docker/Docker.qcow2
- где mirocow имя вашего пользователя
Для MacOs устанавливается в отдельную виртуальную машину. К которой можно законектится с помощью tty.
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Автоматический запуск контейнеров в Debian
System V
nano /etc/init.d/portainer
#!/bin/sh ### BEGIN INIT INFO# Provides: portainer# Required-Start: $docker# Required-Stop: $docker# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Portainer Services### END INIT INFO set-e PROJECT_NAME=portainer YAMLFILE=/var/lib/jenkins/workspace/portainer/docker-compose.yml OPTS="-f $YAMLFILE -p $PROJECT_NAME"UPOPTS="-d --no-recreate --no-build --no-deps" . /lib/lsb/init-functions case"$1"in start) log_daemon_msg "Starting service portainer""portainer"||true docker-compose $OPTS up $UPOPTS;; stop) log_daemon_msg "Stopping service portainer""portainer"||true docker-compose $OPTS stop ;; reload) log_daemon_msg "Reloading service portainer""portainer"||true docker-compose $OPTS up $UPOPTS;; restart) docker-compose $OPTS stop docker-compose $OPTS up $UPOPTS;; status)status=$(docker ps-aqf"name=${PROJECT_NAME}")if[!-z"${status}"]; thenecho"Already running ID: ${status}"fi;; *) log_action_msg "Usage: /etc/init.d/portainer {start|stop|restart|reload|status}"||trueexit1;;esac exit0
System D
nano /etc/systemd/system/portainer.service
[Unit]Description=Portainer service with docker-compose Requires=docker.service After=docker.service [Service]Restart=always WorkingDirectory=/var/lib/jenkins/workspace/portainer/ # Remove old containers, network and volumesExecStartPre=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml down -vExecStartPre=-/bin/bash-c'docker network rm docker_portainer_net'ExecStartPre=-/bin/bash-c'docker ps -aqf "name=portainer" | xargs docker rm' # Compose upExecStart=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml up # Compose down, remove containersExecStop=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml down [Install]WantedBy=multi-user.target
Проблемы и их решения
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
Компоненты
- Репозитории - Репозитории Dokerfile - ов
- docker-compose - Компановщик контейнеров
- docker-machine - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
- Docker Toolbox - Комплект необходимых программ для Windows или MacOs (Внимание!!! ставит VirtualBox )
- Weave Scope - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.
- cAdvisor - Система мониторинга за контейнерами
- DockStation - Отличный клиент для работы с docker-compose, docker-composer.yml
Репозитории
Документация / Статьи
Другие системы виртуализации
2016/12/05 03:08 | vagrant, chef, shell, puppet, salt, ansible, docker, devops, virtual, alpine | |
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 |