Getting Started With Docker and commands – Part 1

Reading Time: 6 minutes

ABOUT DOCKER

Almost overnight, Docker has become the de facto standard that developers and system administrators use for packaging, deploying, and running distributed applications. It provides tools for simplifying DevOps by enabling developers to create templates called images that can be used to create lightweight virtual machines called containers, which include their applications and all of their applications’ dependencies. These lightweight virtual machines can be promoted through testing and production environments where sysadmins deploy and run them.

Docker makes it easier for organizations to automate infrastructure, isolate applications, maintain consistency, and improve resource utilizations.

Similar to the popular version control software Git, Docker has a social aspect, in that developers and sysadmins are able to share their images via Docker Hub.

Docker is an open-source solution that runs natively on Linux but also works on Windows and Mac using a lightweight Linux distribution and VirtualBox. Many tools have also grown up around Docker to make it
easier to manage and orchestrate complex distributed applications.

DOCKER ARCHITECTURE

Docker utilizes a client-server architecture and a remote API to manage and create Docker containers built upon Linux containers. Docker containers are created from Docker images. The relationship between containers and images are analogous to the relationship between objects and classes in object-oriented programming.

Docker Images A recipe or template for creating Docker containers. It includes the steps for installing and running the necessary software.
Docker Container Like a tiny virtual machine that is created from the instructions found within the Docker image originated
Docker Client Command-line utility or other tool that takes advantage of the Docker API (https://docs.docker.com/reference/api/docker_remote_api) to communicate with a Docker daemon
Docker Host A physical or virtual machine that is running a Docker daemon and contains cached images as well as runnable containers created from images
Docker Registry A repository of Docker images that can be used to create Docker containers. Docker Hub (https://hub.docker.com) is the most popular
social example of a Docker repository.
Docker Machine A utility for managing multiple Docker hosts, which can run locally in VirtualBox or remotely in a cloud hosting service such as Amazon Web
Services, Microsoft Azure, or Digital Ocean

GETTING STARTED

INSTALLING DOCKER

For Mac and Windows the installation could not be simpler. All you need to do is download and install the Docker Toolbox found at https://www.docker.com/toolbox. The installer includes the Docker Client, Docker Machine, Compose (Mac only), Kitematic, and VirtualBox.

At the time of this writing, installing Docker on Linux is not as easy. To install Docker on Linux you may have to install some prerequisites; check https://docs.docker.com/ installation for specific instructions. For some distributions there may be packages available using its native package manager. For other distributions you will need to run:

curl -sSL https://get.docker.com/ | sh

Optionally on Linux you can install Docker-Machine as root; to do so, execute the following:

curl -L https://github.com/docker/machine/releases/
↳download/v0.4.0/docker-machine_linux-amd64 > /
↳usr/local/bin/docker-machine
chmod +x /usr/local/bin/docker-machine

If you want to create machines locally, you will also need to install VirtualBox using the instructions found at https://www.virtualbox.org/wiki/Linux_Downloads.

RUNNING A CONTAINER

With Docker installed you are able to begin running containers. If you don’t already have the container you want to run, Docker will download the image necessary to build the container from the Docker Hub, then build and run it.

To run the simple hello-world container to make sure everything is configured properly, run the following commands:

docker run hello-world

Ultimately this command prints a message to standard output explaining all the steps that took place to display the message.

TYPICAL LOCAL WORKFLOW

Docker has a typical workflow that enables you to create images, pull images, publish images, and run containers.

docker TYPICAL LOCAL WORKFLOW

 

The typical Docker workflow involves building an image from a Dockerfile, which has instructions on how to configure a container or pull an image from a Docker Registry such as Docker Hub. With the image in your Docker environment, you are able to run the image, which creates a container as a runtime environment with the operating systems, software, and configurations described by the image. For example, your result could be a container on the Debian operating system running a version of MySQL 5.5, which creates a specific database with users and tables required by your web application. These runnable containers can be started and stopped like starting and stopping a virtual machine or computer. If manual configurations or software installations are made, a container can then be committed to make a new image that can be later used to create containers from it. Finally, when you want to share an image with your team or the world, you can push your images to a Docker registry.

PULL IMAGE FROM DOCKER REGISTRY

The easiest way to get an image is to visit https://hub.docker.com and find an already prepared image to build a container from. There are are many certified official accounts for common software such as MySQL, Node.js, Java, Nginx, or WordPress, but there are also hundreds of thousands of images created by ordinary people as well. If you find an image you want, such as mysql, execute the pull command to download the image.

docker pull mysql

If you don’t already have the image locally, Docker will download the most current version of that image from Docker Hub and cache the image locally. If you don’t want the current image and instead want a specific version, you can also add a tag to identify the desired version.

docker pull mysql:5.5.45

BUILDING IMAGE FROM A DOCKERFILE

If you can’t find what you need or don’t trust the source of an image you find on Docker Hub, you can always create your own images by creating a Dockerfile. Dockerfiles contain instructions for inheriting from an existing image, where you can then add software or customize configurations.

The following is a simple example of what you might find in a file named Dockerfile:

FROM mysql:5.5.45
RUN echo America/New_York | tee /etc/timezone &&
↳dpkg-reconfigure –frontend noninteractive tzdata

This Dockerfile example shows that the image created will inherit from the certified mysql repository (specifically the 5.5.45 version of MySQL). It then runs a Linux command to update the time zone to be Eastern Time.

To build this image from the directory containing the Dockerfile, run the following command:

docker build .

This command will create an unnamed image. You can see it by running the command to list images.

docker images

This displays all the locally cached images, including the ones created using the build command.

REPOSITORY TAG IMAGE ID VIRTUAL SIZE
<none> <none> 4b9b8b27fb42 214.4 MB
mysql 5.5.45 0da0b10c6fd8 213.5 MB

As you can see, the build command created an image with a repository name and tag name of <none>. This tends not to be very helpful, so you can use a –t option to name the image for easier usage:

docker build –t est-mysql .

Listing the images again you can see the image is much clearer.

REPOSITORY TAG IMAGE ID VIRTUAL SIZE
<none> <none> 4b9b8b27fb42 214.4 MB
mysql 5.5.45 0da0b10c6fd8 213.5 MB

There is an alternative option to creating a custom image besides writing a Dockerfile. You can run an existing image with bash access then customize the image manually by installing software or changing configurations. When complete you can run the docker commit command to create an image of the running container. This is not considered a best practice since it is not repeatable or self documenting like using the Dockerfile method.

RUNNING AN IMAGE

To run a Docker image you just need to use the run command followed by a local image name or one found in Docker Hub. Commonly, a Docker image will require some additional environment variables, which can be specified with the -e option. For long-running processes like daemons, you also need to use a –d option. To start the est-mysql image, you would run the following command to configure the MySQL root user’s password, as documented in the Docker Hub mysql repository documentation:

docker run -e MYSQL_ROOT_PASSWORD=root+1 -d est-
↳mysql

To see the running container, you can use the Docker ps command:

docker ps

The ps command lists all the running processes, the image name they were created from, the command that was run, any ports that software are listening on, and the name of the container.

CONTAINER ID          IMAGE                 COMMAND
30645f307114           est-mysql            “/entrypoint.sh mysql”
PORTS                           NAMES
3306/tcp                serene_alen

As you can see from the running processes above, the name of the container is serene_alen. This is an auto-generated name and may be challenging to maintain. So it is considered a best practice to explicitly name the container using the –name option to provide your name at container start up:

docker run –name my-est-mysql -e MYSQL_ROOT_
↳PASSWORD=root+1 -d est-mysql

You will notice from the ps output that the container is listening to port 3306, but that does not mean you are able to use the MySQL command line or MySQL Workbench locally to interact with the database, as that port is only accessible in the secure Docker environment in which it was launched. To make it available outside that environment, you must map ports using the –p option.

docker run –name my-est-mysql -e MYSQL_ROOT_
↳PASSWORD=root+1 -p 3306:3306 -d est-mysql

Now mysql is listening on a port that you can connect to. But you still must know what the IP address is to connect. To determine the IP address you can use the dockermachine ip command to figure it out.

docker-machine ip default

Using default as the machine name, which is the default machine installed with the Docker Toolbox, you will receive the IP address of the machine hosting your docker container. With the IP address, you can now connect to MySQL using your local MySQL command line.

mysql -h 192.168.99.100 -u root -proot+1

That’s all for now, will be follwed on next post.

 

 

1,055 total views, 4 views today

Animesh Niraj

Creative Head at Amazing Workz Studios - The expert at anything was once a beginner, I am that beginner. Reach us at info@amazingworkz.com for any Website, Software, Design, SEO/SEM projects.