Как сделать образ Python Docker действием OpenWhisk?

У меня есть образ Docker, который запускает программу Python. Теперь я хочу запустить этот контейнер как действие OpenWhisk. Как мне это сделать?

Я видел несколько примеров на других языках программирования, а также отличный скелетный подход " черного ящика" в C и Node.js. но я хочу больше узнать о том, как OpenWhisk взаимодействует с контейнером и, если возможно, использовать только Python.

1 ответ

Решение

Сейчас это намного проще (сентябрь 2016 г.), чем в моем предыдущем ответе.

После создания dockerSkeleton каталог с командой $ wsk sdk install docker все, что вам нужно сделать, это отредактировать Dockerfile и убедитесь, что ваш Python (2.7 прямо сейчас) принимает параметры и предоставляет выходные данные в соответствующем формате.

Вот краткое изложение. Я написал это более подробно здесь, на GitHub

Программа

файл test.py (или же whatever_name.py вы будете использовать в вашей редакции Dockerfile ниже.)

  • Убедитесь, что он исполняемый (chmod a+x test.py).
  • Убедитесь, что у него есть Шебанг на первой линии.
  • Убедитесь, что он работает локально.
    • например ./test.py '{"tart":"tarty"}'
      создает словарь JSON:
      {"allparams": {"tart": "tarty", "myparam": "myparam default"}}

    #!/usr/bin/env python

    import sys
    import json

    def main():
      # accept multiple '--param's
      params = json.loads(sys.argv[1])
      # find 'myparam' if supplied on invocation
      myparam = params.get('myparam', 'myparam default')

      # add or update 'myparam' with default or 
      # what we were invoked with as a quoted string
      params['myparam'] = '{}'.format(myparam)

      # output result of this action
      print(json.dumps({ 'allparams' : params}))

    if __name__ == "__main__":
      main()

Dockerfile

Сравните следующее с поставленным Dockerfile взять скрипт Python test.py и готово к созданию образа докера.

Надеемся, что комментарии объясняют различия. Любые активы (файлы данных или модули) в текущем каталоге станут частью изображения, как и любые зависимости Python, перечисленные в requirements.txt

# Dockerfile for Python whisk docker action
FROM openwhisk/dockerskeleton

ENV FLASK_PROXY_PORT 8080

# Install our action's Python dependencies
ADD requirements.txt /action/requirements.txt
RUN cd /action; pip install -r requirements.txt

# Ensure source assets are not drawn from the cache 
# after this date
ENV REFRESHED_AT 2016-09-05T13:59:39Z
# Add all source assets
ADD . /action
# Rename our executable Python action
ADD test.py /action/exec

# Leave CMD as is for Openwhisk
CMD ["/bin/bash", "-c", "cd actionProxy && python -u actionproxy.py"]

Обратите внимание ENV REFRESHED_AT ... который я использовал, чтобы убедиться, что обновленный test.py слой создается заново, а не рисуется из кэша при построении изображения.

Другие вопросы по тегам