Ответы пользователя по тегу Docker
  • Как в nomad передать каталог с конфигурацией для задачи?

    @kiranananda Автор вопроса
    В данный момент добавили конфиги в докер Image. Ну и наследование имаджей от базовой соответсвенно.
    Ответ написан
    Комментировать
  • Docker swarm overlay и конец сварму :(?

    @kiranananda Автор вопроса
    Еще добавлю consul + nomad. Тоже хорошо
    Ответ написан
    Комментировать
  • Docker registry авторизация или фильтрация по ip для push?

    @kiranananda Автор вопроса
    Вообщем то решил вопрос.

    Для начала мы поднимаем nginx и в нем создаем 2 секции server. Одна секция на 5000 порту, вторая на 5001.
    В первой секции мы обрубаем все запросы кроме GET и HEAD, это будет порт на получение образов внутри кластера. Во второй же секции мы добавляем авторизацию. я выложу готовые конфиги вдруг кому пригодится...

    user nginx;
    
    events {
        worker_connections  1024;
    }
    
    http {
    
      upstream docker-registry {
        server registry:5000;
      }
    
      ## Set a variable to help us decide if we need to add the
      ## 'Docker-Distribution-Api-Version' header.  
      ## The registry always sets this header.
      ## In the case of nginx performing auth, the header is unset
      ## since nginx is auth-ing before proxying.   
      map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
        '' 'registry/2.0';
      }
    
    #------------------------READ ONLY ACCESS-------------------------
      server {
        listen 5000;
    
        client_max_body_size 0;
    
        chunked_transfer_encoding on;
    
        location /v2/ {
          if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
            return 404;
          }
    
          #Доступ только на чтение
          if ($request_method !~* ^(GET|HEAD)$ ) {  
            return 403;
          }
    
          add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
    
          proxy_pass                          http://registry:5000;
          proxy_set_header  Host              $http_host;   # required for docker client's sake
          proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
          proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
          proxy_set_header  X-Forwarded-Proto $scheme;
          proxy_read_timeout                  900;  
        }
      }
    
    
    #---------------------------WRITE ACCESS-----------------------------
      server {
        listen 5001;
        client_max_body_size 0;
        chunked_transfer_encoding on;
    
        location /v2/ {
          if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
            return 404;
          }
    
          auth_basic "Registry realm";
          auth_basic_user_file /run/secrets/passwd; 
    
          allow 172.18.0.1;
          deny  all;
    
          add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
    
          proxy_pass                          http://registry:5000;
          proxy_set_header  Host              $http_host;   # required for docker client's sake
          proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
          proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
          proxy_set_header  X-Forwarded-Proto $scheme;
          proxy_read_timeout                  900;  
        }
      }
    }


    И сам docker-compose.yml

    version: '3.4'
    services:
      nginx:
        image: nginx
        ports:
          - target: 5000
            published: 5000
            mode: host
    
          - target: 5001
            published: 5001
            mode: host
        configs:
          - source: nginx
            target: /etc/nginx/nginx.conf
        secrets:
          - passwd
    
        networks:
          registry_network:
    
        deploy:
            replicas: 1
            resources:
               limits:
                  cpus: '0.25'
                  memory: 256M
            placement:
               constraints: [node.labels.registry == true]
        logging:
            driver: syslog
            options:
                tag: registry-nginx
                syslog-address: "udp://10.92.60.151:514"
    
      registry:
        image: registry:2
        networks:
          registry_network:
            aliases:
              - registry
        volumes:
          - /srv/registry:/var/lib/registry   
        deploy:
              replicas: 1
              resources:
                limits:
                  cpus: '0.25'
                  memory: 256M
              placement:
                constraints: [node.labels.registry == true]
        logging:
            driver: syslog
            options:
                tag: registry
                syslog-address: "udp://10.92.60.151:514"
    
    secrets:
      passwd:
        file: ./nginx/passwd
    
    configs:
      nginx:
        file: ./nginx/nginx.conf
    
    networks:
      registry_network:
        driver: overlay


    Ну и не забываем в конфиге докера "insecure-registries" : ["10.92.60.151:5001"]

    Ах да, так же удалось не использовать лишние сертификаты, в моем случае.

    Для ввода пароля используем команду docker login 10.92.60.151:5001

    Теперь если есть желание у 5000 порта можно убрать mode: host и в имаджах указывать 127.0.0.1:5000, в этом случае не нужно на нодах делать запись "insecure-registries" : ["10.92.60.151:5000"]
    Ответ написан
    Комментировать
  • Docker блокировка трафика, как сделать?

    @kiranananda Автор вопроса
    А вроде разобрался, самый быстрый способ, написать сюда и сразу приходят идеи :)...

    Хитриые dnat-ы и прочие штуки, плюс еще раз прочтение доков. Вообщем фильтровать надо в цепочке
    DOCKER-USER . Тогда все гуд :)
    Ответ написан
    Комментировать
  • Docker swarm контейнер рестарт?

    @kiranananda Автор вопроса
    Эх опять доку не дочитал :)

    #Через какое время по таймауту контейнер убить
        stop_grace_period: 3m
        #Сигнал для убийства сервиса, в данном случае апач будет ждать завершения сессий.
        stop_signal: WINCH
    Ответ написан
    Комментировать
  • Docker swarm не доступа по портам?

    @kiranananda Автор вопроса
    Ответ найден, убил часов 5. Решил заново виртуалки накатить. Думаю вдруг что не так. И так и было.
    Для смены имени хоста в убунту во всех доках написано править файл /etc/cloud/cloud.cfg в частности строчку
    preserve_hostname: false
    изменить на true.
    После этого все работать перестает. Досконально не разбирался с этим, но для решения проблемы достаточно :)...
    Ответ написан
    Комментировать
  • Memcached кластер в docker?

    @kiranananda Автор вопроса
    Вроде появилось решение внезапно :)...
    Если в докере я поднимаю 2 мемкэша с разными именами. И цепляюсь к ним из приложения по именам. В таком случае при падении одной из нод на которых есть мемкэш, он просто мигрирует на другую вообщем то и все. Просто честно говоря я не крутил этого всего, пока в теории. Но вроде должно пройти... :)
    Ответ написан