Поиск по сайту:

Как устанавливать, запускать и удалять приложения внутри контейнеров Docker - Часть 2


Следуя предыдущей статье о Docker, в этом учебнике будет рассказано, как сохранить контейнер Docker в новый образ, удалить контейнер и запустить веб-сервер Nginx внутри контейнера.

Требования

  • Как установить Docker и запускать контейнеры в CentOS/RHEL 8/7 - Часть 1

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

1. В этом примере мы запустим и сохраним Docker-контейнер на базе Ubuntu, в котором будет установлен сервер Nginx. Но перед тем как зафиксировать любые изменения в контейнере, сначала запустите контейнер с помощью приведённых ниже команд, которые обновляют систему и устанавливают демон Nginx в образ Ubuntu:

# docker run ubuntu bash -c "apt-get -y update" 
# docker run ubuntu bash -c "apt-get -y install nginx" 

Установите Nginx на контейнер Docker с Ubuntu

Если вы получаете ошибку «E: Невозможно найти пакет nginx», то вам нужно подключиться к контейнеру с интерактивным CLI и установить nginx, как показано.

# docker run -it ubuntu bash
# apt install nginx
# exit

2. Затем, после установки пакета Nginx, выполните команду docker ps -l, чтобы получить ID или имя запущенного контейнера.

# docker ps -l

Найти идентификатор и имя контейнера Docker

И примените изменения, выполнив следующую команду:

# docker commit 5976e4ae287c ubuntu-nginx

Здесь 5976e4ae287c представляет собой ID контейнера, а ubuntu-nginx представляет собой имя нового образа, который был сохранен с внесенными изменениями.

Чтобы проверить, был ли новый образ успешно создан, просто выполните команду docker images, и будет показан список всех сохранённых образов.

# docker images

Изменения контейнера Docker

Существует высокая вероятность того, что процесс установки внутри контейнера завершается быстро, что приводит к его неработоспособности (контейнер остановлен). В этом случае команда docker ps не покажет никакого вывода, так как ни один контейнер не запущен.

Чтобы все еще иметь возможность получить ID контейнера, выполните docker ps -a | head -3, чтобы вывести наиболее недавние контейнеры и определить контейнер на основе команды, выполненной для его создания, и состояния завершения работы.

3. В качестве альтернативы, вы можете активно входить в сессии контейнера, выполнив команду docker run -it ubuntu bash и затем выполнить команду apt-get install nginx. Пока команда выполняется, отсоединитесь от контейнера с помощью клавиш Ctrl-p + Ctrl-q, и контейнер будет продолжать работать даже после завершения процесса установки Nginx.

# docker run -it ubuntu bash
# apt-get install nginx

Установите Nginx в контейнер Docker

Затем получите идентификатор работающего контейнера с помощью docker ps и зафиксируйте изменения. После завершения снова войдите в консоль контейнера с помощью docker attach и введите exit, чтобы остановить контейнер.

# docker ps
# docker attach 3378689f2069
# exit

Подключить контейнер Docker

4. Чтобы дополнительно проверить, был ли недавно созданный образ успешно зафиксирован (в этом случае установлен сервис Nginx), выполните следующую команду для создания нового контейнера, который покажет, была ли успешно установлена бинарная версия Nginx:

# docker run ubuntu-nginx whereis nginx

Создать новый контейнер Docker

5. Чтобы удалить контейнер, используйте команду rm с идентификатором или именем контейнера, который можно получить с помощью команды docker ps -a:

# docker ps -a
# sudo docker rm 36488523933a

Удалить контейнер Docker

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

6. В этой части мы сосредоточимся на том, как вы можете запустить и получить доступ к сетевому сервису, такому как веб-сервер Nginx, внутри Docker, используя созданный ранее образ ubuntu-nginx, в котором был установлен демон Nginx.

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

# docker run -it -p 81:80 ubuntu-nginx /bin/bash
# nginx &

Здесь опция -p открывает порт хоста для порта контейнера. В то время как порт хоста может быть произвольным, при условии, что он доступен (никакие другие сервисы на хосте не должны прослушивать его), порт контейнера должен точно соответствовать порту, на котором слушает внутренний демон.

Как только вы подключитесь к сессии контейнера, запустите демон Nginx в фоновом режиме и отсоединитесь от консоли контейнера, нажав комбинацию клавиш Ctrl-p + Ctrl-q.

Запустить Nginx внутри Docker-контейнера

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

# docker ps
OR
# netstat -tlpn 

Просмотр состояния запущенного контейнера Docker

8. Чтобы посетить страницу, обслуживаемую контейнером Nginx, откройте браузер с удалённого устройства в вашей локальной сети и введите IP-адрес вашего компьютера с использованием протокола HTTP.

Проверить работу Nginx в контейнере Docker

9. Чтобы остановить контейнер, выполните следующую команду с указанием ID или имени контейнера:

# docker ps
# docker stop fervent_mccarthy
# docker ps

Остановить контейнер Docker

В качестве альтернативы для остановки запущенного контейнера войдите в командную оболочку контейнера и введите exit для завершения процесса:

# docker attach fervent_mccarthy
# exit

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

Дальнейшее чтение: