ФорумРазработкаУстановка и администрирование ПОDocker - Linux Containers → Начинаю познавать docker

Начинаю познавать docker

  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 8:49, спустя 1 день 21 час 57 минут

    А как задать ip адрес принудительно контейнеру?
    А то они их произвольно получают 172.17.0.*, в хостах прописать явно же надо? Или я чего-то не понимаю?
    docker run -ip xx.xx.xx.xx
    ругается

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 9:36, спустя 47 минут 33 секунды

    @AlexB, нельзя конечно ж, там динамические сети и вообще все охуенно. А зачем тебе IP отдельный вдруг понадобился?

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 10:16, спустя 40 минут 17 секунд

    Ну разрабатываю я сайт
    www.gavno.ru
    В hosts у меня прописано
    172.17.0.2 www.dev.gavno.ru

    Как мне сделать, чтобы гарантировано набирая в браузере www.dev.gavno.ru я получил ответ из нужного контейнера?

    Хотя уже нагуглил, работает:
    Assign static IP to Docker container [stackoverflow.com]
    только не пойму зачем создавать еще одну сеть 172.18.0.0/16 когда вроде докер при установке уже создал 172.17.0.0/16

    Спустя 261 сек.

    И еще вопрос в догонку.
    Какого хрена если в Dockerfile написано
    CMD какая-то команда

    то при docker run контейнер стартует и тут же закрывается

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 10:26, спустя 9 минут 5 секунд

    то при docker run контейнер стартует и тут же закрывается

    @AlexB, покажи команду?

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 10:33, спустя 7 минут 14 секунд

    docker run -i -t se/backend /bin/bash

    Все нормально работает пока не добавляещь в Dockerfile банальную строку
    ENTRYPOINT service nginx start
    или
    CMD service nginx start

    и в общем-то пофиг что написано после CMD, хоть echo 1

    консоль контейнера я не получаю, но он и не демонизируется, просто останавливается

  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 10:43, спустя 9 минут 53 секунды

    Блядь вылечил:
    CMD service nginx start && bash

    Гы )))) Но логика осталась загадкой, почему так?

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 11:47, спустя 1 час 4 минуты 5 секунд

    @AlexB, потому что ты не понимаешь самой банальной вещи что такое entrypoint & cmd.

    Смотри

    Контейнер выполняет всегда вот такую конструкцию:

    $ENTRYPOINT $CMD

    Если ты запускаешь docker run и чтото потом пишешь (например /bin/bash), то тем самым ты переопределяешь определенную в Dockerfile CMD конструкцию.

    Смотри что у нас получается в итоге

    Если в dockerfile есть

    ENTRYPOINT /bin/echo
    CMD Fuck, yeah! It is from Dockerfile!

    И ты сделаешь просто

    docker run mycontainer

    то оно выведет "Fuck, yeah! Is is from Dockerfile!".

    Если ты запустишь

    docker run oh now, what a fuck!

    То оно выведет "oh now, what a fuck!" соответственно.

    Если бы у тебя не было Entrypoint то в обоих случаях ты бы получил "command or file not found error".

    Ну и соответственно ты можешь entrypoint переопределить в docker run с помощью параметра "--entrypoint string Overwrite the default ENTRYPOINT of the image" (see docker run --help).

    Удобно это тогда когда у тебя есть какой то универсальный сервис типа django manage.py, который принимает некоторые параметры и ты можешь сделать "ENTRYPOINT python manage.py" и ебошить дальше в виде "docker run $containerName$ syncdb" и это будет приаппенджено в manage.py :)

    Еще есть вопросы? :)

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 12:47, спустя 59 минут 49 секунд

    Сенькс, вроде осмыслил про переопределение, но вопрос остался. Если я явно не передаю команду:

    docker run -i -t se/backend

    Таки поведение не меняется, пока не дописал
    && bash
    контейнер не запускается, точнее говоря он запускается, команда выполняется и тут же завершается работа

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 12:59, спустя 12 минут 35 секунд

    @AlexB, так а что у тебя в команде то? :)

    Спустя 253 сек.

    Docker run reference [docs.docker.com]

    Спустя 18 сек.

    покажи

    docker history $ContanerName$

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 14:57, спустя 1 час 58 минут 5 секунд

    becker@lenovo ~/projects/production/toolbox/docker/backend $ docker history se/backend
    IMAGE CREATED CREATED BY SIZE COMMENT
    173e87fed23e About a minute ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
    4de4fd3745a7 About a minute ago /bin/sh -c #(nop) ENTRYPOINT &{["/bin/sh" "-c 0 B
    2cea461abacf 5 hours ago /bin/sh -c #(nop) ADD dir:3dc13dbf33eb65bcafa 7.734 kB
    f4f0bd9eb4ab 10 hours ago /bin/sh -c #(nop) WORKDIR /projects/ 0 B

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 15:12, спустя 14 минут 45 секунд

    @AlexB, выывод сожрал, лучше тогда просто докерфайл )))))) Чот я натупил спросить очевидное :)

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 15:22, спустя 9 минут 35 секунд

    Да вот такой минимальный файл сделал, чтобы отсечь лишнее, эффект все равно есть:

    
    FROM ubuntu
    
    RUN apt-get update
    RUN apt-get install -y nginx
    ENTRYPOINT service nginx start && bash
    
    EXPOSE 80
    

    Если убрать && bash то не запускается

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 15:24, спустя 2 минуты 24 секунды

    @AlexB, я так понимаю что тебе нужен nginx в foreground режиме, это можно сделать не так убого как ты сделал )))))

    Вот так это делается

    nginx -g "daemon off;"

    Спустя 35 сек.

    ну и эту команду наверное лучше вписать в CMD, зачем она тебе в entrypoint? может ты еще чтото захочешь в контейнере запускать, переопределять CMD зачастую удобнее

    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 15:36, спустя 11 минут 42 секунды

    Не, мне просто нужно, чтобы при запуске контейнера демон нжинкса сам стартовал

    что правильней CMD или ENTRYPOINT я еще до конца не осмыслил, но эффект одинаковый в обоих случаях

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 октября 2016 г. 15:37, спустя 1 минуту 11 секунд

    Не мне просто нужно, чтобы при запуске контейнера демон нжинкса сам стартовал

    @AlexB, тебе это нужно не в 100% случаев, I am sure :)

    а если ты думаешь иначе то ты еще не до конца понял как работают с контейнерами )))

    Спустя 61 сек.

    контейнер это не exe файл, это архив в котором может быть исполняемый файл, а можно запускать что хочешь. я уже давно не практикю контейнер под задачу, обычно один контейнер выполняет больше 1 задачи, а конфигурированием задач всей системы занимается docker-compose

    Спустя 32 сек.

    и вот в нем то уже и прописаны настоящие роли того или иного сервиса на основании контейнера. хотя может у тебя хостинг конечно не позволяет переопределять команды и тп, тут тогда да, без вариантов :)

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!