{"id":738,"date":"2017-12-19T15:35:32","date_gmt":"2017-12-19T14:35:32","guid":{"rendered":"http:\/\/blog.via-internet.de\/?p=738"},"modified":"2022-10-10T16:53:01","modified_gmt":"2022-10-10T14:53:01","slug":"docker-cheatsheet","status":"publish","type":"post","link":"https:\/\/via-internet.de\/blog\/2017\/12\/19\/docker-cheatsheet\/","title":{"rendered":"Docker | Cookbook"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Useful apps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.portainer.io\/installation\/\">portainer.io: MAKING DOCKER MANAGEMENT EASY. Build and manage your Docker environments with ease today.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/wagoodman\/dive\">dive: About\nA tool for exploring each layer in a docker image<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Useful commands<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/ps\/\" target=\"_blank\">docker ps<\/a>\u200a\u2014\u200aLists running containers. <br>Some useful flags include:\u00a0<code>-a<\/code>\u00a0\/\u00a0<code>-all<\/code>\u00a0for all containers (default shows just running) and\u00a0<code>\u2014-quiet<\/code>\u00a0\/<code>-q<\/code>\u00a0to list just their ids (useful for when you want to get all the containers).<\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/pull\/\" target=\"_blank\">docker pull<\/a>\u200a\u2014\u200aMost of your images will be created on top of a base image from the\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/hub.docker.com\/\" target=\"_blank\">Docker Hub<\/a>\u00a0registry.\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/hub.docker.com\/\" target=\"_blank\">Docker Hub<\/a>\u00a0contains many pre-built images that you can\u00a0<code>pull<\/code>\u00a0and try without needing to define and configure your own. To download a particular image, or set of images (i.e., a repository), use\u00a0<code>docker pull<\/code>.<\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/build\/\" target=\"_blank\">docker build<\/a>\u200a\u2014\u200aBuilds Docker images from a Dockerfile and a \u201ccontext\u201d.<br>A build\u2019s context is the set of files located in the specified\u00a0<code>PATH<\/code>\u00a0or\u00a0<code>URL<\/code>. Use the\u00a0<code>-t<\/code>\u00a0flag to label the image, for example\u00a0<code>docker build -t my_container\u00a0.<\/code>\u00a0with the\u00a0<code>.<\/code>\u00a0at the end signalling to build using the currently directory.<\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/run\/\" target=\"_blank\">docker run<\/a>\u200a\u2014\u200aRun a docker container based on an image.<br>You can follow this on with other commands, such as\u00a0<code>-it bash<\/code>\u00a0to then run bash from within the container.\u00a0<br><em>Also see\u00a0<\/em><a rel=\"noreferrer noopener\" href=\"https:\/\/medium.com\/the-code-review\/top-10-docker-run-command-options-you-cant-live-without-a-reference-d256834e86c1\" target=\"_blank\"><em>Top 10 options for docker run\u200a\u2014\u200aa quick reference guide for the CLI command<\/em><\/a><em>.\u00a0<\/em><br><code>docker run my_image -it bash<\/code><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/logs\/\" target=\"_blank\">docker logs\u200a<\/a>\u2014\u200a Display the logs of a container.<br>You must specify a container and can use flags, such as\u00a0<code>--follow<\/code>\u00a0to follow the output in the logs of using the program.\u00a0<br><code>docker logs --follow my_container<\/code><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/volume_ls\/\" target=\"_blank\">docker volume ls<\/a>\u200a\u2014\u200aLists the\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/storage\/volumes\/\" target=\"_blank\">volumes<\/a>,.<br>Volumes are the preferred mechanism for persisting data generated by and used by Docker containers.<\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/rm\/\" target=\"_blank\">docker rm<\/a>\u200a\u2014\u200aRemoves one or more containers.<br><code>docker rm my_container<\/code><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/rmi\/\" target=\"_blank\">docker rmi\u200a<\/a>\u2014\u200aRemoves one or more images.\u00a0<br><code>docker rmi my_image<\/code><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/stop\/\" target=\"_blank\">docker stop<\/a>\u200a\u2014\u200aStops one or more containers.<br><code>docker stop my_container<\/code>stops one container, while\u00a0<code>docker stop $(docker ps -a -q)<\/code>\u00a0stops all running containers. A more direct way is to use\u00a0<code>docker kill my_container<\/code>, which does not attempt to shut down the process gracefully first.<\/li><li>Use them together, for example to clean up all your docker images and containers:<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>kill all running containers with&nbsp;<code>docker kill $(docker ps -q)<\/code><\/li><li>delete all stopped containers with&nbsp;<code>docker rm $(docker ps -a -q)<\/code><\/li><li>delete all images with&nbsp;<code>docker rmi $(docker images -q)<\/code><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Create new container<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Start a new docker image with a given name<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can start a new container by using the run command and specify the desired image&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ docker run -it --name playground ubuntu:17.10 \/bin\/bash\n....\nroot@c106fbb48b20:\/# exit<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">As a result, you are in the container at the bash command line<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Reconnect to image<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ docker attach playground<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Commit changes in container<\/h5>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ docker start playground\n$ docker attach playground\nroot@c106fbb48b20:\/# echo 1.0 >VERSION\nroot@c106fbb48b20:\/# exit\n$ docker commit playground playground:1.0\n$ docker tag playground:1.0 playground:latest\n$ docker images\nREPOSITORY TAG IMAGE ID CREATED SIZE\nplayground 1.0 01703597322b Less than a second ago 94.6MB\nplayground latest 01703597322b Less than a second ago 94.6MB<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Add tools and utilities<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Python<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ apt-get update \n$ apt-get upgrade \n$ apt-get install python3 python3-pip<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Java<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ apt-get install default-jre<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Manage File Shares<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">File shares with Docker Desktop on Mac OS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Configuration is stored under<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">~\/Library\/Group Containers\/group.com.docker\/settings.json<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Monitor Docker Logs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Logs with Docker Desktop on Mac OS<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pred='process matches \".*(ocker|vpnkit).*\" || (process in {\"taskgated-helper\", \"launchservicesd\", \"kernel\"} &amp;&amp; eventMessage contains[c] \"docker\")'<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/usr\/bin\/log stream --style syslog --level=debug --color=always --predicate \"$pred\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Alternative you can run<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/usr\/bin\/log show --style syslog --debug --info --last 1d --predicate \"$pred\" >\/tmp\/logs.txt<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Add Timezone Konfiguration<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ENV TZ 'Europe\/Berlin'\n\nRUN echo $TZ > \/etc\/timezone \nRUN    apt-get install -y tzdata \\\n    &amp;&amp; rm \/etc\/localtime \\\n    &amp;&amp; ln -snf \/usr\/share\/zoneinfo\/$TZ \/etc\/localtime \\\n    &amp;&amp; dpkg-reconfigure -f noninteractive tzdata \\\n    &amp;&amp; apt-get clean<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Install local apps in a docker container<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Install Atom Editor<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Start docker image<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker run -it --name docker-atom -v \/Dockerfiles\/HOME:\/home -e DISPLAY=192.168.99.1:0 ubuntu \/bin\/bash<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Install Atom<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\"># apt-get update\n# apt-get install curl\n# curl -sL https:\/\/deb.nodesource.com\/setup_7.x | bash -\n# apt-get install nodejs\n# node -v\nv7.4.0<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"># apt-get -y install git\n# apt-get -y install software-properties-common<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"># add-apt-repository -y ppa:webupd8team\/atom\n# apt-get update\n# apt-get -y install atom<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"># apt-get install libxss1<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Commit changes &nbsp;and build a image<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\"># docker commit -a \"Docker Tutorial 1.0.0\" -m ionic d378e8647af9 atom:1.0.0\n# docker tag atom:1.0.0 atom:latest<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Links and Resources<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5493\">Docker quick reference guides<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/medium.com\/the-code-review\/run-bash-or-any-command-in-a-docker-container-9a1e7f0ec204\" target=\"_blank\" rel=\"noreferrer noopener\">Run bash or any command in a Docker container<\/a><\/li><li><a href=\"https:\/\/medium.com\/the-code-review\/top-10-docker-run-command-options-you-cant-live-without-a-reference-d256834e86c1\" target=\"_blank\" rel=\"noreferrer noopener\">Top 10 options for docker run\u200a\u2014\u200aa quick reference guide for the CLI command<\/a><\/li><li><a href=\"https:\/\/medium.freecodecamp.org\/dockers-detached-mode-for-beginners-c53095193ee9\" rel=\"noreferrer noopener\" target=\"_blank\">Docker\u2019s detached mode for beginners: How to run containers in the background of your terminal<\/a><\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"1dc7\">Docker in more&nbsp;depth<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/medium.com\/the-code-review\/clean-out-your-docker-images-containers-and-volumes-with-single-commands-b8e38253c271\" target=\"_blank\" rel=\"noreferrer noopener\">Clean out your Docker images, containers and volumes with single commands<\/a><\/li><li><a href=\"https:\/\/medium.freecodecamp.org\/how-i-filter-and-grep-docker-containers-images-and-volumes-and-how-you-can-too-a60e52bf7784\" rel=\"noreferrer noopener\" target=\"_blank\">How I filter and grep Docker containers, images, and volumes, and how you can too<\/a><\/li><li><a href=\"https:\/\/medium.freecodecamp.org\/expose-vs-publish-docker-port-commands-explained-simply-434593dbc9a3\" rel=\"noreferrer noopener\" target=\"_blank\">Expose vs publish: Docker port commands explained simply<\/a><\/li><li><a href=\"https:\/\/medium.com\/the-code-review\/docker-run-vs-exec-deep-dive-into-their-differences-19a1041735a3\" target=\"_blank\" rel=\"noreferrer noopener\">Docker run vs exec: deep-dive into their differences<\/a><\/li><li><a href=\"https:\/\/medium.com\/the-code-review\/how-to-use-entrypoint-with-docker-and-docker-compose-1c2062aa17a2\" target=\"_blank\" rel=\"noreferrer noopener\">How to use Entrypoint with Docker and Docker Compose<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Working with networks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve got a lot of inspiration from <a href=\"https:\/\/github.com\/wsargent\/docker-cheat-sheet#why-docker\">wsargent\/docker-cheat-sheet<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Goal<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We will setup to applications, each in his one container, running on the smae network, so they can communication together.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Setup<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Starting with the default configuration, you will see 4 networks<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker network ls\nNETWORK ID          NAME                DRIVER              SCOPE\n6742a11bff1e        bridge              bridge              local\n3af0a1c9eaac        host                host                local\ne60f68aad9d6        none                null                local<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create a bridged network for running two apps inside: web and database<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker network create -d bridge playground_bridge\nc97a80b449d9b6b28ddffa0a7bd4a7938e0b8261773080ab33ae4b7ab08826b1<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker network ls\nNETWORK ID          NAME                DRIVER              SCOPE\n6742a11bff1e        bridge              bridge              local\n3af0a1c9eaac        host                host                local\ne60f68aad9d6        none                null                local\nc97a80b449d9        playground_bridge   bridge              local<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Start the database application using the bridges network<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker run -d --net=playground_bridge --name playground_db training\/postgres\n88abb9d018c628ed1abe7da0466289846a8342a28b2cbef3305ea5313c46d647<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker inspect --format='{{json .NetworkSettings.Networks}}' playground_db| python -m json.tool\n{\n    \"playground_bridge\": {\n        \"Aliases\": [\n            \"88abb9d018c6\"\n        ],\n        \"DriverOpts\": null,\n        \"EndpointID\": \"9fdfe9baf5b159471a39601779ee451aa555a9a9be72be4472e56bd3fcfd1350\",\n        \"Gateway\": \"172.18.0.1\",\n        \"GlobalIPv6Address\": \"\",\n        \"GlobalIPv6PrefixLen\": 0,\n        \"IPAMConfig\": null,\n        \"IPAddress\": \"172.18.0.2\",\n        \"IPPrefixLen\": 16,\n        \"IPv6Gateway\": \"\",\n        \"Links\": null,\n        \"MacAddress\": \"02:42:ac:12:00:02\",\n        \"NetworkID\": \"c97a80b449d9b6b28ddffa0a7bd4a7938e0b8261773080ab33ae4b7ab08826b1\"\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now, start the web application with the default network (not the playground_bridge used by the database)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker run -d --name playground_web training\/webapp python app.py\n2f31761168d75d10c2f1bffc805fb8963a18529e17c2592c2b279afd9e364e7b<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">They cannot communication, because they are running in different networks:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker exec -it playground_db ifconfig | grep inet\n         inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0\n         inet addr:127.0.0.1 Mask:255.0.0.0\n$ docker exec -it playground_web ifconfig | grep inet\n         inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0\n         inet addr:127.0.0.1 Mask:255.0.0.0<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now check the connectivity. The Web application can reach itself:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker exec -it playground_web ping -c 5 172.17.0.2\nPING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.\n64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.027 ms\n64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.033 ms\n64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.036 ms\n64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.031 ms\n64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.029 ms<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But could not reach the database application (because of the different network):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker exec -it playground_web ping -c 5 172.18.0.2\nPING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.\n\n--- 172.18.0.2 ping statistics ---\n5 packets transmitted, 0 received, 100\n\n\n\n<p class=\"wp-block-paragraph\">To connect both apps together, put them in the same network:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before, they use different networks:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker inspect --format='{{json .NetworkSettings.Networks}}' playground_web | python -m json.tool|grep NetworkID\n        \"NetworkID\": \"6742a11bff1ebcdeaee9151f146a74b1c3d77db95d4931e4e79f48f7d7f491f7\"\n$ docker inspect --format='{{json .NetworkSettings.Networks}}' playground_db | python -m json.tool|grep NetworkID\n        \"NetworkID\": \"c97a80b449d9b6b28ddffa0a7bd4a7938e0b8261773080ab33ae4b7ab08826b1\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Connect Web Application to network playground_bridge:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker network connect playground_bridge playground_web<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;Now, they use the same network:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker inspect --format='{{json .NetworkSettings.Networks}}' playground_web | python -m json.tool|grep NetworkID\n        \"NetworkID\": \"6742a11bff1ebcdeaee9151f146a74b1c3d77db95d4931e4e79f48f7d7f491f7\"\n        \"NetworkID\": \"c97a80b449d9b6b28ddffa0a7bd4a7938e0b8261773080ab33ae4b7ab08826b1\"\n$ docker inspect --format='{{json .NetworkSettings.Networks}}' playground_db | python -m json.tool|grep NetworkID\n        \"NetworkID\": \"c97a80b449d9b6b28ddffa0a7bd4a7938e0b8261773080ab33ae4b7ab08826b1\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And they can communication<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker exec -it playground_web ping -c 5 172.17.0.2\nPING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.\n64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.044 ms\n64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.032 ms\n64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.033 ms\n64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.032 ms\n64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.033 ms\n\n--- 172.17.0.2 ping statistics ---\n5 packets transmitted, 5 received, 0\nrtt min\/avg\/max\/mdev = 0.032\/0.034\/0.044\/0.008 ms\n\n$ docker exec -it playground_web ping -c 5 172.18.0.2\nPING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.\n64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.134 ms\n64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.052 ms\n64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.056 ms\n64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.052 ms\n64 bytes from 172.18.0.2: icmp_seq=5 ttl=64 time=0.053 ms\n\n--- 172.18.0.2 ping statistics ---\n5 packets transmitted, 5 received, 0\nrtt min\/avg\/max\/mdev = 0.052\/0.069\/0.134\/0.033 ms<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Usefull Links<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/blog.docker.com\/2019\/07\/intro-guide-to-dockerfile-best-practices\/\">https:\/\/blog.docker.com\/2019\/07\/intro-guide-to-dockerfile-best-practices\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Useful apps portainer.io: MAKING DOCKER MANAGEMENT EASY. Build and manage your Docker environments with ease today. dive: About A tool for exploring each layer in a docker image Useful commands docker ps\u200a\u2014\u200aLists running containers. Some useful flags include:\u00a0-a\u00a0\/\u00a0-all\u00a0for all containers (default shows just running) and\u00a0\u2014-quiet\u00a0\/-q\u00a0to list just their ids (useful for when you want to get all the containers). docker pull\u200a\u2014\u200aMost of your images will be created on top of a base image from the\u00a0Docker Hub\u00a0registry.\u00a0Docker Hub\u00a0contains many pre-built images that you can\u00a0pull\u00a0and try without needing to define and configure your own. To download a particular image, or set of images [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":137,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[16,22],"tags":[],"class_list":["post-738","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cookbook","category-docker"],"jetpack_featured_media_url":"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2016\/10\/Bildschirmfoto-2016-10-21-um-16.38.00.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/738","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/comments?post=738"}],"version-history":[{"count":2,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/738\/revisions"}],"predecessor-version":[{"id":9240,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/738\/revisions\/9240"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media\/137"}],"wp:attachment":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media?parent=738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/categories?post=738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/tags?post=738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}