Это старая версия документа!
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
$ sudo groupadd docker $ sudo usermod -aG docker $USER $ newgrp docker
UI
Использование
Работа с образами / Images
$ docker image
Вывести список образов
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yii2_php latest 6a950c96e01d 23 hours ago 159MB
Удалить образ
$ docker image rm 6a950c96e01d
Удалить все образы
$ sudo docker rm -f $(sudo docker ps -a -q) $ sudo docker rmi -f $(sudo docker images -q)
Анализировать образ
$ 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
Запуск контейнера
$ 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
Подсоеденение к контейнеру
$ 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
Сети
Сетевые драйверы
bridge: сетевой драйвер по умолчанию. Если вы не указываете драйвер, это тип сети, которую вы создаете. Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которые должны взаимодействовать.
host: для автономных контейнеров, удаляет сетевую изоляцию между контейнером и Docker-хостом. Хост доступен только для служб swarm в Docker версии 17.06 и выше.
overlay: overlay сети соединяют несколько демонов Docker вместе и позволяют сервисам Swarm связываться друг с другом. Вы также можете использовать overlay сети для облегчения связи между сервисом Swarm и автономным контейнером. Или между двумя автономными контейнерами на разных демонах Docker. Эта стратегия устраняет необходимость выполнять маршрутизацию на уровне ОС между этими контейнерами.
macvlan: сети Macvlan позволяют назначать MAC-адрес контейнеру, делая его физическим устройством в вашей сети. Демон Docker направляет трафик в контейнеры по их MAC-адресам. Использование драйвера macvlan иногда является лучшим выбором при работе с устаревшими приложениями. Приложениям, которые ожидают прямого подключения к физической сети, а не маршрутизации через сетевой стек хоста Docker.
none: для этого контейнера отключит все сети. Обычно используется в сочетании с пользовательским сетевым драйвером. Ни один не доступен для swarm услуг
Установка
$ docker network create bridge-network $ docker network create --driver=bridge bridge-network $ docker network create -d overlay my-multihost-network $ docker network create --driver overlay overlay_network $ docker network create --subnet 10.1.0.0/16 --gateway=10.1.0.1 --ip-range 10.1.4.0/24 --driver=bridge --label=host4networks brifge04 $ docker network create nginx-proxy
Использование
$ docker run -it --name=test_brifge04 --net brifge04 centos:centos7 /bin/bash $ docker run -it --name=test_brifge04_2 --net brifge04 --ip=10.1.4.100 centos:centos7 /bin/bash
Аанализ сетей
$ docker network inspect bridge
$ docker network inspect nginx-proxy
$ docker network ls
Особенности работы с MAC OS
Все контейнеры в MAC OS находятся в виртуальной машине qcow2 и находятся по адресу /Users/mirocow/Library/Containers/com.docker.docker/Docker.qcow2
- где mirocow имя вашего пользователя
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}" ]; then echo "Already running ID: ${status}" fi ;; *) log_action_msg "Usage: /etc/init.d/portainer {start|stop|restart|reload|status}" || true exit 1 ;; esac exit 0
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 volumes ExecStartPre=/usr/bin/docker-compose -f /var/lib/jenkins/workspace/portainer/docker-compose.yml down -v ExecStartPre=-/bin/bash -c 'docker network rm docker_portainer_net' ExecStartPre=-/bin/bash -c 'docker ps -aqf "name=portainer" | xargs docker rm' # Compose up ExecStart=/usr/bin/docker-compose -f /var/lib/jenkins/workspace/portainer/docker-compose.yml up # Compose down, remove containers ExecStop=/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
Репозитории
Документация / Статьи
Другие системы виртуализации
2015/10/13 09:01 | linkbacks Linkbacks | system, kernel, virtual | ||
2017/11/09 13:38 | linkbacks Linkbacks | container, virtual | ||
2015/10/13 09:01 | linkbacks Linkbacks | virtual | ||
2017/11/09 13:34 | linkbacks Linkbacks | linux, container, containers, virtual | ||
2016/12/05 00:08 | linkbacks Linkbacks | vagrant, chef, shell, puppet, salt, ansible, docker, devops, virtual, alpine | ||
2025/02/10 11:29 | linkbacks Linkbacks | vagrant, chef, shell, puppet, salt, ansible, docker, devops, virtual, alpine | ||
2015/10/13 09:01 | linkbacks Linkbacks | vagrant, chef, shell, puppet, salt, ansible, docker, virtual | ||
2015/10/13 09:01 | linkbacks Linkbacks | virtualbox, virtual | ||
2019/07/30 10:46 | linkbacks Linkbacks | vagrant, chef, shell, puppet, salt, ansible, docker, devops, virtual, alpine | ||
2018/02/28 22:23 | linkbacks Linkbacks | vagrant, chef, shell, puppet, salt, ansible, docker, virtual |