Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
system:docker [2019/10/15 23:25] – [UI] mirocowsystem:docker [2026/01/12 20:37] (текущий) 192.168.1.159
Строка 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                                                                                                                                                                                                                                                                                                       | 
-| 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://docs.docker.com/docker-for-mac/edge-release-notes/|Docker for Mac Edge]] +===== Ubuntu =====
-  * [[https://docs.docker.com/install/linux/docker-ce/debian/|Docker for Debian]] +
- +
-nano /etc/apt/sources.list +
-<code> +
- deb https://apt.dockerproject.org/repo debian-stretch main +
-</code> +
- +
-====== UI ====== +
- +
-  * https://github.com/DockStation/dockstation :!: +
-  * https://github.com/felixgborrego/simple-docker-ui :!: +
-  * https://github.com/docker/kitematic +
-  * https://github.com/bcicen/ctop +
-===== Использование ===== +
- +
-==== Работа с образами / Images ==== +
- +
- +
-<note important>Для справки \\ <code bash> +
-$ docker image +
-</code></note> +
- +
-=== Вывести список образов ===+
  
 <code bash> <code bash>
-$ docker images +apt update && \ 
-REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE +apt install ca-certificates curl gnupg lsb-release -y && \ 
-yii2_php                     latest              6a950c96e01d        23 hours ago        159MB+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> <code bash>
-$ docker image rm 6a950c96e01d+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> </code>
  
-=== Удалить все образы ===+====== Docker ======
  
 <code bash> <code bash>
-$ sudo docker rm -f $(sudo docker ps -a -q) +$ sudo groupadd docker 
-sudo docker rmi -f $(sudo docker images -q)+$ sudo usermod -aG docker $USER 
 +newgrp docker
 </code> </code>
  
-=== Анализировать образ ===+====== Docker Swarm ======
  
 +Если Docker Swarm создается
 <code bash> <code bash>
-$ docker image inspect 6a950c96e01d +$ docker swarm init 
-+# В вответ docker swarm join --token SWMTKN-1-54k2k418tw2j0juwm3inq6crp4ow6xogswihcc5azg7oq5qo7e-a3rfeyfwo7d93heq0y5vhyzod 172.31.245.104:2377 
-    { +# Эту команду необходимо будет выполнить на каждой присоединяймой ноде
-        "Id": "sha256:6a950c96e01de12b463f1fce232b48f530c487c2d7af5fef2e59c693c21c8af1", +
-        "RepoTags":+
-            "yii2_php:latest" +
-        ], +
-        "RepoDigests": [], +
-        "Parent": "sha256:a0883c +
-... +
-}+
 </code> </code>
  
-=== Избавляемся от неиспользуемых образов === +Если необходимо присоеденить к уже существующему
- +
-<code bash>$ docker image prune</code> +
- +
-=== Список образов === +
- +
-<note tip>Алиас к <code bash>$ docker images</code></note> +
 <code bash> <code bash>
-$ docker image ls +$ docker swarm join-token worker 
-REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE +# В вответ docker swarm join --token SWMTKN-1-54k2k418tw2j0juwm3inq6crp4ow6xogswihcc5azg7oq5qo7e-a3rfeyfwo7d93heq0y5vhyzod 172.31.245.104:2377 
-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+
 </code> </code>
  
-==== Работа с контейнерами / Containers ====+====== Настройки ======
  
-<note important>Для справки \\ <code bash> +=== Log drivers: управление логами ===
-$ docker +
-$ docker exec --help +
-</code></note>+
  
-=== Запуск контейнера === +nano /etc/docker/daemon.json 
- +<code json
-<note tip>Необходим Dockerfile</note> +{ 
- +  "log-driver": "local", 
-<code bash>docker up</code> +  "log-opts": { 
- +    "max-size": "10m", 
-=== Список запущеных контейнеров === +    "max-file""3" 
- +  } 
-<code bash+}
-$ 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/tcp0.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+
 </code> </code>
  
-=== Подсоеденение к контейнеру === +====== API ======
- +
-<note tip>Проверить предварительно на наличие запрашиваемой оболочки. В alpine по умолчанию нет bash</note> +
- +
-<code bash> +
-$ sudo docker exec -i -t a50423920e0d /bin/bash +
-$ 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> +
-====== Проблемы и их решения ====== +
- +
-==== Circular import between fpm and nginx ==== +
- +
-Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) +
-В качестве решенияпроблемы, на данный момент, можно воспользоваться прокси сервером/контейнером docker-grand-ambassador +
- +
-<code yaml> +
-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" +
-</code> +
- +
-==== ERROR: Couldn't connect to Docker daemon - you might need to rundocker-machine start default` ==== +
- +
-скорее всего вам потребуется сделать следующее: +
-<code bash>$ docker-machine create --driver=xhyve dev --xhyve-experimental-nfs-share</code> +
- +
-====== Компоненты ====== +
- +
-  * [[https://docs.docker.com/|Docker]] +
-  * [[https://hub.docker.com/|Репозитории]] - Репозитории Dokerfile - ов +
-  * [[https://docs.docker.com/compose/|docker-compose]] - Компановщик контейнеров +
-  * [[https://docs.docker.com/machine/|docker-machine]] - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера. +
-  * [[https://www.docker.com/products/docker-toolbox|Docker Toolbox]] - Комплект необходимых программ для Windows или MacOs (Внимание!!! ставит VirtualBox ) +
-  * [[https://www.weave.works/products/weave-scope/|Weave Scope]] - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров. +
-  * [[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]] +
-  * [[http://habrahabr.ru/post/262397/|Свой облачный хостинг за 5 минут. Часть 2: Service Discovery]] +
-  * [[https://habr.com/post/264269/|Свой облачный хостинг за 5 минут. Часть 3: Consul, Registrator, Consul-Template]] +
-  * [[https://habrahabr.ru/post/277699/|о технологии]] +
-  * https://habrahabr.ru/post/253877/ :!: +
-  * https://habrahabr.ru/post/309556/ :!: +
-  * http://ru.stackoverflow.com/questions/tagged/docker-compose +
-  * https://habrahabr.ru/post/263083/ +
-  * https://blog.amartynov.ru/docker-mysql/ +
-  * http://onedev.net/post/579 +
-  * https://dou.ua/lenta/articles/vagrant/ +
-  * https://ast.rocks/blog/docker-create-container +
-  * https://xakep.ru/2015/06/04/docker-faq/ +
-  * http://dotsandbrackets.com/quick-intro-to-docker-compose-ru/ +
-  * https://toster.ru/q/200627 +
-  * http://devacademy.ru/posts/ustanovka-i-ispol-zovaniie-docker-compose-na-ubuntu-14-04/ +
-  * https://ast.rocks/blog/docker-orchestration +
-  * 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/+
  
-====== Другие системы виртуализации ======+  * [[docker-socket|Docker Socket]]
  
-{{topic>[virtual]}}+====== Мониторинг ======
  
 +  * [[software:monitoring:promtail-loki-grafana]]
 +  * [[software:monitoring:fluent-bit-loki-grafana]]
 +  * [[software:monitoring:fluent-bit-fluentd-loki-grafana]]