{"id":9543,"date":"2016-12-11T10:30:11","date_gmt":"2016-12-11T09:30:11","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/"},"modified":"2016-12-11T10:30:11","modified_gmt":"2016-12-11T09:30:11","slug":"getting-started-with-docker-1-overview-and-installation","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/","title":{"rendered":"Getting started with Docker &#8211; 1 &#8211; overview and installation"},"content":{"rendered":"<p>Everybody is talking about <a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noopener\">Docker<\/a> nowadays. What it is about? Do you remember <a>Solaris Zones or Containers<\/a>? It is more or less the same although development of Docker during the last years made <a href=\"https:\/\/en.wikipedia.org\/wiki\/Linux_containers\" target=\"_blank\" rel=\"noopener\">Linux Containers<\/a> the de-facto standard for deploying applications in a standardized and isolated way. Docker is build in a classical <a href=\"https:\/\/en.wikipedia.org\/wiki\/Client%E2%80%93server_model\" target=\"_blank\" rel=\"noopener\">client server model<\/a>: There is the docker server (or daemon) which servers the requests of docker clients. The client is the one you&#8217;ll use to tell the server what you want to do. The main difference from the classical client\/server model is that docker uses the same binary for the server as well as for the client. It is just a matter of how you invoke the docker binary that makes it a server or client application. In contrast to the Solaris Zones Docker containers are stateless by default, that means: When you shutdown a docker container you&#8217;ll lose everything that was done when the container started to what happened when container got destroyed (Although there are ways to avoid that). This is important to remember. <\/p>\n<p><!--more--><\/p>\n<p>When you start a docker container on a host the host&#8217;s resources are shared with the container (Although you can limit that). It is not like when you fire up a virtual machine (which brings up an instance of a whole operating system) but more like a process that shares resources with the host it is running on. This might be as simple as running a &#8220;wget&#8221; command but it might be as complicated as bringing up a whole infrastructure that serves your service desk. Docker containers should be lightweight. <\/p>\n<p>So what does make docker unique then? It is the concept of a layered filesystem. We&#8217;ll come to that soon. Lets start by installing everything we need to run a docker daemon. As always we&#8217;ll start with as CentOS 7 minimal installation:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[root@centos7 ~]$ cat \/etc\/centos-release\nCentOS Linux release 7.2.1511 (Core) \n[root@centos7 ~]$ \n<\/pre>\n<p>The easiest way to get docker installed is to add the official docker yum repository (for CentOS in this case):<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[root@centos7 ~]$ echo \"[dockerrepo]\nname=Docker Repository\nbaseurl=https:\/\/yum.dockerproject.org\/repo\/main\/centos\/7\/\nenabled=1\ngpgcheck=1\ngpgkey=https:\/\/yum.dockerproject.org\/gpg\" &gt; \/etc\/yum.repos.d\/docker.repo\n<\/pre>\n<p>Working directly as root never is a good idea so lets create a user for that and let this user do everything via sudo ( not a good practice, I know \ud83d\ude42 ):<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[root@centos7 ~]$ groupadd docker\n[root@centos7 ~]$ useradd -g docker docker\n[root@centos7 ~]$ passwd docker\n[root@centos7 ~]$ echo \"docker ALL=(ALL)   NOPASSWD: ALL\" &gt;&gt; \/etc\/sudoers\n[root@centos7 ~]$ su - docker\n[docker@centos7 ~]$ sudo ls\n<\/pre>\n<p>Ready to install:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ sudo yum install docker-engine\n<\/pre>\n<p>This will install the docker engine and these additional packages:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n======================================================================================================================================\n Package                                Arch                   Version                               Repository                  Size\n======================================================================================================================================\nInstalling:\n docker-engine                          x86_64                 1.12.3-1.el7.centos                   dockerrepo                  19 M\nInstalling for dependencies:\n audit-libs-python                      x86_64                 2.4.1-5.el7                           base                        69 k\n checkpolicy                            x86_64                 2.1.12-6.el7                          base                       247 k\n docker-engine-selinux                  noarch                 1.12.3-1.el7.centos                   dockerrepo                  28 k\n libcgroup                              x86_64                 0.41-8.el7                            base                        64 k\n libseccomp                             x86_64                 2.2.1-1.el7                           base                        49 k\n libsemanage-python                     x86_64                 2.1.10-18.el7                         base                        94 k\n libtool-ltdl                           x86_64                 2.4.2-21.el7_2                        updates                     49 k\n policycoreutils-python                 x86_64                 2.2.5-20.el7                          base                       435 k\n python-IPy                             noarch                 0.75-6.el7                            base                        32 k\n setools-libs                           x86_64                 3.3.7-46.el7                          base                       485 k\n\nTransaction Summary\n======================================================================================================================================\n<\/pre>\n<p>Enable the service:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ sudo systemctl enable docker.service\nCreated symlink from \/etc\/systemd\/system\/multi-user.target.wants\/docker.service to \/usr\/lib\/systemd\/system\/docker.service.\n<\/pre>\n<p>Start the service:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ sudo systemctl start docker\n[docker@centos7 ~]$ sudo systemctl status docker\n\u25cf docker.service - Docker Application Container Engine\n   Loaded: loaded (\/usr\/lib\/systemd\/system\/docker.service; enabled; vendor preset: disabled)\n   Active: active (running) since Sat 2016-12-10 12:26:46 CET; 6s ago\n     Docs: https:\/\/docs.docker.com\n Main PID: 2957 (dockerd)\n   Memory: 12.9M\n   CGroup: \/system.slice\/docker.service\n           \u251c\u25002957 \/usr\/bin\/dockerd\n           \u2514\u25002960 docker-containerd -l unix:\/\/\/var\/run\/docker\/libcontainerd\/docker-containerd.sock --shim docker-containerd-shim --...\n\nDec 10 12:26:45 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:45.481380483+01:00\" level=info msg=\"Graph migration to co...conds\"\nDec 10 12:26:45 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:45.481751429+01:00\" level=warning msg=\"mountpoint for pid...found\"\nDec 10 12:26:45 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:45.481751451+01:00\" level=info msg=\"Loading containers: start.\"\nDec 10 12:26:45 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:45.574330143+01:00\" level=info msg=\"Firewalld running: false\"\nDec 10 12:26:45 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:45.822997195+01:00\" level=info msg=\"Default bridge (docke...dress\"\nDec 10 12:26:46 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:46.201798804+01:00\" level=info msg=\"Loading containers: done.\"\nDec 10 12:26:46 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:46.201984648+01:00\" level=info msg=\"Daemon has completed ...ation\"\nDec 10 12:26:46 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:46.202003760+01:00\" level=info msg=\"Docker daemon\" commit...1.12.3\nDec 10 12:26:46 centos7.local dockerd[2957]: time=\"2016-12-10T12:26:46.207416263+01:00\" level=info msg=\"API listen on \/var\/ru....sock\"\nDec 10 12:26:46 centos7.local systemd[1]: Started Docker Application Container Engine.\nHint: Some lines were ellipsized, use -l to show in full.\n<\/pre>\n<p>And we&#8217;re done. Lets check if docker is working as expected:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ sudo docker run --rm hello-world\nUnable to find image 'hello-world:latest' locally\nlatest: Pulling from library\/hello-world\nc04b14da8d14: Pull complete \nDigest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9\nStatus: Downloaded newer image for hello-world:latest\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n 1. The Docker client contacted the Docker daemon.\n 2. The Docker daemon pulled the \"hello-world\" image from the Docker Hub.\n 3. The Docker daemon created a new container from that image which runs the\n    executable that produces the output you are currently reading.\n 4. The Docker daemon streamed that output to the Docker client, which sent it\n    to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n $ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker Hub account:\n https:\/\/hub.docker.com\n\nFor more examples and ideas, visit:\n https:\/\/docs.docker.com\/engine\/userguide\/\n<\/pre>\n<p>What happened here is that we already executed our first docker image: &#8220;hello-world&#8221;. The &#8220;&#8211;rm&#8221; flag tells docker to automatically remove the image once it exits. As the image was not available on our host it was automatically downloaded from the <a href=\"https:\/\/hub.docker.com\/_\/hello-world\/\" target=\"_blank\" rel=\"noopener\">docker hub<\/a>:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\nUnable to find image 'hello-world:latest' locally\nlatest: Pulling from library\/hello-world\nc04b14da8d14: Pull complete \nDigest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9\nStatus: Downloaded newer image for hello-world:latest\n<\/pre>\n<p>You can browse the docker hub for many, many other images using your favorite browser or you can use the command line:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ docker search postgres\nNAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED\npostgres                  The PostgreSQL object-relational database ...   2939                 [OK]       \nkiasaki\/alpine-postgres   PostgreSQL docker image based on Alpine Linux   28                   [OK]\nabevoelker\/postgres       Postgres 9.3 + WAL-E + PL\/V8 and PL\/Python...   10                   [OK]\nonjin\/alpine-postgres     PostgreSQL \/ v9.1 - v9.6 \/ size &lt;  50MB      9                    [OK]\nmacadmins\/postgres        Postgres that accepts remote connections b...   8                    [OK]\njamesbrink\/postgres       Highly configurable PostgreSQL container.       5                    [OK]\neeacms\/postgres           Docker image for PostgreSQL (RelStorage re...   4                    [OK]\ncptactionhank\/postgres                                                    4                    [OK]\nazukiapp\/postgres         Docker image to run PostgreSQL by Azuki - ...   2                    [OK]\nkampka\/postgres           A postgresql image build on top of an arch...   2                    [OK]\nclkao\/postgres-plv8       Docker image for running PLV8 1.4 on Postg...   2                    [OK]\n2020ip\/postgres           Docker image for PostgreSQL with PLV8           1                    [OK]\nsteenzout\/postgres        Steenzout&#039;s docker image packaging for Pos.1                    [OK]\nblacklabelops\/postgres    Postgres Image for Atlassian Applications       1                    [OK]\nbuker\/postgres            postgres                                        0                    [OK]\nkobotoolbox\/postgres      Postgres image for KoBo Toolbox.                0                    [OK]\nvrtsystems\/postgres       PostgreSQL image with added init hooks, bu...   0                    [OK]\ntimbira\/postgres          Postgres  containers                            0                    [OK]\ncoreroller\/postgres       official postgres:9.4 image but it adds 2 ...   0                    [OK]\nlivingdocs\/postgres       Postgres v9.3 with the plv8 extension inst...   0                    [OK]\n1maa\/postgres             PostgreSQL base image                           0                    [OK]\nopencog\/postgres          This is a configured postgres database for...   0                    [OK]\nkhipu\/postgres            postgres with custom uids                       0                    [OK]\ntravix\/postgres           A container to run the PostgreSQL database.     0                    [OK]\nbeorc\/postgres            Ubuntu-based PostgreSQL server                  0                    [OK]\n<\/pre>\n<p>The first one is the <a href=\"\" target=\"_blank\" rel=\"noopener\">official PostgreSQL image<\/a>. How do I run it?<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ docker run -it postgres\nUnable to find image 'postgres:latest' locally\nlatest: Pulling from library\/postgres\n386a066cd84a: Pull complete \ne6dd80b38d38: Pull complete \n9cd706823821: Pull complete \n40c17ac202a9: Pull complete \n7380b383ba3d: Pull complete \n538e418b46ce: Pull complete \nc3b9d41b7758: Pull complete \ndd4f9522dd30: Pull complete \n920e548f9635: Pull complete \n628af7ef2ee5: Pull complete \n004275e6f5b5: Pull complete \nDigest: sha256:e761829c4b5ec27a0798a867e5929049f4cbf243a364c81cad07e4b7ac2df3f1\nStatus: Downloaded newer image for postgres:latest\nThe files belonging to this database system will be owned by user \"postgres\".\nThis user must also own the server process.\n\nThe database cluster will be initialized with locale \"en_US.utf8\".\nThe default database encoding has accordingly been set to \"UTF8\".\nThe default text search configuration will be set to \"english\".\n\nData page checksums are disabled.\n\nfixing permissions on existing directory \/var\/lib\/postgresql\/data ... ok\ncreating subdirectories ... ok\nselecting default max_connections ... 100\nselecting default shared_buffers ... 128MB\nselecting dynamic shared memory implementation ... posix\ncreating configuration files ... ok\nrunning bootstrap script ... ok\nperforming post-bootstrap initialization ... ok\nsyncing data to disk ... ok\n\nWARNING: enabling \"trust\" authentication for local connections\nYou can change this by editing pg_hba.conf or using the option -A, or\n--auth-local and --auth-host, the next time you run initdb.\n\nSuccess. You can now start the database server using:\n\n    pg_ctl -D \/var\/lib\/postgresql\/data -l logfile start\n\n****************************************************\nWARNING: No password has been set for the database.\n         This will allow anyone with access to the\n         Postgres port to access your database. In\n         Docker's default configuration, this is\n         effectively any other container on the same\n         system.\n\n         Use \"-e POSTGRES_PASSWORD=password\" to set\n         it in \"docker run\".\n****************************************************\nwaiting for server to start....LOG:  database system was shut down at 2016-12-10 11:42:01 UTC\nLOG:  MultiXact member wraparound protections are now enabled\nLOG:  database system is ready to accept connections\nLOG:  autovacuum launcher started\n done\nserver started\nALTER ROLE\n\n\n\/docker-entrypoint.sh: ignoring \/docker-entrypoint-initdb.d\/*\n\nwaiting for server to shut down....LOG:  received fast shutdown request\nLOG:  aborting any active transactions\nLOG:  autovacuum launcher shutting down\nLOG:  shutting down\nLOG:  database system is shut down\n done\nserver stopped\n\nPostgreSQL init process complete; ready for start up.\n\nLOG:  database system was shut down at 2016-12-10 11:42:04 UTC\nLOG:  MultiXact member wraparound protections are now enabled\nLOG:  database system is ready to accept connections\nLOG:  autovacuum launcher started\n<\/pre>\n<p>And ready. As with the &#8220;hello:world&#8221; image docker had to download the image as it was not available locally. Once that was done the image was started and new PostgreSQL instance was created automatically. Here you can see what the layered filesystem is about: <\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n386a066cd84a: Pull complete \ne6dd80b38d38: Pull complete \n9cd706823821: Pull complete \n40c17ac202a9: Pull complete \n7380b383ba3d: Pull complete \n538e418b46ce: Pull complete \nc3b9d41b7758: Pull complete \ndd4f9522dd30: Pull complete \n920e548f9635: Pull complete \n628af7ef2ee5: Pull complete \n004275e6f5b5: Pull complete \n<\/pre>\n<p>Each of this lines represents a layered\/stacked filesystem on top of the previous one. This is an important concept because when you change things only the layer that contains the change needs to be rebuild, but not the layers below. In other words you could build an image based on a CentOS 7 image and then deploy your changes on top of that. You deliver that image and some time later you need to make some modifications: The only thing you need to deliver are the modifications you did because the layers below did not change.<\/p>\n<p>You will notice that you cannot type any command when the image was started. As soon as you enter &#8220;CRTL-C&#8221; the container will shutdown (this is because of the &#8220;-it&#8221; switch, which is &#8220;interactive&#8221; and &#8220;pseudo terminal&#8221;):<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n^CLOG:  received fast shutdown request\nLOG:  aborting any active transactions\nLOG:  autovacuum launcher shutting down\nLOG:  shutting down\nLOG:  database system is shut down\n<\/pre>\n<p>Everything what happened inside the container is now gone. The correct way to launch it is:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ docker run --name my-first-postgres -e POSTGRES_PASSWORD=postgres -d postgres\nd51abc52108d3040817474fa8c85ab15020c12cb753515543c2d064143277155\n<\/pre>\n<p>The &#8220;-d&#8221; switch tells docker to detach, so we get back our shell. The magic string dockers returns is the container id:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ docker ps --no-trunc\nCONTAINER ID                                                       IMAGE               COMMAND                            CREATED             STATUS              PORTS               NAMES\nd51abc52108d3040817474fa8c85ab15020c12cb753515543c2d064143277155   postgres            \"\/docker-entrypoint.sh postgres\"   3 minutes ago       Up 3 minutes        5432\/tcp            my-first-postgres\n<\/pre>\n<p>When you want to know what images you have available locally you can ask docker for that:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ docker images \nREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE\npostgres            latest              78e3985acac0        2 days ago          264.7 MB\nhello-world         latest              c54a2cc56cbb        5 months ago        1.848 kB\n<\/pre>\n<p>How do you now connect to the PostgreSQL image?<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ docker run -it --rm --link my-first-postgres:postgres postgres psql -h postgres -U postgres\nPassword for user postgres: \npsql (9.6.1)\nType \"help\" for help.\n\npostgres=# l+\n                                                                   List of databases\n   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   |  Size   | Tablespace |                Description                 \n-----------+----------+----------+------------+------------+-----------------------+---------+------------+--------------------------------------------\n postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |                       | 7063 kB | pg_default | default administrative connection database\n template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c\/postgres          +| 6953 kB | pg_default | unmodifiable empty database\n           |          |          |            |            | postgres=CTc\/postgres |         |            | \n template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c\/postgres          +| 6953 kB | pg_default | default template for new databases\n           |          |          |            |            | postgres=CTc\/postgres |         |            | \n(3 rows)\n<\/pre>\n<p>Or to get bash:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n[docker@centos7 ~]$ docker run -it --rm --link my-first-postgres:postgres postgres bash\nroot@f8c3b3738336:\/$ cat \/etc\/os-release \nPRETTY_NAME=\"Debian GNU\/Linux 8 (jessie)\"\nNAME=\"Debian GNU\/Linux\"\nVERSION_ID=\"8\"\nVERSION=\"8 (jessie)\"\nID=debian\nHOME_URL=\"http:\/\/www.debian.org\/\"\nSUPPORT_URL=\"http:\/\/www.debian.org\/support\"\nBUG_REPORT_URL=\"https:\/\/bugs.debian.org\/\"\n<\/pre>\n<p>Ok, this PostgreSQL image is based on Debian 8. Lets say this is not what I like because I want my PostgreSQL image based on CentOS. This is the topic for the next post: We&#8217;ll build our own CentOS image and get deeper in what the stacked filesystem is about. Once we&#8217;ll have that available we&#8217;ll use that image to build a PostgreSQL image on top of that.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Everybody is talking about Docker nowadays. What it is about? Do you remember Solaris Zones or Containers? It is more or less the same although development of Docker during the last years made Linux Containers the de-facto standard for deploying applications in a standardized and isolated way. Docker is build in a classical client server [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[601,77],"type_dbi":[],"class_list":["post-9543","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-docker","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Getting started with Docker - 1 - overview and installation - dbi Blog<\/title>\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.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting started with Docker - 1 - overview and installation\" \/>\n<meta property=\"og:description\" content=\"Everybody is talking about Docker nowadays. What it is about? Do you remember Solaris Zones or Containers? It is more or less the same although development of Docker during the last years made Linux Containers the de-facto standard for deploying applications in a standardized and isolated way. Docker is build in a classical client server [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-12-11T09:30:11+00:00\" \/>\n<meta name=\"author\" content=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Getting started with Docker &#8211; 1 &#8211; overview and installation\",\"datePublished\":\"2016-12-11T09:30:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/\"},\"wordCount\":800,\"commentCount\":0,\"keywords\":[\"Docker\",\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/\",\"name\":\"Getting started with Docker - 1 - overview and installation - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2016-12-11T09:30:11+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting started with Docker &#8211; 1 &#8211; overview and installation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\/\/x.com\/westermanndanie\"],\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Getting started with Docker - 1 - overview and installation - dbi Blog","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.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/","og_locale":"en_US","og_type":"article","og_title":"Getting started with Docker - 1 - overview and installation","og_description":"Everybody is talking about Docker nowadays. What it is about? Do you remember Solaris Zones or Containers? It is more or less the same although development of Docker during the last years made Linux Containers the de-facto standard for deploying applications in a standardized and isolated way. Docker is build in a classical client server [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/","og_site_name":"dbi Blog","article_published_time":"2016-12-11T09:30:11+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Getting started with Docker &#8211; 1 &#8211; overview and installation","datePublished":"2016-12-11T09:30:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/"},"wordCount":800,"commentCount":0,"keywords":["Docker","PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/","url":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/","name":"Getting started with Docker - 1 - overview and installation - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2016-12-11T09:30:11+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/getting-started-with-docker-1-overview-and-installation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting started with Docker &#8211; 1 &#8211; overview and installation"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=9543"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/9543\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=9543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=9543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=9543"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=9543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}