<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Evgeny Kolyakov</title>
    <description>The latest articles on DEV Community by Evgeny Kolyakov (@freaker2k7).</description>
    <link>https://dev.to/freaker2k7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F202903%2F0120d5d3-266d-49ee-8012-dd5c0160c4f1.jpeg</url>
      <title>DEV Community: Evgeny Kolyakov</title>
      <link>https://dev.to/freaker2k7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/freaker2k7"/>
    <language>en</language>
    <item>
      <title>Desktop Fly</title>
      <dc:creator>Evgeny Kolyakov</dc:creator>
      <pubDate>Tue, 15 Sep 2026 15:37:09 +0000</pubDate>
      <link>https://dev.to/freaker2k7/desktop-fly-4hlg</link>
      <guid>https://dev.to/freaker2k7/desktop-fly-4hlg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6zok3fa5hhjq5g1t3qwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6zok3fa5hhjq5g1t3qwa.png" alt="Desktop Fly" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A minimal desktop application for visualizing a fly flying over your desktop and its neuron data using OpenGL. The fly "thinks" in terms of its neuron activity as we stream desktop screenshots and mouse movements into the neural network. The neuron data is taken from male-cns:v1.0 for a male Drosophila (fruit fly) central nervous system 🪰&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/freaker2k7/desktop-fly" rel="noopener noreferrer"&gt;https://github.com/freaker2k7/desktop-fly&lt;/a&gt; [MIT]&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>neuralnetwork</category>
      <category>github</category>
      <category>programming</category>
    </item>
    <item>
      <title>New Redash fork with AI capabilities!</title>
      <dc:creator>Evgeny Kolyakov</dc:creator>
      <pubDate>Thu, 03 Sep 2026 08:03:22 +0000</pubDate>
      <link>https://dev.to/freaker2k7/new-redash-fork-with-ai-capabilities-5bgp</link>
      <guid>https://dev.to/freaker2k7/new-redash-fork-with-ai-capabilities-5bgp</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/freaker2k7/redash" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjlj9qlvusg9mfk63hpw5.png" alt="Redash AI" width="568" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New&lt;/strong&gt; Redash features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data Source Description&lt;/strong&gt;: Help the AI to understand your data better.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text To Query&lt;/strong&gt;: Use AI to generate SQL, NoSQL and other queries from natural language questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto Visualizations&lt;/strong&gt;: Use AI to auto-generate visualizations for questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto Alerts&lt;/strong&gt;: Use AI to generate alert suggestions from your data and queries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name To Dashboard&lt;/strong&gt;: Use AI to generate dashboards from your queries and visualizations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MacOS Support&lt;/strong&gt;: Now it runs on MacOS as well as on Linux.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>database</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>DockerServer - Running docker containers from a remote machine in a simple &amp; a secure way.

</title>
      <dc:creator>Evgeny Kolyakov</dc:creator>
      <pubDate>Sun, 28 Jul 2019 18:51:24 +0000</pubDate>
      <link>https://dev.to/freaker2k7/new-super-lightweight-simple-restful-stateless-server-for-running-docker-containers-on-a-remote-machine-s-in-a-secure-way-40f1</link>
      <guid>https://dev.to/freaker2k7/new-super-lightweight-simple-restful-stateless-server-for-running-docker-containers-on-a-remote-machine-s-in-a-secure-way-40f1</guid>
      <description>&lt;h1&gt;
  
  
  DockerServer
&lt;/h1&gt;

&lt;p&gt;Super lightweight &amp;amp; simple RESTFul stateless server for running &lt;a href="https://docker.com/" rel="noopener noreferrer"&gt;docker&lt;/a&gt; containers on a remote machine(s) in a secure way.&lt;/p&gt;

&lt;center&gt;
  &lt;a href="https://dockerserver.io/" title="DockerServer Logo" rel="noopener noreferrer"&gt;
    &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F14Cypln.png" alt="DockerServer Logo" title="DockerServer Logo"&gt;
  &lt;/a&gt;
&lt;/center&gt;

&lt;p&gt;&lt;a href="https://badge.fury.io/js/docker-server" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbadge.fury.io%2Fjs%2Fdocker-server.svg" alt="npm version"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/docker-server" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fnode%2Fv%2Fdocker-server" alt="node version"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/docker-server" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fnpm%2Fdw%2Fdocker-server.svg" alt="npm downloads"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://gitter.im/freaker2k7-dockerserver/community?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=pr-badge" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbadges.gitter.im%2Ffreaker2k7-dockerserver%2Fcommunity.svg" alt="Gitter"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lgtm.com/projects/g/freaker2k7/dockerserver/alerts/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Flgtm%2Falerts%2Fg%2Ffreaker2k7%2Fdockerserver.svg%3Flogo%3Dlgtm%26logoWidth%3D18" alt="Total alerts"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://lgtm.com/projects/g/freaker2k7/dockerserver/context:javascript" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Flgtm%2Fgrade%2Fjavascript%2Fg%2Ffreaker2k7%2Fdockerserver.svg%3Flogo%3Dlgtm%26logoWidth%3D18" alt="Language grade: JavaScript"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://scrutinizer-ci.com/g/freaker2k7/dockerserver/?branch=master" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fscrutinizer-ci.com%2Fg%2Ffreaker2k7%2Fdockerserver%2Fbadges%2Fquality-score.png%3Fb%3Dmaster" alt="Scrutinizer Code Quality"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://opensource.org/licenses/Apache-2.0" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Flicense-Apache-brightgreen.svg" alt="License"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://bundlephobia.com/result?p=docker-server" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbundlephobia%2Fminzip%2Fdocker-server" alt="Bungle size"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/freaker2k7/dockerserver" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Frepo-size%2Ffreaker2k7%2Fdockerserver" alt="Repo size"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://ci.appveyor.com/project/freaker2k7/dockerserver/branch/master" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fci.appveyor.com%2Fapi%2Fprojects%2Fstatus%2Frwbo4jvqp4032boj%2Fbranch%2Fmaster%3Fsvg%3Dtrue" alt="Build status"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://snyk.io//test/github/freaker2k7/dockerserver" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsnyk.io%2F%2Ftest%2Fgithub%2Ffreaker2k7%2Fdockerserver%2Fbadge.svg%3FtargetFile%3Dpackage.json" alt="Known Vulnerabilities"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://beerpay.io/freaker2k7/dockerserver" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbeerpay.io%2Ffreaker2k7%2Fdockerserver%2Fbadge.svg%3Fstyle%3Dflat" alt="Beerpay"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://liberapay.com/evgy/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.shields.io%2Fliberapay%2Freceives%2Fevgy.svg%3Flogo%3Dliberapay" alt="Liberapay"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;npm i -g docker-server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run -d -p 1717:1717 --restart=always --name=docker-server -v /var/run/docker.sock:/var/run/docker.sock -e "DS_TOKEN=my_secret_token" evgy/dockerserver&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I needed to run a couple of containers on a remote machine and came to these conclusions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes is an overkill !&lt;/li&gt;
&lt;li&gt;docker-machine is also complicated !&lt;/li&gt;
&lt;li&gt;I just want to run a few containers on a remote machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Approach
&lt;/h2&gt;

&lt;p&gt;Built a small REST server with NodeJS, using the &lt;code&gt;express&lt;/code&gt; and &lt;code&gt;docker-cli-js&lt;/code&gt; packages as a base.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Principles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Keep the business logic &lt;strong&gt;simple&lt;/strong&gt;!&lt;/li&gt;
&lt;li&gt;It must be &lt;strong&gt;stateless&lt;/strong&gt;!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt; is (a) present.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Current architecture
&lt;/h3&gt;

&lt;center&gt;
  &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F1LqU37z.png" alt="How things work today"&gt;&lt;br&gt;
  The cluster diagram demonstrates a PUT request.
&lt;/center&gt;

&lt;h4&gt;
  
  
  Notes for the Cluster Mode:
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;*0 - Connection between the load balancer and the docker-server.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;*1 - Save the machine load to a &lt;a href="https://json.org" rel="noopener noreferrer"&gt;JSON&lt;/a&gt; file in a shared folder (among all the machines).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PUT method&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1 - Requests comes to any free (according to the load balancer) node to answer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2 - Get the most free (according to actual cpu-mem ratio) node (from the shared storage).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3 - Resend the current request to that node (or process if it's the current node) and return the answer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For the rest of the methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Resent the current request to all the nodes and return the merged results.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Install DockerServer on the machine that you want to run your containers.&lt;/p&gt;

&lt;p&gt;DockerServer can be run for a single session with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ docker-server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or as a service using &lt;a href="https://pm2.keymetrics.io/" rel="noopener noreferrer"&gt;PM2&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ pm2 start /usr/lib/node_modules/docker-server/pm2.config.js&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and if you want in addition to start it on startup just run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ pm2 startup&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And of-course, as mentioned before, but using params, via docker itself:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ docker run -d -p 1717:1717 --restart=always --name=docker-server -v /var/run/docker.sock:/var/run/docker.sock evgy/dockerserver docker-server --token my_secret_token&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or you can run in &lt;strong&gt;HTTPS&lt;/strong&gt; mode:&lt;/p&gt;

&lt;p&gt;(Note that in this example I'm using &lt;a href="https://letsencrypt.org/" rel="noopener noreferrer"&gt;Let's Encrypt&lt;/a&gt; and I'm using &lt;code&gt;readlink&lt;/code&gt; because these files are symbolic links)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ docker run -d -p 443:1717 --privileged --restart=always --name=docker-server -v /var/run/docker.sock:/var/run/docker.sock &lt;br&gt;
-v $(readlink -f /home/user/letsencrypt/config/live/your-domain.com/cert.pem):/certs/cert.pem:ro &lt;br&gt;
-v $(readlink -f /home/user/letsencrypt/config/live/your-domain.com/chain.pem):/certs/chain.pem:ro &lt;br&gt;
-v $(readlink -f /home/user/letsencrypt/config/live/your-domain.com/privkey.pem):/certs/privkey.pem:ro &lt;br&gt;
evgy/dockerserver docker-server --token my_secret_token --https&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note: The &lt;strong&gt;--privileged&lt;/strong&gt; argument is only needed in order to use the 443 port, because all ports below 1024 are reserved by root.&lt;/p&gt;

&lt;p&gt;Moreover, you can run in a &lt;strong&gt;Cluster mode&lt;/strong&gt; when you have a couple of machines to use:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ docker run -d -p 1717:1717 --privileged --restart=always --name=docker-server -v /var/run/docker.sock:/var/run/docker.sock &lt;br&gt;
-v /some/shared/folder:/my/somewhy/custom/path evgy/dockerserver docker-server --token my_secret_token --cluster --folder /my/somewhy/custom/path&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or simply:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ docker run -d -p 1717:1717 --privileged --restart=always --name=docker-server -v /var/run/docker.sock:/var/run/docker.sock &lt;br&gt;
-v /some/shared/folder:/tmp/docker-server evgy/dockerserver docker-server --token my_secret_token --cluster&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note: &lt;code&gt;/tmp/docker-server&lt;/code&gt; is the default folder so you can easily and safely run it even without docker.&lt;/p&gt;

&lt;p&gt;Now, you can do "remote" docker operation using simple HTTP requests:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;HTTP Method&lt;/th&gt;
    &lt;th&gt;Endpoint&lt;/th&gt;
    &lt;th&gt;Desc.&lt;/th&gt;
    &lt;th&gt;Docker cmd&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;GET&lt;/td&gt;
    &lt;td&gt;/&lt;/td&gt;
    &lt;td&gt;List all the containers&lt;/td&gt;
    &lt;td&gt;docker ps -a&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;GET&lt;/td&gt;
    &lt;td&gt;/:id&lt;/td&gt;
    &lt;td&gt;Show the logs of a specific container&lt;/td&gt;
    &lt;td&gt;docker logs :id&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;PUT&lt;/td&gt;
    &lt;td&gt;/&lt;/td&gt;
    &lt;td&gt;Run a container&lt;/td&gt;
    &lt;td&gt;docker run...&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;POST&lt;/td&gt;
    &lt;td&gt;/:id&lt;/td&gt;
    &lt;td&gt;Execute a command in a container&lt;/td&gt;
    &lt;td&gt;docker exec...&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;DELETE&lt;/td&gt;
    &lt;td&gt;/:id&lt;/td&gt;
    &lt;td&gt;Delete a container with such a name or an ID&lt;/td&gt;
    &lt;td&gt;docker rm -f :id&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Options
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Environment
&lt;/h3&gt;

&lt;p&gt;You can set the following environment variables to configure DockerServer:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;Environment Var.&lt;/th&gt;
    &lt;th&gt;Desc.&lt;/th&gt;
    &lt;th&gt;Default&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;DS_PORT&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;The port on which the DockerServer is running&lt;/td&gt;
    &lt;td&gt;1717&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;DS_TOKEN&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;The secret token for the authorization&lt;/td&gt;
    &lt;td&gt;xxxxxx&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Parameters
&lt;/h3&gt;

&lt;p&gt;Also, you can start DockerServerwith these parameters:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;Param&lt;/th&gt;
    &lt;th&gt;Desc.&lt;/th&gt;
    &lt;th&gt;Default&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--port [num]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;The port on which the DockerServer is running&lt;/td&gt;
    &lt;td&gt;1717&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--token [string]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;The secret token for the authorization&lt;/td&gt;
    &lt;td&gt;xxxxxx&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--low_burst [num]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Max number of requests per minute for Low burst.&lt;/td&gt;
    &lt;td&gt;60&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--mid_burst [num]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Max number of requests per minute for Mid burst.&lt;/td&gt;
    &lt;td&gt;180&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--high_burst [num]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Max number of requests per minute for High burst.&lt;/td&gt;
    &lt;td&gt;300&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--https&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;
      Enable &lt;b&gt;HTTPS&lt;/b&gt; mode.&lt;br&gt;
      For this you must have the following files:&lt;br&gt;
        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a. /certs/cert.pem&lt;br&gt;
        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b. /certs/privkey.pem&lt;br&gt;
        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c. /certs/chain.pem (optional, to support self-signed certs)
    &lt;/td&gt;
    &lt;td&gt;false&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--cluster&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Enable &lt;b&gt;Cluster&lt;/b&gt; mode.&lt;/td&gt;
    &lt;td&gt;false&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--folder [path]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Shared folder between all docker-servers. (Used only in cluster mode)&lt;/td&gt;
    &lt;td&gt;/tmp/docker-server&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--cache_interval [num]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Milliseconds between reads (of all the machines)&lt;/td&gt;
    &lt;td&gt;3000&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--log_lovel [option]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Log level [trace|debug|info|warn|error|fatal]&lt;/td&gt;
    &lt;td&gt;info&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--log_expiry [num]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Time for a log to live in days.&lt;/td&gt;
    &lt;td&gt;14&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--log_max_size [num]&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Max log size in MB&lt;/td&gt;
    &lt;td&gt;25&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--help&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Show he&lt;/td&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;--version&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;Show current version &lt;/td&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  PUT Data
&lt;/h3&gt;

&lt;p&gt;When sending the PUT request, the following parameters are supported:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;Param&lt;/th&gt;
    &lt;th&gt;Desc.&lt;/th&gt;
    &lt;th&gt;Default&lt;/th&gt;
    &lt;th&gt;Docker cmd&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;image&lt;/td&gt;
    &lt;td&gt;The image for the run. (&lt;b&gt;required&lt;/b&gt;)&lt;/td&gt;
    &lt;td&gt;null&lt;/td&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;name&lt;/td&gt;
    &lt;td&gt;The name of the container.&lt;/td&gt;
    &lt;td&gt;uuid4()&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;--name&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;remove&lt;/td&gt;
    &lt;td&gt;Flag to remove the container when it finishes &lt;code&gt;--rm&lt;/code&gt;
&lt;/td&gt;
    &lt;td&gt;false&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;--rm&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;detach&lt;/td&gt;
    &lt;td&gt;Flag to detach the container &lt;code&gt;-d&lt;/code&gt;
&lt;/td&gt;
    &lt;td&gt;false&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ports&lt;/td&gt;
    &lt;td&gt;
&lt;b&gt;Map&lt;/b&gt; of ports to publish.&lt;/td&gt;
    &lt;td&gt;null&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;-p&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;volumes&lt;/td&gt;
    &lt;td&gt;
&lt;b&gt;Map&lt;/b&gt; of volumes to mount.&lt;/td&gt;
    &lt;td&gt;null&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;data&lt;/td&gt;
    &lt;td&gt;CMD to run inside the container.&lt;/td&gt;
    &lt;td&gt;null&lt;/td&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  POST Data
&lt;/h3&gt;

&lt;p&gt;When sending the POST request, the following parameters are supported:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;th&gt;Param&lt;/th&gt;
    &lt;th&gt;Desc.&lt;/th&gt;
    &lt;th&gt;Default&lt;/th&gt;
    &lt;th&gt;Docker cmd&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;data&lt;/td&gt;
    &lt;td&gt;CMD to run inside the container&lt;/td&gt;
    &lt;td&gt;null&lt;/td&gt;
    &lt;td&gt;&amp;nbsp;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;tty&lt;/td&gt;
    &lt;td&gt;Flag to enable TTY mode&lt;/td&gt;
    &lt;td&gt;false&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;interactive&lt;/td&gt;
    &lt;td&gt;Flag to enable interactive mode&lt;/td&gt;
    &lt;td&gt;false&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;-i&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;p&gt;NOTE: In the examples I assumed you're using the default port.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get a list of all the containers:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;$ curl -X GET http://1.2.3.4:1717/ -H 'Authorization: Basic base64EncodedToken'&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run redis on the remote machine:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;$ curl -X PUT http://1.2.3.4:1717/ -H 'Authorization: Basic base64EncodedToken' --data 'name=p-redis&amp;amp;image=redis&amp;amp;ports[1234]=6379'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And/or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ curl -X PUT http://1.2.3.4:1717/ -H 'Authorization: Basic base64EncodedToken' --data 'name=v-redis&amp;amp;image=redis&amp;amp;volumes[/tmp/data]=/data'&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove our created container(s):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;$ curl -X DELETE http://1.2.3.4:1717/p-redis -H 'Authorization: Basic base64EncodedToken'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And/or&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ curl -X DELETE http://1.2.3.4:1717/v-redis -H 'Authorization: Basic base64EncodedToken'&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Changelog
&lt;/h2&gt;

&lt;p&gt;1.8.4 - Edited some docs.&lt;/p&gt;

&lt;p&gt;1.8.2 - Added logger.&lt;/p&gt;

&lt;p&gt;1.8.1 - Cashed reading (in cluster mode) &amp;amp; fixed host issue in results (also in cluster mode).&lt;/p&gt;

&lt;p&gt;1.8.0 - &lt;strong&gt;Stable Cluster mode!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/freaker2k7/dockerserver/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt;See full changelog&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Queue (for heavy loads)&lt;/li&gt;
&lt;li&gt;Autoscaling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;APACHE-2.0 (see the LICENSE files in the repository).&lt;/p&gt;

&lt;h2&gt;
  
  
  Donate
&lt;/h2&gt;

&lt;p&gt;Running dockers is free, but &lt;strong&gt;beer&lt;/strong&gt; is always welcome &lt;a href="https://beerpay.io/freaker2k7/dockerserver" rel="noopener noreferrer"&gt;&lt;br&gt;
  &lt;img alt="Beerpay" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fbeerpay.io%2Ffreaker2k7%2Fdockerserver%2Fbadge.svg%3Fstyle%3Dbeer"&gt;&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
or directly donate to our cause &lt;a href="https://liberapay.com/evgy/donate" rel="noopener noreferrer"&gt;&lt;br&gt;
  &lt;img alt="Donate using Liberapay" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fliberapay.com%2Fassets%2Fwidgets%2Fdonate.svg"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>javascript</category>
      <category>node</category>
    </item>
  </channel>
</rss>
