{"id":9471,"date":"2016-04-01T18:54:22","date_gmt":"2016-04-01T15:54:22","guid":{"rendered":"http:\/\/blog.altoros.com\/?p=9471"},"modified":"2019-06-08T04:38:18","modified_gmt":"2019-06-08T01:38:18","slug":"how-to-use-openwhisk-docker-actions-in-ibm-bluemix","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/","title":{"rendered":"How to Use OpenWhisk Docker Actions on IBM Bluemix"},"content":{"rendered":"<p>Microservices are being widely adopted for the development of today&#8217;s apps. The <a href=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/\">OpenWhisk<\/a> platform embraces this approach, providing out-of-the-box-functionality to support JavaScript and Swift. However, if you want to use OpenWhisk for non-JavaScript \/ non-Swift projects or need additional libraries to implement your app&#8217;s events, working with Docker actions seems to be a reasonable choice.<\/p>\n<p>From this tutorial, learn how to create an OpenWhisk Docker action and deploy it to IBM Bluemix OpenWhisk.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#Prerequisites\" >Prerequisites<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#Setting_up_the_OpenWhisk_CLI\" >Setting up the OpenWhisk CLI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#Preparing_a_Docker_image\" >Preparing a Docker image<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#Deploying_a_Docker_image\" >Deploying a Docker image<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#More_on_OpenWhisk_Read_this\" >More on OpenWhisk? Read this:<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Prerequisites\"><\/span>Prerequisites<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To follow this guide, you need:<\/p>\n<ul>\n<li>IBM Bluemix account with <a href=\"https:\/\/www.altoros.com\/blog\/ibm-bluemix-openwhisk-101-developing-a-microservice\/\">OpenWhisk activated<\/a><\/li>\n<li>Local Docker installation<\/li>\n<li>Docker Hub account<\/li>\n<\/ul>\n<p>In the guide, <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">janesmith<\/code> is used as the Docker Hub login and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">janes_password<\/code> as the Docker Hub password.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Setting_up_the_OpenWhisk_CLI\"><\/span>Setting up the OpenWhisk CLI<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>First, install the OpenWhisk CLI from <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">pip<\/code> or your system package manager if it has any.<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/ibm-bluemix-openwhisk-docker.png\" rel=\"attachment wp-att-9477\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/ibm-bluemix-openwhisk-docker.png\" alt=\"ibm-bluemix-openwhisk-docker\" width=\"640\" class=\"aligncenter size-full wp-image-9477\" \/><\/a><\/p>\n<p>For your credentials and installation instructions, sign in to the Bluemix console and see <a href=\"https:\/\/cloud.ibm.com\/functions\/cli\" target=\"_blank\" rel=\"noopener noreferrer\">this page<\/a>.<\/p>\n<p>If you are also working with <a href=\"https:\/\/github.com\/apache\/openwhisk\" target=\"_blank\" rel=\"noopener noreferrer\">OpenWhisk locally<\/a>, remember to set the remote <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">apihost<\/code> property for the Bluemix service: <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">openwhisk.ng.bluemix.net<\/code>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Preparing_a_Docker_image\"><\/span>Preparing a Docker image<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To create a new OpenWhisk Docker action, run:<\/p>\n<pre style=\"padding-left: 30px;\"><code>$ wsk sdk install docker<\/code><\/pre>\n<p>Make sure that you use the Bluemix service because a local installation won\u2019t work. The template project will be located in the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">dockerSkeleton<\/code> folder. It consists of two parts:<\/p>\n<ul>\n<li style=\"margin-bottom: 12px\">A Node.js HTTP server handling interaction with the OpenWhisk service is in the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">server<\/code> folder.<\/li>\n<li>A C program for producing the response is in the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">client<\/code> directory.<\/li>\n<\/ul>\n<p>You can use the provided Node.js server with necessary tuning if required and place all business logic in an external program or rewrite the whole thing using the language of your choice. You can find more \u201cHello, World!\u201d actions featuring different languages at my <a href=\"https:\/\/github.com\/gekola\/openwhisk_docker_samples\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a> account.<\/p>\n<p>Your Docker image has to start a HTTP server handling two requests:<\/p>\n<ul>\n<li style=\"margin-bottom: 12px\">POST <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">\/init<\/code>. The endpoint is called after the container is started and serves the purpose of initializing the action. It is relevant only for language-specific actions where it is used to specify the code to be executed. For Docker actions, you should be OK just always responding with 200.<\/li>\n<li>POST <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">\/run<\/code>. The endpoint is called on action invocation. Parameters are provided in the JSON body under the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">value<\/code> key.<\/li>\n<\/ul>\n<p>The generated Docker skeleton automatically handles HTTP interaction for you. In the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">run<\/code> action, it calls an external program, specifying the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">payload<\/code> parameter value as the only argument, and responds with content written in <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">stdout<\/code> by the program. If the programming language of your choice does not have a lightweight, easy-to-use HTTP server implementation, it makes sense to use the Node.js server from the skeleton app with appropriate modifications if needed.<\/p>\n<p>After you finish preparing your Docker image, build it with this command:<\/p>\n<pre style=\"padding-left: 30px;\"><code>$ docker build -t janesmith\/IMAGE_NAME .<\/code><\/pre>\n<p>Then, you can test your application by running a Docker container in one terminal session with <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">docker run janesmith\/IMAGE_NAME<\/code> and checking it with <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">curl<\/code> in another with:<\/p>\n<pre style=\"padding-left: 30px;\"><code>$ curl -H \"Content-Type: application\/json\" -d '{\"value\":{\"YOUR\":\"PAYLOAD\"}}' DOCKER_HOST:8080\/run<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Deploying_a_Docker_image\"><\/span>Deploying a Docker image<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Now, you have a Docker image that is ready for uploading. To do so, follow these steps:<\/p>\n<ol>\n<li>\n<p>Log in with your Docker Hub credentials:<\/p>\n<pre style=\"padding-left: 30px;\"><code>$ docker login -u janesmith -p janes_password<\/code><\/pre>\n<\/li>\n<li>\n<p>Upload the image to Docker Hub with:<\/p>\n<pre style=\"padding-left: 30px;\"><code>$ docker push janesmith\/IMAGE_NAME<\/code><\/pre>\n<p>where <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">IMAGE_NAME<\/code> is the name of the repository you want to upload your image to.<\/p>\n<p>You might find useful the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">buildAndPush.sh<\/code> script that builds the container in the current directory and pushes it to Docker Hub. Usage:<\/p>\n<pre style=\"padding-left: 30px;\"><code>$ .\/buildAndPush.sh janesmith\/IMAGE_NAME<\/code><\/pre>\n<\/li>\n<li>\n<p>Deploy the image to OpenWhisk with:<\/p>\n<pre style=\"padding-left: 30px;\"><code>$ wsk action update --docker ACTION janesmith\/IMAGE_NAME<\/code><\/pre>\n<p>where <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ACTION<\/code> is the name of the OpenWhisk action that uses the Docker image.<\/p>\n<\/li>\n<\/ol>\n<p>When the Docker image is uploaded to the OpenWhisk server, you can test your action with this command:<\/p>\n<pre style=\"padding-left: 30px;\"><code>$ wsk action invoke -b -r -p PARAM_NAME PARAM_VALUE ACTION<\/code><\/pre>\n<p>where:<\/p>\n<ul>\n<li><code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">PARAM_NAME<\/code> is the name of the parameter, and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">PARAM_VALUE<\/code> is its value.<\/li>\n<li><code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">-b<\/code> makes the invocation blocking, so the result is displayed in the console.<\/li>\n<li><code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">-r<\/code> skips the unnecessary details and shows only the invocation result.<\/li>\n<li><code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">-p<\/code> specifies the parameters to pass to the action.<\/li>\n<\/ul>\n<p>(You can have several <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">-p<\/code> parameters or none at all.)<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"More_on_OpenWhisk_Read_this\"><\/span>More on OpenWhisk? Read this:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/introduction-to-ibm-bluemix-openwhisk\/\">Introduction to IBM Bluemix OpenWhisk<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/ibm-bluemix-openwhisk-101-developing-a-microservice\/\">IBM Bluemix OpenWhisk 101: Developing a Microservice<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<hr\/>\n<p><center><small>The tutorial was created by Nick Herman; edited and published by Victoria Fedzkovich and <a href=\"https:\/\/www.altoros.com\/blog\/author\/alex\/\">Alex Khizhniak<\/a>.<\/small><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microservices are being widely adopted for the development of today&#8217;s apps. The OpenWhisk platform embraces this approach, providing out-of-the-box-functionality to support JavaScript and Swift. However, if you want to use OpenWhisk for non-JavaScript \/ non-Swift projects or need additional libraries to implement your app&#8217;s events, working with Docker actions seems [&#8230;]<\/p>\n","protected":false},"author":78,"featured_media":21700,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[873,570,187,750],"class_list":["post-9471","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cloud-native","tag-containers","tag-ibm-bluemix","tag-openwhisk"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Use OpenWhisk Docker Actions on IBM Bluemix | Altoros<\/title>\n<meta name=\"description\" content=\"Docker actions can help to impement event-driven microservices created with technologies other than JavaScript or Swift.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Use OpenWhisk Docker Actions on IBM Bluemix | Altoros\" \/>\n<meta property=\"og:description\" content=\"Microservices are being widely adopted for the development of today&#8217;s apps. The OpenWhisk platform embraces this approach, providing out-of-the-box-functionality to support JavaScript and Swift. However, if you want to use OpenWhisk for non-JavaScript \/ non-Swift projects or need additional libraries to implement your app&#8217;s events, working with Docker actions seems [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-01T15:54:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-08T01:38:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1113\" \/>\n\t<meta property=\"og:image:height\" content=\"620\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nick Herman\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nick Herman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/\",\"name\":\"How to Use OpenWhisk Docker Actions on IBM Bluemix | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix-1.png\",\"datePublished\":\"2016-04-01T15:54:22+00:00\",\"dateModified\":\"2019-06-08T01:38:18+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/f18d50b9edfbcdc995be899e3edb42ff\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix-1.png\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix-1.png\",\"width\":1113,\"height\":620},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Use OpenWhisk Docker Actions on IBM Bluemix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/f18d50b9edfbcdc995be899e3edb42ff\",\"name\":\"Nick Herman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/328df9f-150x150.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/328df9f-150x150.jpg\",\"caption\":\"Nick Herman\"},\"description\":\"Nick Herman is a software engineer at Altoros. He specializes in web development using Ruby and JavaScript as his primary tools. Nick also has professional interests and expertise in many other areas related to software engineering, including programming languages and cloud technologies. You can find him on GitHub.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/nick-herman\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Use OpenWhisk Docker Actions on IBM Bluemix | Altoros","description":"Docker actions can help to impement event-driven microservices created with technologies other than JavaScript or Swift.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/","og_locale":"en_US","og_type":"article","og_title":"How to Use OpenWhisk Docker Actions on IBM Bluemix | Altoros","og_description":"Microservices are being widely adopted for the development of today&#8217;s apps. The OpenWhisk platform embraces this approach, providing out-of-the-box-functionality to support JavaScript and Swift. However, if you want to use OpenWhisk for non-JavaScript \/ non-Swift projects or need additional libraries to implement your app&#8217;s events, working with Docker actions seems [...]","og_url":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/","og_site_name":"Altoros","article_published_time":"2016-04-01T15:54:22+00:00","article_modified_time":"2019-06-08T01:38:18+00:00","og_image":[{"width":1113,"height":620,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix-1.png","type":"image\/png"}],"author":"Nick Herman","twitter_misc":{"Written by":"Nick Herman","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/","url":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/","name":"How to Use OpenWhisk Docker Actions on IBM Bluemix | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix-1.png","datePublished":"2016-04-01T15:54:22+00:00","dateModified":"2019-06-08T01:38:18+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/f18d50b9edfbcdc995be899e3edb42ff"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix-1.png","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/04\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix-1.png","width":1113,"height":620},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/how-to-use-openwhisk-docker-actions-in-ibm-bluemix\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Use OpenWhisk Docker Actions on IBM Bluemix"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/f18d50b9edfbcdc995be899e3edb42ff","name":"Nick Herman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/328df9f-150x150.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/328df9f-150x150.jpg","caption":"Nick Herman"},"description":"Nick Herman is a software engineer at Altoros. He specializes in web development using Ruby and JavaScript as his primary tools. Nick also has professional interests and expertise in many other areas related to software engineering, including programming languages and cloud technologies. You can find him on GitHub.","url":"https:\/\/www.altoros.com\/blog\/author\/nick-herman\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9471","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=9471"}],"version-history":[{"count":6,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9471\/revisions"}],"predecessor-version":[{"id":44042,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9471\/revisions\/44042"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/21700"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=9471"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=9471"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=9471"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}