Docker Simplified: Ένας πρακτικός οδηγός για απόλυτους αρχάριους

Είτε σκοπεύετε να ξεκινήσετε την καριέρα σας στο DevOps, είτε είστε ήδη σε αυτό, εάν δεν έχετε καταχωρίσει το Docker στο βιογραφικό σας, είναι αναμφίβολα η ώρα να το σκεφτείτε, καθώς το Docker είναι μια από τις κρίσιμες δεξιότητες για όποιον είναι στην αρένα του DevOps.

Σε αυτήν την ανάρτηση, θα προσπαθήσω το καλύτερό μου για να εξηγήσω τον Docker με τον απλούστερο τρόπο που μπορώ.

Πριν κάνουμε μια βαθιά βουτιά και ξεκινήσουμε να εξερευνούμε το Docker, ας ρίξουμε μια ματιά σε ποια θέματα θα καλύψουμε ως μέρος αυτού του οδηγού για αρχάριους.

  • Τι είναι το Docker;
  • Το πρόβλημα επιλύει το Docker
  • Πλεονεκτήματα και μειονεκτήματα της χρήσης του Docker
  • Βασικά συστατικά του Docker
  • Ορολογία Docker
  • Τι είναι το Docker Hub;
  • Εκδόσεις Docker
  • Εγκατάσταση του Docker
  • Ορισμένες βασικές εντολές Docker για να ξεκινήσετε
  • Τύλιξε

Ας ξεκινήσουμε με την κατανόηση, Τι είναι το Docker;

Με απλά λόγια, το Docker είναι μια πλατφόρμα λογισμικού που απλοποιεί τη διαδικασία δημιουργίας, εκτέλεσης, διαχείρισης και διανομής εφαρμογών. Αυτό το κάνει εικονικοποιώντας το λειτουργικό σύστημα του υπολογιστή στον οποίο είναι εγκατεστημένος και εκτελείται.

Η πρώτη έκδοση του Docker κυκλοφόρησε το 2013.

Το Docker αναπτύσσεται χρησιμοποιώντας τη γλώσσα προγραμματισμού GO.

Κοιτάζοντας το πλούσιο σύνολο λειτουργιών που έχει προσφέρει το Docker, έχει γίνει ευρέως αποδεκτό από μερικούς από τους κορυφαίους οργανισμούς και πανεπιστήμια του κόσμου, όπως η Visa, το PayPal, το Πανεπιστήμιο Cornell και το Πανεπιστήμιο της Ιντιάνα (για να αναφέρουμε μόνο μερικά) για να τρέχουν και να διαχειρίζονται εφαρμογές που χρησιμοποιούν το Docker.

Τώρα ας προσπαθήσουμε να κατανοήσουμε το πρόβλημα και τη λύση που έχει να προσφέρει το Docker

Το πρόβλημα

Ας υποθέσουμε ότι έχετε τρεις διαφορετικές εφαρμογές βασισμένες σε Python που σκοπεύετε να φιλοξενήσετε σε έναν μόνο διακομιστή (ο οποίος θα μπορούσε να είναι είτε μια φυσική είτε μια εικονική μηχανή).

Κάθε μία από αυτές τις εφαρμογές χρησιμοποιεί μια διαφορετική έκδοση του Python, καθώς και τις σχετικές βιβλιοθήκες και εξαρτήσεις, διαφέρουν από τη μία εφαρμογή στην άλλη.

Δεδομένου ότι δεν μπορούμε να έχουμε διαφορετικές εκδόσεις του Python στον ίδιο υπολογιστή, αυτό μας εμποδίζει να φιλοξενήσουμε και τις τρεις εφαρμογές στον ίδιο υπολογιστή.

Η λύση

Ας δούμε πώς θα μπορούσαμε να λύσουμε αυτό το πρόβλημα χωρίς να χρησιμοποιήσουμε το Docker. Σε ένα τέτοιο σενάριο, θα μπορούσαμε να λύσουμε αυτό το πρόβλημα είτε έχοντας τρία φυσικά μηχανήματα είτε ένα μόνο φυσικό μηχάνημα, το οποίο είναι αρκετά ισχυρό για να φιλοξενήσει και να τρέξει τρεις εικονικές μηχανές σε αυτό.

Και οι δύο επιλογές θα μας επέτρεπαν να εγκαταστήσουμε διαφορετικές εκδόσεις του Python σε καθένα από αυτά τα μηχανήματα, μαζί με τις σχετικές εξαρτήσεις τους.

Ανεξάρτητα από τη λύση που επιλέγουμε, το κόστος που σχετίζεται με την προμήθεια και τη συντήρηση του υλικού είναι αρκετά ακριβό.

Τώρα, ας δούμε πώς το Docker θα μπορούσε να είναι μια αποτελεσματική και οικονομικά αποδοτική λύση σε αυτό το πρόβλημα.

Για να το καταλάβουμε αυτό, πρέπει να ρίξουμε μια ματιά στον τρόπο λειτουργίας του Docker.

Το μηχάνημα στο οποίο είναι εγκατεστημένο και λειτουργεί το Docker αναφέρεται συνήθως ως Docker Host ή Host με απλούς όρους.

Έτσι, όποτε σκοπεύετε να αναπτύξετε μια εφαρμογή στον κεντρικό υπολογιστή, θα δημιουργούσε μια λογική οντότητα για να φιλοξενήσει αυτήν την εφαρμογή. Στην ορολογία του Docker, ονομάζουμε αυτήν τη λογική οντότητα Container ή Docker Container για να είμαστε πιο ακριβείς.

Ένα Docker Container δεν έχει εγκατεστημένο και να λειτουργεί κανένα λειτουργικό σύστημα. Αλλά θα είχε ένα εικονικό αντίγραφο του πίνακα διεργασιών, των διασυνδέσεων δικτύου και των σημείων προσάρτησης του συστήματος αρχείων. Αυτά κληρονομήθηκαν από το λειτουργικό σύστημα του κεντρικού υπολογιστή στον οποίο φιλοξενείται και λειτουργεί το κοντέινερ.

Ενώ ο πυρήνας του λειτουργικού συστήματος του κεντρικού υπολογιστή είναι κοινόχρηστος σε όλα τα κοντέινερ που εκτελούνται σε αυτόν.

Αυτό επιτρέπει σε κάθε κοντέινερ να απομονωθεί από το άλλο που υπάρχει στον ίδιο κεντρικό υπολογιστή. Έτσι υποστηρίζει πολλαπλά κοντέινερ με διαφορετικές απαιτήσεις εφαρμογής και εξαρτήσεις για εκτέλεση στον ίδιο κεντρικό υπολογιστή, αρκεί να έχουν τις ίδιες απαιτήσεις λειτουργικού συστήματος.

Για να καταλάβετε πώς το Docker ήταν επωφελές για την επίλυση αυτού του προβλήματος, πρέπει να ανατρέξετε στην επόμενη ενότητα, η οποία περιγράφει τα πλεονεκτήματα και τα μειονεκτήματα της χρήσης του Docker.

Εν ολίγοις, το Docker θα εικονικοποιούσε το λειτουργικό σύστημα του κεντρικού υπολογιστή στον οποίο είναι εγκατεστημένο και εκτελείται, αντί να εικονικοποιεί τα στοιχεία υλικού.

Τα πλεονεκτήματα και τα μειονεκτήματα της χρήσης του Docker

Πλεονεκτήματα της χρήσης του Docker

Μερικά από τα βασικά οφέλη από τη χρήση του Docker παρατίθενται παρακάτω:

  • Το Docker υποστηρίζει πολλαπλές εφαρμογές με διαφορετικές απαιτήσεις εφαρμογής και εξαρτήσεις, για να φιλοξενηθούν μαζί στον ίδιο κεντρικό υπολογιστή, αρκεί να έχουν τις ίδιες απαιτήσεις λειτουργικού συστήματος.
  • Βελτιστοποιημένη αποθήκευση. Ένας μεγάλος αριθμός εφαρμογών μπορεί να φιλοξενηθεί στον ίδιο κεντρικό υπολογιστή, καθώς τα κοντέινερ έχουν συνήθως λίγα megabyte σε μέγεθος και καταναλώνουν πολύ λίγο χώρο στο δίσκο.
  • Ευρωστία. Ένα κοντέινερ δεν έχει εγκατεστημένο λειτουργικό σύστημα σε αυτό. Έτσι, καταναλώνει πολύ λίγη μνήμη σε σύγκριση με μια εικονική μηχανή (η οποία θα είχε εγκαταστήσει και θα λειτουργεί ένα πλήρες λειτουργικό σύστημα). Αυτό μειώνει επίσης τον χρόνο εκκίνησης σε λίγα δευτερόλεπτα, σε σύγκριση με μερικά λεπτά που απαιτούνται για την εκκίνηση μιας εικονικής μηχανής.
  • Μειώνει το κόστος. Το Docker είναι λιγότερο απαιτητικό όταν πρόκειται για το υλικό που απαιτείται για την εκτέλεση του.

Μειονεκτήματα της χρήσης του Docker

  • Οι εφαρμογές με διαφορετικές απαιτήσεις λειτουργικού συστήματος δεν μπορούν να φιλοξενηθούν μαζί στο ίδιο Docker Host. Για παράδειγμα, ας υποθέσουμε ότι έχουμε 4 διαφορετικές εφαρμογές, από τις οποίες 3 εφαρμογές απαιτούν λειτουργικό σύστημα που βασίζεται σε Linux και η άλλη εφαρμογή απαιτεί λειτουργικό σύστημα που βασίζεται σε Windows. Σε ένα τέτοιο σενάριο, οι 3 εφαρμογές που απαιτούν λειτουργικό σύστημα που βασίζεται σε Linux μπορούν να φιλοξενηθούν σε ένα Docker Host, ενώ η εφαρμογή που απαιτεί λειτουργικό σύστημα που βασίζεται σε Windows πρέπει να φιλοξενείται σε διαφορετικό Docker Host.

Βασικά συστατικά του Docker

Το Docker Engine είναι ένα από τα βασικά συστατικά του Docker. Είναι υπεύθυνη για τη συνολική λειτουργία της πλατφόρμας Docker.

Το Docker Engine είναι μια εφαρμογή που βασίζεται σε διακομιστή-πελάτη και αποτελείται από 3 κύρια στοιχεία.

  1. Υπηρέτης
  2. API REST
  3. Πελάτης

Ο διακομιστής εκτελεί έναν δαίμονα γνωστό ως dockerd (Docker Daemon) , ο οποίος δεν είναι παρά μια διαδικασία. Είναι υπεύθυνη για τη δημιουργία και διαχείριση Docker Images, Containers, Networks και Volume στην πλατφόρμα Docker.

Το REST API καθορίζει τον τρόπο με τον οποίο οι εφαρμογές μπορούν να αλληλεπιδράσουν με τον διακομιστή και να το καθοδηγήσει να ολοκληρώσει τη δουλειά τους.

Ο Πελάτης δεν είναι παρά μια διεπαφή γραμμής εντολών, που επιτρέπει στους χρήστες να αλληλεπιδρούν με το Docker χρησιμοποιώντας τις εντολές.

Ορολογία Docker

Ας ρίξουμε μια γρήγορη ματιά σε μερικές από τις ορολογίες που σχετίζονται με το Docker.

Docker Images and Docker Containers are the two essential things that you will come across daily while working with Docker.

In simple terms, a Docker Image is a template that contains the application, and all the dependencies required to run that application on Docker.

On the other hand, as stated earlier, a Docker Container is a logical entity. In more precise terms, it is a running instance of the Docker Image.

What is Docker Hub?

Docker Hub is the official online repository where you could find all the Docker Images that are available for us to use.

Docker Hub also allows us to store and distribute our custom images as well if we wish to do so. We could also make them either public or private, based on our requirements.

Please Note: Free users are only allowed to keep one Docker Image as private. If we wish to keep more than one Docker Image as private, we need to subscribe to a paid subscription plan.

Docker Editions

Docker is available in 2 different editions, as listed below:

  • Community Edition (CE)
  • Enterprise Edition (EE)

The Community Edition is suitable for individual developers and small teams. It offers limited functionality, in comparison to the Enterprise Edition.

The Enterprise Edition, on the other hand, is suitable for large teams and for using Docker in production environments.

The Enterprise Edition is further categorized into three different editions, as listed below:

  • Basic Edition
  • Standard Edition
  • Advanced Edition

Installing Docker

One last thing that we need to know before we go ahead and get our hands dirty with Docker is actually to have Docker installed.

Below are the links to the official Docker CE installation guides. You can follow these guides to install Docker on your machine, as they are simple and straightforward.

  • CentOS Linux
  • Debian Linux
  • Fedora Linux
  • Ubuntu Linux
  • Microsoft Windows
  • MacOS

Want to skip installation and head off straight to practicing Docker?

Just in case you are feeling too lazy to install Docker, or you don’t have enough resources available on your computer, you need not have to worry — here’s the solution to your problem.

You can head over to Play with Docker, which is an online playground for Docker. It allows users to practice Docker commands immediately, without having to install anything on your machine. The best part is it’s simple to use and available free of cost.

Docker Commands

Now it’s time to get our hands dirty with Docker commands, for which we all have been waiting till now.

docker create

The first command which we will be looking at is the docker create command.

This command allows us to create a new container.

The syntax for this command is as shown below:

docker create [options] IMAGE [commands] [arguments]

Please Note: Anything enclosed within the square brackets is optional. This is applicable to all the commands that you would see on this guide.

Some of the examples of using this command are shown below:

$ docker create fedora
02576e880a2ccbb4ce5c51032ea3b3bb8316e5b626861fc87d28627c810af03

In the above example, the docker create command would create a new container using the latest Fedora image.

Before creating the container, it will check if the latest official image of the Fedora is available on the Docker Host or not. If the latest image isn’t available on the Docker Host, it will then go ahead and download the Fedora image from the Docker Hub before creating the container. If the Fedora image is already present on the Docker Host, it will make use of that image and create the container.

If the container was created successfully, Docker will return the container ID. For instance, in the above example 02576e880a2ccbb4ce5c51032ea3b3bb8316e5b626861fc87d28627c810af03 is the container ID returned by Docker.

Each container has a unique container ID. We refer to the container using its container ID for performing various operations on the container, such as starting, stopping, restarting, and so on.

Now, let us refer to another example of docker create command, which has options and commands being passed to it.

$ docker create -t -i ubuntu bash
30986b73dc0022dbba81648d9e35e6e866b4356f026e75660460c3474f1ca005

In the above example, the docker create command creates a container using the Ubuntu image (As stated earlier, if the image isn’t available on the Docker Host, it will go ahead and download the latest image from the Docker Hub before creating the container).

The options -t and -i instruct Docker to allocate a terminal to the container so that the user can interact with the container. It also instructs Docker to execute the bash command whenever the container is started.

docker ps

The next command we will look at is the docker ps command.

The docker ps command allows us to view all the containers that are running on the Docker Host.

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES30986b73dc00 ubuntu "bash" 45 minutes ago Up About a minute elated_franklin

It only displays the containers that are presently running on the Docker Host.

If you want to view all the containers that were created on this Docker Host, irrespective of their current status, such as whether they are running or exited, then you would need to include the option -a, which in turn would display all the containers that were created on this Docker Host.

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES30986b73dc00 ubuntu “bash” About an hour ago Up 29 minutes elated_franklin02576e880a2c fedora “/bin/bash” About an hour ago Created hungry_sinoussi

Before we proceed further, let’s try to decode and understand the output of the docker ps command.

CONTAINER ID: A unique string consisting of alpha-numeric characters, associated with each container.

IMAGE: Name of the Docker Image used to create this container.

COMMAND: Any application specific command(s) that needs to be executed when the container is started.

CREATED: This shows the time elapsed since this container has been created.

STATUS: This shows the current status of the container, along with the time elapsed, in its present state.

If the container is running, it will display as Up along with the time period elapsed (for example, Up About an hour or Up 3 minutes).

If the container is stopped, then it will display as Exited followed by the exit status code within round brackets, along with the time period elapsed (for example, Exited (0) 3 weeks ago or Exited (137) 15 seconds ago, where 0 and 137 are the exit codes).

PORTS: This displays any port mappings defined for the container.

NAMES: Apart from the CONTAINER ID, each container is also assigned a unique name. We can refer to a container either using its container ID or its unique name. Docker automatically assigns a unique silly name to each container it creates. But if you want to specify your own name to the container, you can do that by including the — — name (double hyphen name) option to the docker create or the docker run (we will look at the docker run command later) command.

I hope this gives you a better understanding of the output of the docker ps command.

docker start

The next command we will look at, is the docker start command.

This command starts any stopped container(s).

The syntax for this command is as shown below:

docker start [options] CONTAINER ID/NAME [CONTAINER ID/NAME…]

We can start a container either by specifying the first few unique characters of its container ID or by specifying its name.

Some of the examples of using this command are shown below:

$ docker start 30986

In the above example, Docker starts the container beginning with the container ID 30986.

$ docker start elated_franklin

Whereas in this example, Docker starts the container named elated_franklin.

docker stop

The next command on the list is the docker stop command.

This command stops any running container(s).

The syntax for this command is as shown below:

docker stop [options] CONTAINER ID/NAME [CONTAINER ID/NAME…]

It is similar to the docker start command.

We can stop the container either by specifying the first few unique characters of its container ID or by specifying its name.

Some of the examples of using this command are shown below:

$ docker stop 30986

In the above example, Docker will stop the container beginning with the container ID 30986.

$ docker stop elated_franklin

Whereas in this example, Docker will stop the container named elated_franklin.

docker restart

The next command we will look at is the docker restart command.

This command restarts any running container(s).

The syntax for this command is as shown below:

docker restart [options] CONTAINER ID/NAME [CONTAINER ID/NAME…]

We can restart the container either by specifying the first few unique characters of its container ID or by specifying its name.

Some of the examples of using this command are shown below:

$ docker restart 30986

In the above example, Docker will restart the container beginning with the container ID 30986.

$ docker restart elated_franklin

Whereas in this example, Docker will restart the container named elated_franklin.

docker run

The next command we will be looking at is the docker run command.

This command first creates the container, and then it starts the container. In short, this command is a combination of the docker create and the docker start command.

The syntax for this command is as shown below:

docker run [options] IMAGE [commands] [arguments]

It has a syntax similar to that of the docker create command.

Some of the examples of using this command are shown below:

$ docker run ubuntu
30fa018c72682d78cf168626b5e6138bb3b3ae23015c5ec4bbcc2a088e67520

In the above example, Docker will create the container using the latest Ubuntu image and then immediately start the container.

If we execute the above command, it would start the container and immediately stop it — we wouldn’t get any chance to interact with the container at all.

If we want to interact with the container, then we need to specify the options: -it (hyphen followed by i and t) to the docker run command presents us with the terminal, using which we could interact with the container by typing in appropriate commands. Below is an example of the same.

$ docker run -it ubuntu
[email protected]:/#

In order to come out of the container, you need to type exit in the terminal.

docker rm

Moving on to the next command — if we want to delete a container, we use the docker rm command.

The syntax for this command is as shown below:

docker rm [options] CONTAINER ID/NAME [CONTAINER ID/NAME...]

Some of the examples of using this command are shown below:

$ docker rm 30fa elated_franklin

In the above example, we are instructing Docker to delete 2 containers within a single command. The first container to be deleted is specified using its container ID, and the second container to be deleted is specified using its name.

Please Note: The containers need to be in a stopped state in order to be deleted.

docker images

docker images is the next command on the list.

This command lists out all the Docker Images that are present on your Docker Host.

$ docker images
REPOSITORY TAG IMAGE CREATED SIZEmysql latest 7bb2586065cd 38 hours ago 477MBhttpd latest 5eace252f2f2 38 hours ago 132MBubuntu 16.04 9361ce633ff1 2 weeks ago 118MBubuntu trusty 390582d83ead 2 weeks ago 188MBfedora latest d09302f77cfc 2 weeks ago 275MBubuntu latest 94e814e2efa8 2 weeks ago 88.9MB

Let us decode the output of the docker images command.

REPOSITORY: This represents the unique name of the Docker Image.

TAG: Each image is associated with a unique tag. A tag basically represents a version of the image.

A tag is usually represented either using a word or set of numbers or a combination of alphanumeric characters.

IMAGE ID: A unique string consisting of alpha-numeric characters, associated with each image.

CREATED: This shows the time elapsed since this image has been created.

SIZE: This shows the size of the image.

docker rmi

The next command on the list is the docker rmi command.

The docker rmi command allows us to remove an image(s) from the Docker Host.

The syntax for this command is as shown below:

docker rmi [options] IMAGE NAME/ID [IMAGE NAME/ID...]

Some of the examples of using this command are shown below:

docker rmi mysql

The above command removes the image named mysql from the Docker Host.

docker rmi httpd fedora

The above command removes the images named httpd and fedora from the Docker Host.

docker rmi 94e81

The above command removes the image starting with the image ID 94e81 from the Docker Host.

docker rmi ubuntu:trusty

The above command removes the image named ubuntu, with the tag trusty from the Docker Host.

These were some of the basic Docker commands you will see. There are many more Docker commands to explore.

Wrap-Up

Η κονσερβοποίηση έχει πάρει πρόσφατα την προσοχή που της αξίζει, αν και υπάρχει εδώ και πολύ καιρό. Ορισμένες από τις κορυφαίες εταιρείες τεχνολογίας όπως η Google, οι Υπηρεσίες Ιστού Amazon (AWS), η Intel, η Tesla και η Juniper Networks έχουν τη δική τους προσαρμοσμένη έκδοση των κινητήρων κοντέινερ. Βασιζόμαστε σε μεγάλο βαθμό σε αυτά για τη δημιουργία, την εκτέλεση, τη διαχείριση και τη διανομή των εφαρμογών τους.

Το Docker είναι ένας εξαιρετικά ισχυρός κινητήρας εμπορευματοκιβωτίων και έχει πολλά να προσφέρει όταν πρόκειται για την κατασκευή, τη λειτουργία, τη διαχείριση και τη διανομή των εφαρμογών σας αποτελεσματικά.

Μόλις είδατε τον Docker σε πολύ υψηλό επίπεδο. Υπάρχουν πολλά περισσότερα για να μάθετε για το Docker, όπως:

  • Εντολές Docker (Πιο ισχυρές εντολές)
  • Εικόνες Docker (Δημιουργήστε τις δικές σας προσαρμοσμένες εικόνες)
  • Δίκτυο Docker (Ρύθμιση και ρύθμιση παραμέτρων δικτύωσης)
  • Υπηρεσίες Docker (Ομαδοποίηση κοντέινερ που χρησιμοποιούν την ίδια εικόνα)
  • Docker Stack (Grouping services required by an application)
  • Docker Compose (Tool for managing and running multiple containers)
  • Docker Swarm (Grouping and managing one or more machines on which docker is running)
  • And much more…

If you have found Docker to be fascinating, and are interested in learning more about it, then I would recommend that you enroll in the courses which are listed below. I found them to be very informative and straight to the point.

If you are an absolute beginner, then I would suggest you enroll in this course, which has been designed for beginners.

If you have some good knowledge about Docker, and are pretty much confident with the basic stuff and want to expand your knowledge, then I would suggest you should enroll into this course, which is aimed more towards advanced topics related to Docker.

Το Docker είναι μια δεξιοτεχνία μελλοντικής απόδειξης και απλώς αυξάνει την ορμή.

Η επένδυση του χρόνου και των χρημάτων σας στην εκμάθηση του Docker δεν θα ήταν κάτι που θα μετανοούσατε.

Ελπίζω να βρήκατε αυτήν την ανάρτηση ενημερωτική. μη διστάσετε να το μοιραστείτε. Αυτό σημαίνει πολλά για μένα.

Πριν πείτε αντίο…

Ας μείνουμε σε επαφή, κάντε κλικ εδώ για να εισαγάγετε τη διεύθυνση email σας (Χρησιμοποιήστε αυτόν τον σύνδεσμο εάν το παραπάνω widget δεν εμφανίζεται στην οθόνη σας).

Σας ευχαριστώ πολύ που αφιερώσατε τον πολύτιμο χρόνο σας για να διαβάσετε αυτήν την ανάρτηση.

Αποποίηση ευθυνών: Όλα τα ονόματα προϊόντων και εταιρειών είναι εμπορικά σήματα ™ ή σήματα κατατεθέντα® των αντίστοιχων κατόχων τους. Η χρήση τους δεν συνεπάγεται καμία έγκριση από αυτούς. Ενδέχεται να υπάρχουν σύνδεσμοι συνεργατών σε αυτήν την ανάρτηση.