Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
system:docker [2018/06/26 00:03] – [Остановить контейнер] mirocowsystem:docker [2025/01/22 18:24] (текущий) 192.168.1.104
Строка 1: Строка 1:
-{{tag>vagrant chef shell puppet salt ansible docker devops virtual}}+{{tag>vagrant chef shell puppet salt ansible docker devops virtual alpine}}
  
 ====== Docker ====== ====== Docker ======
Строка 5: Строка 5:
 {{https://habrastorage.org/files/67f/73a/551/67f73a551a254c19854adf3b4665a7bb.png?300}} {{https://habrastorage.org/files/67f/73a/551/67f73a551a254c19854adf3b4665a7bb.png?300}}
  
-| VIRTUAL MACHINES                                                                                                                                                  | CONTAINERS                                                                                                                                                                                                                                                                                                                 | 
-| {{https://www.docker.com/sites/default/files/WhatIsDocker_2_VMs_0-2_2.png?200}}                                                                                   | {{https://www.docker.com/sites/default/files/WhatIsDocker_3_Containers_2_0.png?200}}                                                                                                                                                                                                                                       | 
-| 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.   | 
  
-===== Установка =====+====== Установка ======
  
-  * https://www.docker.com/community-edition#/download :!: +===== Ubuntu =====
-  * https://store.docker.com/editions/community/docker-ce-desktop-mac :!: +
-  * https://docs.docker.com/engine/installation/linux/debian/+
  
-nano /etc/apt/sources.list +<code bash> 
-<code> +$ apt update && \ 
- deb https://apt.dockerproject.org/repo debian-stretch main+apt install ca-certificates curl gnupg lsb-release -y && \ 
 +mkdir -p /etc/apt/keyrings && \ 
 +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ 
 +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \ 
 +apt update && \ 
 +apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
 </code> </code>
 +
 +===== Debian =====
 +
 +<code bash>
 +$ apt update && \
 +apt install ca-certificates curl gnupg lsb-release -y && \
 +mkdir -p /etc/apt/keyrings && \
 +curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \
 +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
 +apt update && \
 +apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
 +</code>
 +
 +====== Docker ======
 +
 +<code bash>
 +$ sudo groupadd docker
 +$ sudo usermod -aG docker $USER
 +$ newgrp docker
 +</code>
 +
 +====== UI ======
 +
 +  * https://github.com/DockStation/dockstation :!:
 +  * https://github.com/felixgborrego/simple-docker-ui :!:
 +  * https://github.com/docker/kitematic
 +  * https://github.com/bcicen/ctop
 +  * https://github.com/portainer/portainer
 +  * https://github.com/kubernetes/kubernetes
  
 ===== Использование ===== ===== Использование =====
 +
 +  * [[Dockerfile]]
 +  * [[docker-compose.yml]]
  
 ==== Работа с образами / Images ==== ==== Работа с образами / Images ====
  
  
-<note tip>Для справки \\ <code bash>+<note important>Для справки \\ <code bash>
 $ docker image $ docker image
 </code></note> </code></note>
Строка 41: Строка 73:
 <code bash> <code bash>
 $ docker image rm 6a950c96e01d $ docker image rm 6a950c96e01d
 +</code>
 +
 +=== Удалить все образы ===
 +
 +<code bash>
 +$ sudo docker rm -f $(sudo docker ps -a -q)
 +$ sudo docker rmi -f $(sudo docker images -q)
 </code> </code>
  
Строка 77: Строка 116:
 yii2_mariadb                 latest              03ddc39bcf15        27 hours ago        204MB yii2_mariadb                 latest              03ddc39bcf15        27 hours ago        204MB
 </code> </code>
 +
 +=== Получение образов ===
 +
 +<note tip>Для справки \\ <code bash>
 +$ docker save vorobev4/mule-runtime-ee:v3-4.4.0 > /tmp/mule-runtime-ee.tar
 +</code></note>
 +
 +=== Установка образа ===
 +
 +<note tip>Для справки \\ <code bash>
 +$ docker load /tmp/mule-runtime-ee.tar
 +</code></note>
  
 ==== Работа с контейнерами / Containers ==== ==== Работа с контейнерами / Containers ====
  
-<note tip>Для справки \\ <code bash>$ docker</code></note>+<note important>Для справки \\ <code bash> 
 +$ docker 
 +$ docker exec --help 
 +</code></note>
  
 === Запуск контейнера === === Запуск контейнера ===
  
-<note tip>Необходим Dockerfile</note>+<note important>Необходим Dockerfile</note>
  
 <code bash>$ docker up</code> <code bash>$ docker up</code>
Строка 105: Строка 159:
 $ sudo docker exec -i -t a50423920e0d /bin/sh $ sudo docker exec -i -t a50423920e0d /bin/sh
 </code> </code>
 +
 +==== Запустить контейнер ====
 +
 +<code bash>$ docker start a50423920e0d</code>
 +
 +==== Остановить контейнер ====
 +
 +<code bash>$ docker stop a50423920e0d</code>
  
 ==== Пребить контейнер ==== ==== Пребить контейнер ====
  
 <code bash>$ docker kill a50423920e0d</code> <code bash>$ docker kill a50423920e0d</code>
 +
 ===== Использование docker-composer.yml ===== ===== Использование docker-composer.yml =====
 +
 +<note important>Для справки \\ <code bash>
 +$ docker-compose
 +$ docker-compose exec
 +</code></note>
  
 <hidden docker-composer.yml> <hidden docker-composer.yml>
Строка 226: Строка 294:
 <code bash>$ docker-compose -f docker-compose.yml -f docker-compose-local.yaml up -d</code> <code bash>$ docker-compose -f docker-compose.yml -f docker-compose-local.yaml up -d</code>
  
 +==== Сети ====
 +
 +=== Сетевые драйверы ===
 +
 +**bridge**: сетевой драйвер по умолчанию.
 +Если вы не указываете драйвер, это тип сети, которую вы создаете.
 +Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которые должны взаимодействовать.
 +
 +**host**: для автономных контейнеров, удаляет сетевую изоляцию между контейнером и Docker-хостом.
 +Хост доступен только для служб swarm в Docker версии 17.06 и выше.
 +
 +**overlay**: overlay сети соединяют несколько демонов Docker вместе и позволяют сервисам Swarm связываться друг с другом.
 +Вы также можете использовать overlay сети для облегчения связи между сервисом Swarm и автономным контейнером.
 +Или между двумя автономными контейнерами на разных демонах Docker.
 +Эта стратегия устраняет необходимость выполнять маршрутизацию на уровне ОС между этими контейнерами.
 +
 +**macvlan**: сети Macvlan позволяют назначать MAC-адрес контейнеру, делая его физическим устройством в вашей сети.
 +Демон Docker направляет трафик в контейнеры по их MAC-адресам.
 +Использование драйвера macvlan иногда является лучшим выбором при работе с устаревшими приложениями.
 +Приложениям, которые ожидают прямого подключения к физической сети, а не маршрутизации через сетевой стек хоста Docker.
 +
 +**none**: для этого контейнера отключит все сети.
 +Обычно используется в сочетании с пользовательским сетевым драйвером. Ни один не доступен для swarm услуг
 +
 +=== Установка ===
 +
 +<code bash>
 +$ 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
 +</code>
 +
 +=== Использование ===
 +
 +<code bash>
 +$ 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
 +</code>
 +
 +=== Аанализ сетей ===
 +
 +<code bash>
 +$ docker network inspect bridge
 +$ docker network inspect nginx-proxy
 +$ docker network ls
 +</code>
 +
 +====== Особенности работы с MAC OS ======
 +
 +Все контейнеры в MAC OS находятся в виртуальной машине qcow2 и находятся по адресу
 +/Users/mirocow/Library/Containers/com.docker.docker/Docker.qcow2
 +
 +  * где mirocow имя вашего пользователя
 +
 +<note tip>Для MacOs устанавливается в отдельную виртуальную машину. К которой можно законектится с помощью tty. \\
 +**screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty**</note>
 +
 +====== Автоматический запуск контейнеров в Debian ======
 +
 +===== System V =====
 +
 +nano /etc/init.d/portainer
 +<code bash>
 +#!/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
 +</code>
 +
 +===== System D =====
 +
 +
 +nano /etc/systemd/system/portainer.service
 +<code bash>
 +[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
 +</code>
 ====== Проблемы и их решения ====== ====== Проблемы и их решения ======
  
-===== Circular import between fpm and nginx =====+==== Circular import between fpm and nginx ====
  
 Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) Возникает при циклическом связывании контейнеров (2-ух сторонее связывание)
Строка 249: Строка 469:
 </code> </code>
  
-===== ERROR: Couldn't connect to Docker daemon - you might need to rundocker-machine start default` =====+==== ERROR: Couldn't connect to Docker daemon - you might need to rundocker-machine start default` ====
  
 скорее всего вам потребуется сделать следующее: скорее всего вам потребуется сделать следующее:
Строка 257: Строка 477:
  
   * [[https://docs.docker.com/|Docker]]   * [[https://docs.docker.com/|Docker]]
 +  * [[https://hub.docker.com/|Репозитории]] - Репозитории Dokerfile - ов
   * [[https://docs.docker.com/compose/|docker-compose]] - Компановщик контейнеров   * [[https://docs.docker.com/compose/|docker-compose]] - Компановщик контейнеров
   * [[https://docs.docker.com/machine/|docker-machine]] - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.   * [[https://docs.docker.com/machine/|docker-machine]] - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
Строка 262: Строка 483:
   * [[https://www.weave.works/products/weave-scope/|Weave Scope]] - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.   * [[https://www.weave.works/products/weave-scope/|Weave Scope]] - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.
   * [[https://github.com/google/cadvisor|cAdvisor]] - Система мониторинга за контейнерами   * [[https://github.com/google/cadvisor|cAdvisor]] - Система мониторинга за контейнерами
 +  * [[https://dockstation.io/|DockStation]] - Отличный клиент для работы с docker-compose, docker-composer.yml :!:
 +
 +====== Репозитории ======
  
 +  * https://hub.docker.com/r/mirocow/yii2-dockerfile :!:
 +  * https://hub.docker.com/
 +  * https://github.com/topics/docker-images
 +  * https://github.com/topics/moby
 +  * https://github.com/laradock/laradock
 +  * https://github.com/topics/moby
 +  * https://github.com/topics/docker-swarm
 ====== Документация / Статьи ====== ====== Документация / Статьи ======
  
 +  * [[system:docker:xdebug]]
 +  * http://docker.crank.ru/ :!:
   * [[https://habr.com/post/261415/|Свой облачный хостинг за 5 минут. Часть 1: Ansible, Docker, Docker Swarm]]   * [[https://habr.com/post/261415/|Свой облачный хостинг за 5 минут. Часть 1: Ansible, Docker, Docker Swarm]]
   * [[http://habrahabr.ru/post/262397/|Свой облачный хостинг за 5 минут. Часть 2: Service Discovery]]   * [[http://habrahabr.ru/post/262397/|Свой облачный хостинг за 5 минут. Часть 2: Service Discovery]]
Строка 283: Строка 516:
   * https://ast.rocks/blog/docker-orchestration   * https://ast.rocks/blog/docker-orchestration
   * https://docs.docker.com/docker-for-mac/#uninstall-or-reset   * https://docs.docker.com/docker-for-mac/#uninstall-or-reset
 +  * https://habr.com/ru/post/333874/
 +  * https://linux-notes.org/rabota-s-tomami-volumes-v-docker/
  
-====== Другие системы виртуализации ======+====== Ссылки ======
  
-{{topic>[virtual]}}+{{topic>[docker]}}