Как запустить докер контейнер linux
Перейти к содержимому

Как запустить докер контейнер linux

  • автор:

Запуск контейнера Docker на Linux

Клиент Docker предназначен для облегчения управления приложениями внутри контейнеров. Так, он дает пользователю возможность отдельно запускать программы в процессах с изолированными ресурсами. Это напоминает работу в виртуальных машинах, однако контейнеры отличаются более низкой требовательностью к ресурсам, высокой портируемостью и большей зависимостью от операционной системы.

Процесс установки Docker

Чтобы выполнить запуск контейнера, понадобится иметь под рукой настроенный сервер с установленным дистрибутивом Linux. В операционной системе необходимо создать обычного пользователя (не root) и установить фаервол.

Работу с Docker рассмотрим на примере Ubuntu, который является одним из наиболее популярных дистрибутивов для сервера.

Заранее стоит отметить, что в репозитории Ubuntu не всегда предлагается последняя версия Docker. Поэтому этот сервис предпочтительнее устанавливать непосредственно из его официального репозитория. Соответственно, следует добавить в систему новый репозиторий, ввести ключ GPG для проверки действительности скачиваемой версии и лишь затем приступать к установке.

Как запустить Docker контейнер на Linux

Работа с командой Docker без прав суперпользователя

В дефолтных настройках предусмотрено, что для запуска Docker необходимо иметь права root-пользователя или пользователя из группы docker, создаваемой автоматически во время установки сервиса.

Если попробовать запустить в терминале Docker без этих прав или, не являясь пользователем группы docker, появится ситуация, когда не запускается контейнер.
Поэтому если нет желания постоянно набирать sudo перед запуском команды, стоит добавить своего пользователя в указанную выше группу:

Чтобы применить изменения, потребуется выйти с заново войти на сервер. Можно также воспользоваться этой командой:

Продолжить работу можно будет после ввода пароля пользователя. Проверить, что добавление пользователя прошло успешно, можно командой (пользователь sammy):

Как запустить Docker контейнер на Linux

При желании добавить выбранного пользователя в группу, можно указать его имя:

Последующие шаги предполагают, что пользователь уже добавил себя в группу docker. Если нет желания это делать, перед командами необходимо набирать sudo .

Как пользоваться командами Docker

С помощью команды docker можно пользоваться различными опциями, а также командами с аргументами. Ниже показан ее синтаксис:
docker [option] [command] [arguments]
Чтобы ознакомиться со всеми подкомандами, можно набрать следующее:

Как запустить Docker контейнер на Linux

Здесь показан список из Docker 18.

Можно получить информацию по использованию выбранной команды:

Как запустить Docker контейнер на Linux

Для получения полной информации по Docker потребуется ввести следующее:

Как запустить Docker контейнер на Linux

Как работать с образами Docker

Запуск контейнеров выполняется из образов. Изначально Docker берет образы в хабах Docker Hub (реестр образов, поддерживаемый разработчиком). Любой имеет возможность создавать и загружать собственные образы. Так что для большей части дистрибутивов и программ уже имеются необходимые образы в Docker Hub.

Приведенная ниже команда позволяет проверить, есть ли возможность получить доступ и скачивать образы в Docker Hub (на примере образа hello-world):

Этот вывод данных указывает, что Docker работает правильно:

Как запустить Docker контейнер на Linux

Сначала сервис не мог найти образ hello-world на локальной машине, из-за чего ему приходилось загрузить образ в хабе (репозитории по умолчанию). После его скачивания Docker создал отдельный контейнер из образа и уже затем запускал в нем программу контейнере.

Представленные в хабе образы можно найти при помощи команд docker и search. К примеру, найти образ Ubuntu можно следующим образом:

Как запустить Docker контейнер на Linux

Далее скрипт просмотрит содержимое хаба и покажет все образы, соответствующие заданным критериям. В предложенном примере результат будет примерно таков:

Строчка OK в столбце OFFICIAL говорит о том, что образ создан и его поддержка осуществляется компанией, ответственной за этот проект. Выбрав требуемый образ, его можно скачать на компьютер, используя подкоманду pull.

Загрузка официального образа Ubuntu на компьютер выполняется такой командой:

Как запустить Docker контейнер на Linux

По завершении операции отобразится такой результат:

Когда образ будет скачан, станет возможным выполнить запуск контейнера из образа при помощи команды run. На примере hello-world видно, что если после ввода run образ не был скачан, сначала клиент загрузит его и уже запустит контейнер с образом.

Чтобы посмотреть, какие образы были загружены на компьютер, используется команда:

Как запустить Docker контейнер на Linux

Результат будет похожим на следующий:

Ниже можно увидеть, что образы для запуска контейнеров можно менять и использовать при создании других образов. Причем последние можно загрузить в Docker Hub или другие репозитории. Далее будет рассмотрено более подробно, как работать с контейнерами.

Запуск контейнера Docker

Запущенный ранее hello-world представляет собой пример контейнера, который открывается и закрывается после отображения тестового сообщения. При этом контейнеры предназначены для выполнения более полезных задач. Они имеют много общего с виртуальными машинами, однако требуют намного меньше ресурсов для работы.
Можно рассмотреть, как запустить контейнер при помощи последней версии образа Ubuntu. Добавление опций -i и -t предоставляет доступ в интерактивном режиме к командному процессору:

Командная строка изменится, указывая на переход в контейнер, и будет выглядеть таким образом:

Как запустить Docker контейнер на Linux

Следует обратить внимание, что также отображается идентификатор контейнера. Здесь это 2c88170e5391. Он понадобится позже, чтобы сообщить клиенту, какой именно удалить контейнер.

После этого можно запустить любую команду в контейнере. К примеру, можно обновить базу данных пакетов. Для этого нет необходимости пользоваться командой sudo, поскольку работа ведется от имени пользователя с root-правами:

Как запустить Docker контейнер на Linux

Затем появится возможность установки приложений. Рассмотрим пример установки Node.js:

Как запустить Docker контейнер на Linux

Эта команда выполнит установку Node.js в контейнер, используя репозиторий Ubuntu. По завершении установки можно проверить, была ли она успешно выполнена:

Будет показан номер текущей версии Node.js:

Как запустить Docker контейнер на Linux

Проведенные изменения в контейнере распространяются только на него. Завершить работу с контейнером можно командой exit .

Команды для управления контейнерами

Со временем после работы с Docker на локальной машине соберется достаточное количество активных и неактивных контейнеров. Для просмотра запущенных контейнеров применяется команда:

Как запустить Docker контейнер на Linux

Система выведет примерные результаты:

В этой инструкции разбирался запуск двух контейнеров — с образов hello-world и ubuntu. Хотя сейчас они не активные, но уже расположены в системе. Для просмотра находящихся в системе контейнеров нужно запустить docker ps, добавив параметр -a:

Как запустить Docker контейнер на Linux

В терминале отобразится примерный вывод:

Для просмотра последних созданных контейнеров используется опция -l:

Как запустить Docker контейнер на Linux

Чтобы запустить остановленный контейнер, необходимо ввести docker start и далее указать идентификатор или имя контейнера. Так выглядит запуск контейнера 2c88170e5391:

Как запустить Docker контейнер на Linux
Контейнер будет запущен и чтобы просмотреть его статус, используется команда docker ps :
Как запустить Docker контейнер на Linux

Чтобы выключить активный контейнер, используется команда docker stop с последующим указанием его идентификатора или имени. Здесь уже потребуется воспользоваться именем, которое предоставил контейнеру Docker (peaceful_minsky):

Также может потребоваться перезапустить контейнер, не отключая его. Это можно сделать командой:

Отдельного внимания заслуживает запуск контейнера docker compose. Так, после смены настроек в файле docker-compose.yml (например, проброс порта) изменения не выполнятся автоматически. Вдобавок, команда restart также не поможет и потребуется выполнить пересборку контейнера, применив для этого команду build. Другими словами, он будет заново создан. Выполнить операцию можно следующей командой:

После чего отобразится похожий вывод:

Как запустить Docker контейнер на Linux

Потребуется пара секунд, чтобы перезапуск контейнера полностью завершился, хотя в действительности Docker осуществив намного больше операций. То есть, собрал новый образ, создал новый контейнер на его основе, остановил старый, запустил новый и удалил старый.

Когда контейнер уже не нужен для дальнейшей работы, его можно удалить, набрав в терминале docker rm с добавлением его имени или идентификатора. Для поиска этих данных, которые связаны с hello-world, вводится команда:

Как запустить Docker контейнер на Linux

После чего можно приступать к удалению контейнера.

Как запустить Docker контейнер на Linux

Чтобы осуществить запуск нового контейнера с присвоением ему имени, предусмотрена опция —name. Также можно воспользоваться опцией —rm, позволяющей создавать контейнер, который будет автоматически удален после его остановки. Более подробную информацию о данных и других параметрах можно получить после ввода docker run help.

Помимо указанных выше команд из существующих контейнеров можно создавать образы для создания новых. Об этом речь пойдет далее.

Как сохранить изменения в новый образ?

Во время запуска контейнера из существующего образа у пользователя есть возможность создавать или удалять файлы, аналогично работе на виртуальной машине. При этом изменения будут распространяться только в определенном контейнере. Доступна и возможность запуска с последующей остановкой контейнера, но после его удаления с помощью docker rm будут утеряны внесенные изменения.

Соответственно, следует ознакомиться со способом сохранения текущего контейнера как нового образа.

По завершении инсталляции Node.js в контейнере Ubuntu, на компьютере работает загруженный из образа контейнер. При этом он будет отличаться от использованного для его создания образа. В свою очередь, пользователю может понадобиться уже контейнер Node.js, чтобы использовать его при создании для новых образов.

Соответственно, следует сохранить результаты в текущем образе предложенной ниже командой:

Добавление опции -m дает возможность указать сообщение подтверждения. Это позволит будущим пользователям образа понять, что именно было изменено. Что касается параметра -a — с его помощью можно указать, кто его создатель. container_id является тем же идентификатором, который был использован ранее, во время запуска интерактивной сессии в Docker.

Если вы не занимались до этого созданием новых репозиториев в Docker Hub, имя создаваемого репозитория по умолчанию будет названо именем вашего пользователя в Docker Hub.

К примеру, с именем пользователя admin и идентификатором 2c8ec46adae1 команда должна иметь следующий вид:

Как запустить Docker контейнер на Linux

После того, как образ будет подтвержден (commit) он сохраняется на компьютере локально. Далее будет рассмотрен пример его отправки в репозиторий Docker, чтобы он стал доступным и для других пользователей. Если же посмотреть список образов по завершении этой операции, в нем будет добавлен новый образ, причем исходный также останется на месте:

Как запустить Docker контейнер на Linux

Ниже показан примерный результат проверки:

В предложенном выводе ubuntu-nodejs является созданным образом на базе уже имеющегося ubuntu, загруженного в Docker Hub. Проведенные изменения можно увидеть по тому, насколько изменился размер образа. Поскольку изменение касалось только инсталляции NodeJS, при необходимости запуска Ubuntu с этим предустановленным приложением, можно воспользоваться созданным образом.

Остается отправить свой образ в репозиторий, чтобы остальные пользователи имели возможность создать контейнеры на его базе.

Отправка контейнеров в реестр

Завершающий этап — сохранение созданных образов в базу Docker Hub или другой репозиторий, откуда их может скачать любой желающий. Чтобы получить такую возможность, предварительно нужно создать аккаунт.

Отправка образов в репозиторий начинается с авторизации на Docker Hub.

Чтобы вход был успешно осуществлен, потребуется ввести пароль Docker Hub. Если он правильный, авторизация пройдет успешно.

Здесь важно знать, что если в реестре Docker имя пользователя отличается от локального, используемого при создании образа, обязательно нужно привязать этот образ к имени учетной записи в хабе. На примере контейнера с NodeJS команда привязки будет выглядеть так:

После чего можно приступать к загрузке образа на сервер:

Что касается разбираемого примера ubuntu-nodejs, для отправки его в реестр sammy следует ввести эту команду:

Загрузка образа может занять время. Когда образ будет находиться в репозитории, его название появится в списке, открываемом в панели управления вашего аккаунта.
В таком случае необходимо снова попытаться сделать вход с использованием docker login и загрузить образ. Наконец, остается проверить, что он был добавлен успешно. Затем можно набрать в терминале docker pull admin/ubuntu-nodejs, чтобы воспользоваться образом на новой машине и пользоваться им при создании новых контейнеров.

Автозагрузка контейнеров

Часто встречается ситуация, когда контейнеры останавливаются вследствие определенных факторов. Простейший пример – произошла перезагрузка сервера. Чтобы избавиться от необходимости вручную запускать их, можно настроить автозапуск контейнеров. Для этого следует создать текстовые файлы со специальным форматом для сервиса systemcmd. Рассмотрим пример их создания на примере контейнера my-db, введя в терминал команду:

В пустой файл необходимо добавить следующий код и сохранить его:

После этого остается перезапустить демон systemcmd и включить автозагрузку контейнера mydb, набрав в терминале поочередно команды:

How to Create a Docker Container: Master Docker Image Compartments

Running applications on different operating systems might seem challenging at first. However, Docker makes this process easy.

With its convenient containerization technology, users can deploy numerous applications or services on systems such as virtual private servers (VPS) or dedicated machines without further issues.

Additionally, unlike virtual machines, Docker is much more lightweight, easier to deploy, and performs better.

In this tutorial, we will show you how to create a Docker container alongside all the necessary configurations.

What Is a Docker Container

Docker is among the most popular open-source container-based tools. It is used to run instances of Docker images since these create a new Docker container.

In other words, images can be considered as a template that can be used to create containers. They contain information about what’s required to develop and run a container. Another excellent image feature is that multiple images can be stored locally or remotely.

What Is Docker Hub

To make image sharing easier, Docker came up with a streamlined image-sharing platform – Docker Hub. Here users can easily share, upload and manage their images.

No matter the operating system you use, whether it’s Ubuntu on a virtual instance or Windows, users will still be able to find popular images like MySQL or WordPress on Docker Hub.

Users can always pick the paid version of Docker Hub if the free version proves to be lacking. It offers more robust features, vulnerability scans, and concurrent builds.

What Is a Dockerfile

Docker images instruct the server on the exact requirements for creating a Docker container. On the other hand, a Docker file is an actual text file containing all the commands needed to assemble a container image. If a user wishes to create an image, they would need to create a Dockerfile with all the required commands for the server.

How to Create a Docker Container

In this tutorial, we will use the Ubuntu 20.04 virtual private server and assume you already have Docker installed. Therefore, start by accessing your VPS via SSH.

To list all Dockers images on your system, you can use the following command:

If you want to display additional information, enter the following command in the command line:

We don’t have any Docker images on our system, so let’s pull a new one first.

To do that, first, go to the Docker Hub. Here you will find thousands of Docker base images.

In this example, we will pull a MySQL image. Note that you can browse each image’s page to see more details about the image.

The view of Docker hub. Main archive where users can find Docker containers

You can pull the new image to the current directory with the command:

Pro Tip

It’s possible to replace “image name or image id” with hundreds of images found on Docker Hub like CentOS, redis, mariaDB, Python, etc.

Using the -q option will list only numeric IDs of images available on your system:

-f is the filter flag. If you want to list all images that are not dangling (tagged or referenced by a new container), use the following command in the command line:

Now that you know how to pull and locate an image to start a Docker container, it’s time to run it. By running an image, you will create a container out of that image.

To start a Docker container, use the docker run command:

We will run the MySQL image. As such, the command will be:

Our container is created but not started. To start it, use this command via the command prompt:

Here –name MyContainer is how we wish to call the running process, while -it mysql bash names which container we are running.

Now, open another terminal window. SSH into the server, and run the Docker ps command:

As you can see, the container named MyContainer is now running. To stop the container, issue the following command:

If you wish to see the top process of a container, we can run this command:

MyContainer represents your container name.

The terminal window shows information about currently running container

To see additional stats, such as container ID, CPU utilization, or memory usage, use this command:

Lastly, if you need to terminate a Docker container, use the following:

That’s all there is to it – our Docker container is now ready to use

How to Start and Stop a Docker Image Container

If you already have existing containers created, you can easily start them by using the following command:

Confirm whether it’s running by opening a new SSH session and running the following command:

With the container running, you can stop it with the following command:

If you wish to terminate all of the containers at the same time, use the following:

Conclusion

Docker is a handy tool for every kind of developer. Its ability to seamlessly test, deploy and develop applications can speed up workflow exponentially.

In this tutorial, we’ve gone through the process of creating a Docker container on a virtual private server running Ubuntu 20.04. We have also covered how to manage already generated containers.

We hope you found this tutorial useful. If you have any further questions or suggestions, leave them in the comments below.

How to Create a Docker Container FAQ

Here are a few frequently asked questions about creating Docker containers.

What Is a Docker Image vs. Container?

Docker images grant a server a set of instructions and requirements on how a Docker container should be generated. On the other hand, a Docker container is a software package that includes everything needed to run an application. In other words, a Docker container results from requirements given by the Docker image.

Can a Docker Image Have Multiple Containers?

A single container is built from one image. That means you won’t be able to create a couple of containers with a single image. However, it is possible to instruct Docker to run multiple images to be built in sequence. It is worth mentioning that the result will still result in a single image.

Can Docker Images Be Edited?

Yes, Docker does provide the functionality to edit or even create your own images via the Dockerfile. To edit an image, you need to delete it first and then edit the Dockerfile, implementing your preferred changes. Lastly, you will only need to recreate the container using the new file.

Author

Ignas takes great satisfaction in helping people tackle even the most complex technical issues. His current goal is to write easy-to-follow articles so that these issues will not happen at all. During his free time, Ignas likes to play video games and fix up things around his house.

DOCKER : RUN

Avishek Roy

A quick guide to docker run command i.e. its usage , various options and examples.

Prerequisite

docker should be installed, up and running.

IF docker != installed

THEN

Follow the link for docker installation on centos/rhel machines.

ELSE

CONTINUE

Overview

docker run in-short is the combination of docker create & start command i.e. it creates a container and then starts it too. Below is docker syntax and a few useful options/tags available.

Syntax

Options

Examples

Running a Nginx container

The last command will spin up a container in the background (detach) i.e. named as ‘webserver’ using the Nginx image and maps port 80(container) to 8888(host). docker will first look for concerning image locally and if not found then we will go for a search on the docker hub.

Now try to access the Nginx URL on your favorite browser, quick & easy, isn’t it!

192.168.99.100 → docker host/IP

8888 → Host Port

If you want to check for docker host IP or other environment details, use docker-machine env command.

2. Ansible setup via docker.

We will go a bit further in our second example where we first create a docker network and then a few containers(in the same network) and finally try to find out if we can connect a container from the other one. Also, we extend our example to set up and install ansible and make a container as a master node and the rest as slave nodes.

A. Create a network

First, create a network i.e. to be used by the following container and our ansible setup.

Our network has now been created and by default its using driver as bridge though it can be customized with — driver option.

B. Create Master and Slave machines.

We going to use the centos image for our master & slave containers. Run below commands to run 3 containers i.e. 1 master node and 2 slave nodes for our ansible setup.

— —cap-add → Add Capabilities to a container

NET_ADMIN → Perform various network-related operations.

Now, as our containers are up and ready so, let’s jump into the master container and roll-on ansible installation. docker exec command is generally used to log in onto a container to run commands or perform various actions.

Login success! now let’s try to ping other nodes(app) from the control node and it should go through well and be validated via a success ping response.

Now let’s quickly install ansible on our master node and also other packages on our container as the same is required for our machine to go onto a full-fledged ride.

C. Install packages on containers

i) control node → ansible & ssh

ii) app nodes → ssh

D. start ssh daemon (on all containers)

Caution : I got an issue while start of sshd service and here is the link to an another blog article that is to be followed to conquer the errors and having the troubleshooting steps.

Запуск контейнера Docker

Технология Docker набирает всё большую популярность среди разработчиков и DevOps-специалистов в наши дни, поскольку позволяет без особого труда настроить различные окружения один раз, а затем воспроизводить их на, казалось бы, совсем не совместимом оборудовании. Но начнём мы наш цикл статей о Docker с азов.

В сегодняшней статье мы поговорим о создании контейнеров и, соответственно, об их запуске. В Docker контейнер представляет собой окружение для выполнения какого-либо одного процесса. Это изолированная среда, в которой есть всё необходимое для выполнения нужного процесса, и нет ничего лишнего. Создание контейнера Docker выполняется в момент его запуска, и эти процессы запускаются с помощью команды docker run. Давайте сначала рассмотрим её синтаксис и опции.

Синтаксис и опции docker run

Синтаксис команды docker run похож на синтаксис других команд Linux и выглядит следующим образом:

$ docker run опции образ команда

Утилите обязательно надо передать образ, на основе которого будет создан контейнер. Образ может быть локальным или указывать на образ, который надо загрузить из сети. Мы рассмотрим это в примерах ниже. Опции позволяют настроить контейнер и параметры его запуска более детально. Сама команда позволяет переопределить программу, которая выполняется после запуска контейнера. Например, выполнив /bin/bash, вы можете подключится к самому контейнеру.

Рассмотрим основные опции утилиты, которые мы будем использовать. Опций очень много, поэтому я не могу перечислить их все:

  • -d — запускает контейнер в фоновом режиме;
  • -t — прикрепляет к контейнеру псевдо-TTY-консоль;
  • -i — выводит в терминал STDIN поток контейнера;
  • —name — имя контейнера, по которому потом можно будет к нему обращаться;
  • —dns — устанавливает DNS-серверы для контейнера;
  • —network — тип сети для контейнера, может принимать такие значения: bridge (используется по умолчанию), none, host. Также можно передать идентификатор сети Docker, к которой надо подключится;
  • —add-host — добавляет строчку в /etc/hosts;
  • —restart — указывает, когда надо перезапускать контейнер. Возможные значения: no, on-failure, always, unless-stopped;
  • —rm — удаляет контейнер после завершения его работы;
  • -m, —memory — количество оперативной памяти, доступное Docker-контейнеру;
  • —memory-swap — объём памяти раздела подкачки, доступный в контейнере;
  • —cpus — количество ядер процессора, доступных в контейнере;
  • —shm-size — размер файла /dev/shm;
  • —device — позволяет монтировать устройства из папки /dev в контейнер;
  • —entrypoint — позволяет переопределить скрипт, который выполняется при запуске контейнера, перед запуском основной команды;
  • —expose — позволяет пробросить несколько портов из контейнера в хост-систему;
  • -P — пробрасывает все порты контейнера в хост-систему;
  • -p — переносит все порты контейнера в хост-систему без смены номера порта;
  • —link — позволяет настроить связь контейнеров Docker;
  • -e — добавляет переменную окружения в контейнер;
  • -v, —volume — позволяет монтировать папки хоста в контейнер;
  • -w — изменяет рабочую директорию контейнера.

Это основные опции, которые мы будем использовать в этой статье, а теперь давайте рассмотрим на примерах, как создать контейнер Docker в Linux.

Создание контейнера Docker

1. Обычный контейнер

Чтобы создать и запустить контейнер с параметрами, заданными в образе по умолчанию, просто запустите команду без параметров. Давайте воспользуемся контейнером hello-world, который как раз для этого и предназначен:

docker run hello-world

После запуска контейнера Docker будет выведено сообщение с приветствием, и процесс в контейнере завершится.

Для поиска уже готовых образов для контейнеров можно использовать веб-сайт DockerHub. Здесь есть образы для большинства дистрибутивов и системных сервисов, таких, как Nginx, Apache, PHP-FPM, PhpMyAdmin и многих других.

Вверху отображается название контейнера, а чуть ниже — доступные версии. При создании контейнера версия записывается через двоеточие. Например, давайте создадим и запустим контейнер с Ubuntu 18.04. Чтобы к контейнеру было легко получить доступ потом, зададим ему имя с помощью опции —name:

docker run —name Ubuntu1804 ubuntu:18.04

2. Подключение к контейнеру

Образ Ubuntu 18.04, на основе которого мы создали контейнер выше, не содержит команды, которая бы постоянно выполнялась, поэтому если вы попытаетесь подключится к нему с помощью команды docker exec, то получите ошибку: You cannot attach to a stopped container, start it first:

docker attach Ubuntu1804

Так происходит потому, что окружение не может работать без основного процесса, для которого и создан контейнер. Пока работает процесс, будет работать и контейнер. Как только процесс завершён, контейнер завершается, и созданный нами ранее контейнер полностью бесполезен. Вы не сможете к нему подключится, потому что он будет падать сразу же после старта, а к упавшему контейнеру подключится нельзя. Его можно удалить:

docker rm Ubuntu1804

А нам надо создать контейнер с командой, которая будет выполняться. Для этого просто передайте команду после имени образа, например /bin/bash. Чтобы контейнер был доступен интерактивно, создавайте его с опциями -i и -t:

docker run -it —name Ubuntu1804 ubuntu:18.04 /bin/bash

Теперь вы в контейнере и можете выполнять действия прямо в изолированном окружении.

3. Переменные окружения

Очень часто для изменения настроек контейнера используются переменные окружения. Вы задаёте какую-нибудь переменную окружения, а затем её значение используется вашей программой в самом контейнере для выполнения различных действий. Для задания переменных окружения используется опция -e. Запуск контейнера Docker:

docker run -it -e «FOO=bar» —name Ubuntu1804_2 ubuntu:18.04 /bin/bash

4. Монтирование папок и хранилищ

Когда вам нужно, чтобы контейнер мог работать с исходными кодами программы или с часто изменяемыми данными, рекомендую сделать специальную настройку — будет неудобно каждый раз копировать информацию в контейнер. Куда проще примонтировать папку хоста в контейнер, и все изменения исходников будут сразу же доступны в контейнере. Это очень удобно. Для монтирования папки следует передать её опции -v. Например, примонтируем папку

/test_docker в контейнер:

docker run -it -v «

/test_docker:/mnt» —name Ubuntu1804_3 ubuntu:18.04 /bin/bash

Хранилища позволяют монтировать в контейнер виртуальный диск, который не удаляется при удалении контейнера. Такое хранилище будет автоматически создано, если передать не существующую папку, а имя для нового хранилища:

docker run -it -v docker_volume:/mnt —rm —name Ubuntu1804_4 ubuntu:18.04 /bin/bash

Напоминаю, что опция —rm удаляет контейнер сразу же после того, как он завершит свою работу. Посмотреть список доступных хранилищ можно командой:

docker volume list

5. Порты контейнера

Если вам нужно получить доступ к какому-либо сервису контейнера по порту, например к веб-интерфейсу, этот порт надо пробросить в хост-систему. Для этого используется опция -p. Давайте установим Nginx и пробросим его порт в хост-систему:

docker run —name Nginx -p 8080:80 -d nginx

6. Связывание контейнеров

Связывание контейнеров позволяет настроить взаимодействие между ними. Связанный контейнер будет доступен по сети по его имени. Соответствующая строчка будет автоматически добавлена в файл /etc/hosts контейнера. Для связывания используется опция —link. Чтобы закрепить знания, полученные выше, давайте создадим контейнер с базой данных MySQL, а затем свяжем его с PhpMyAdmin.

Сначала создаём контейнер MySQL с постоянным хранилищем в /var/lib/mysql. В переменных окружения ему надо передать пароль суперпользователя. Какие переменные окружения ожидает получить контейнер — эту информацию обычно можно найти на странице контейнера на DockerHub. Используйте опцию -d, чтобы контейнер запустился в фоновом режиме:

docker run -v mysql_volume:/var/lib/mysql —name MySQL -e MYSQL_ROOT_PASSWORD=passwd -d mysql:8.0

Затем создаём контейнер с PhpMyAdmin для доступа к этой базе данных и связываем с ним контейнер MySQL под именем db:

docker run —name PhpMyAdmin -d —link MySQL:db -p 8080:80 phpmyadmin/phpmyadmin

Также здесь мы пробрасываем порт 80 в хост-систему, чтобы получить доступ к веб-интерфейсу. Теперь можно проверять в браузере. Всё работает.

7. Сеть для контейнеров

Контейнеры можно не связывать. Если надо объединить три и больше контейнеров между собой, то куда удобнее сразу связать их в одну общую сеть, чем создавать множество подключений для каждого из этих контейнеров. Все объекты в одной сети будут иметь доступ к друг другу по их имени. Сначала необходимо создать сеть:

docker network create -d bridge docker_network

Посмотреть список созданных сетей можно командой:

docker network list

Теперь можно её использовать. Объединим с помощью сети наш MySQL- и PhpMyAdmin-сервера. Для этого надо их остановить и удалить:

docker stop MySQL
docker stop PhpMyAdmin

docker rm MySQL
docker rm PhpMyadmin

docker run -v mysql_volume:/var/lib/mysql —network docker_network —name MySQL -e MYSQL_ROOT_PASSWORD=passwd -d mysql:8.0

А для PhpMyAdmin теперь надо передать хост, на котором расположена база данных в переменной окружения PMA_HOST:

docker run —name PhpMyAdmin -d —network docker_network -e PMA_HOST=MySQL -p 8080:80 phpmyadmin/phpmyadmin

Выводы

В этой статье мы рассмотрели, как запустить контейнер Docker и настроить его параметры. Как видите, Docker может быть очень полезным для быстрого разворачивания рабочих окружений. Но редко для этих целей используют саму команду docker run. Обычно используется инструмент docker-compose. Интересно ли вам прочитать об этом инструменте? Напишите в комментариях!

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *