Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
system:docker [2018/06/25 23:48] – [Список запущеных контейнеров] 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>
Строка 104: Строка 158:
 $ sudo docker exec -i -t a50423920e0d /bin/bash $ sudo docker exec -i -t a50423920e0d /bin/bash
 $ sudo docker exec -i -t a50423920e0d /bin/sh $ sudo docker exec -i -t a50423920e0d /bin/sh
 +</code>
 +
 +==== Запустить контейнер ====
 +
 +<code bash>$ docker start a50423920e0d</code>
 +
 +==== Остановить контейнер ====
 +
 +<code bash>$ docker stop a50423920e0d</code>
 +
 +==== Пребить контейнер ====
 +
 +<code bash>$ docker kill a50423920e0d</code>
 +
 +===== Использование docker-composer.yml =====
 +
 +<note important>Для справки \\ <code bash>
 +$ docker-compose
 +$ docker-compose exec
 +</code></note>
 +
 +<hidden docker-composer.yml>
 +<code yaml>
 +version: '2'
 +services:
 +  mariadb:
 +    build: ./provision/mariadb
 +    restart: always
 +    environment:
 +      MYSQL_ROOT_PASSWORD: password
 +      MYSQL_DATABASE: skringo
 +      MYSQL_USER: skringo
 +      MYSQL_PASSWORD: skringo
 +    ports:
 +      - '3306:3306'
 +    expose:
 +      - '3306'
 +    volumes:
 +      - './logs/mysql:/var/log/mariadb'
 +  redis:
 +    build: ./provision/redis
 +    restart: always
 +    environment:
 +      - REDIS_VERSION=4.0.9
 +    ports:
 +      - '6379:6379'
 +    expose:
 +      - '6379'
 +  redis-commander:
 +    container_name: redis-commander
 +    hostname: redis-commander
 +    image: rediscommander/redis-commander:latest
 +    build: .
 +    restart: always
 +    environment:
 +    - REDIS_HOSTS=local:redis:6379
 +    ports:
 +    - 8081:8081
 +  nginx:
 +    build: ./provision/nginx
 +    restart: always
 +    links:
 +      - php
 +    volumes:
 +      - './:/app'
 +      - './provision/nginx/etc/conf.d/yii2.advanced.template:/etc/nginx/conf.d/site.template'
 +      - './logs/nginx:/var/log/nginx'
 +    environment:
 +      - NGINX_VERSION=1.13.12-1~stretch
 +      - NGINX_HOST=skringo.loc
 +      - NGINX_PORT=80
 +    ports:
 +      - '80:80'
 +    command: 'sh -c "envsubst \"`env | awk -F = ''{printf \" $$%s\", $$1}''`\" < /etc/nginx/conf.d/site.template > /etc/nginx/conf.d/default.conf && nginx -g ''daemon off;''"'
 +  elasticsearch:
 +    build: ./provision/elasticsearch
 +    restart: always
 +    ports:
 +      - '9200:9200'
 +    expose:
 +      - '9200'
 +    environment:
 +      - ELASTICSEARCH_VERSION=5.6.9
 +      - JAVA_ALPINE_VERSION=8.151.12-r0
 +      - JAVA_VERSION=8u151
 +      - LANG=C.UTF-8
 +      - cluster.name=docker-cluster
 +      - bootstrap.memory_lock=true
 +      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
 +    ulimits:
 +      memlock:
 +        soft: -1
 +        hard: -1
 +    mem_limit: 1g
 +  kibana:
 +    build: ./provision/kibana
 +    links:
 +      - elasticsearch
 +    ports:
 +      - '5601:5601'
 +  php:
 +    build: ./provision/php/7.1
 +    restart: always
 +    links:
 +      - mariadb
 +      - redis
 +      - elasticsearch
 +    ports:
 +      - '9001:9000'
 +    expose:
 +      - '9000'
 +      - '9001'
 +    environment:
 +      - PHP_IDE_CONFIG=serverName=skringo.loc
 +    volumes:
 +      - './:/app'
 +      - './provision/php/7.1/xdebug.ini:/etc/php7/conf.d/xdebug.ini'
 +      - './logs/php7:/var/log/php7'
 +      - './logs/php7/xdebug:/tmp/xdebug_log'
 +
 +networks:
 +  default:
 +    external:
 +      name: nginx-proxy
 +</code>
 +</hidden>
 +
 +==== Подсоеденение к контейнеру ====
 +
 +<code bash>$ docker-compose exec php /bin/sh</code>
 +Где php название используемого сервиса / services
 +
 +==== Запуск с использованием локального конфига ====
 +
 +<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> </code>
 ====== Проблемы и их решения ====== ====== Проблемы и их решения ======
  
-===== Circular import between fpm and nginx =====+==== Circular import between fpm and nginx ====
  
 Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) Возникает при циклическом связывании контейнеров (2-ух сторонее связывание)
Строка 128: Строка 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` ====
  
 скорее всего вам потребуется сделать следующее: скорее всего вам потребуется сделать следующее:
Строка 136: Строка 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 с локального компьютера.
Строка 141: Строка 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]]
Строка 162: Строка 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]}}