Как сделать образ 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
слой создается заново, а не рисуется из кэша при построении изображения.