Docker

Установка Docker на Ubuntu 20.04 

Docker — это мощная платформа, позволяющая контейнеризировать приложения и последовательно развертывать их в различных средах. Приводим пошаговое руководство по установке Docker на Ubuntu 20.04.

Шаг 1: Обновление репозитория пакетов

Перед установкой Docker рекомендуется обновить репозиторий пакетов, чтобы убедиться в наличии актуальной информации о доступных пакетах. Откройте терминал на машине Ubuntu и выполните команды:

sudo apt update

Шаг 2: Установка необходимых зависимостей

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

sudo apt install apt-transport-https ca-certificates curl software-properties-common

Шаг 3: Добавление репозитория Docker

Docker предоставляет официальный репозиторий APT для Ubuntu. Чтобы добавить его, выполните команды:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg —dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo «deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable» | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Шаг 4: Установка Docker Engine

После добавления репозитория можно установить Docker:

sudo apt update

sudo apt install docker-ce

Шаг 5: Запуск и включение Docker

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

sudo systemctl start docker

sudo systemctl enable docker

Шаг 6: Проверка установки Docker

Убедиться в успешной установке Docker можно, запустив простой контейнер hello-world:

sudo docker run hello-world

Если все настроено правильно, вы увидите вывод, свидетельствующий о корректной работе Docker.

Шаг 7: Управление Docker от имени не root-пользователя (необязательный пункт)

По умолчанию для работы Docker требуются привилегии root. Однако вы можете добавить своего пользователя в группу «docker», чтобы использовать Docker без sudo:

sudo usermod -aG docker $USER

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

Установка и запуск Nginx в Docker-контейнере на Ubuntu

Чтобы установить и запустить Nginx в контейнере Docker на Ubuntu, вы можете выполнить следующие шаги:

  1. Установите Docker на вашу систему Ubuntu. Откройте терминал и выполните следующие команды:

sudo apt update

sudo apt install docker.io

  1. Извлеките официальный образ Nginx из Docker Hub, выполнив следующую команду:

sudo docker pull nginx

  1. После загрузки образа вы можете запустить контейнер Docker с помощью следующей команды:

sudo docker run -d -p 80:80 nginx

Эта команда запускает контейнер в отсоединенном режиме (`-d`), сопоставляет порт 80 контейнера с портом 80 хоста (`-p 80:80`) и использует образ Nginx.

  1. Получите доступ к Nginx: После запуска контейнера вы можете получить доступ к Nginx, открыв веб-браузер и введя `http://localhost` или IP-адрес вашей системы Ubuntu. Если вы хотите обслуживать файлы из определенного каталога на вашей системе Ubuntu, вы можете назначить том с хоста на контейнер. Например, если файлы вашего сайта расположены в директории `/path/to/website`, вы можете изменить команду `docker run` следующим образом:

sudo docker run -d -p 80:80 -v /path/to/website:/usr/share/nginx/html nginx

Эта команда монтирует каталог `/path/to/website` на хосте в каталог `/usr/share/nginx/html` внутри контейнера, позволяя Nginx обслуживать файлы из этого места.

Теперь у вас есть Nginx, запущенный в контейнере Docker на Ubuntu. Не забывайте корректировать команды и пути в зависимости от ваших конкретных настроек и требований.

Как запустить веб-приложение на Nginx в Docker

Чтобы запустить веб-приложение на Nginx в Docker, необходимо выполнить следующие общие шаги:

  1. Убедитесь, что ваше веб-приложение готово и имеет все необходимые файлы и зависимости.
  2. Создайте Dockerfile в корневом каталоге вашего веб-приложения. Dockerfile содержит инструкции по созданию образа Docker.

# Use a base image

FROM nginx:latest

# Copy the application files to the container

COPY . /usr/share/nginx/html

# Expose the container port

EXPOSE 80

  1. Соберите образ Docker — откройте терминал, перейдите в каталог с Dockerfile и выполните команду для сборки образа Docker. Эта команда создаст образ с именем «my-webapp» на основе Dockerfile.

docker build -t my-webapp .

  1. Запустите контейнер Docker: После того как образ собран, вы можете запустить контейнер из него с помощью следующей команды.

docker run -d -p 80:80 my-webapp

Эта команда запускает контейнер в отсоединенном режиме (`-d`), сопоставляя порт 80 контейнера с портом 80 хоста (`-p 80:80`) и используя образ «my-webapp».

  1. Получите доступ к веб-приложению: После запуска контейнера вы можете получить доступ к вашему веб-приложению, открыв веб-браузер и введя `http://localhost` или соответствующий IP-адрес вашего хоста Docker.

Эти шаги предполагают, что ваше веб-приложение совместимо с Nginx и может обслуживаться как статические файлы. Не забудьте адаптировать шаги в соответствии с конкретными требованиями вашего веб-приложения.

Повышение безопасности контейнеров Docker

Контейнеры Docker — эффективное и масштабируемое решение для разработки и развертывания ПО. Обеспечение безопасности контейнерных приложений важно для защиты конфиденциальных данных и предотвращения несанкционированного доступа. Рассмотрим несколько основных методов повышения безопасности контейнеров Docker, которые позволят вам создавать надежные и безопасные контейнерные среды.

Используйте официальные образы и проверенные репозитории

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

Регулярно обновляйте образы контейнеров

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

Используйте сканирование уязвимостей образов контейнеров

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

Используйте безопасные базовые образы

Начинайте процесс контейнеризации с безопасного базового образа. Избегайте использования типовых или минималистичных образов, в которых отсутствуют необходимые меры безопасности. Вместо этого выбирайте базовые образы, созданные с учетом требований безопасности, например, предоставленные официальными репозиториями Docker или авторитетными сторонними источниками. 

Реализуйте принцип наименьших привилегий

При настройке разрешений контейнеров следуйте принципу наименьших привилегий. Убедитесь, что контейнеры имеют только необходимые разрешения и права доступа, необходимые для нормального функционирования. Ограничьте выполнение контейнеров от имени root и предоставляйте определенные привилегии только в случае крайней необходимости. Минимизировав привилегии своих контейнеров, вы сможете уменьшить потенциальное воздействие компрометации.

Включите Docker Content Trust

Docker Content Trust служит для обеспечения целостности и подлинности образа. DCT использует криптографические подписи для проверки подлинности образов и предотвращения выполнения измененных или поддельных образов. Включив DCT, вы можете гарантировать, что в вашей среде будут развернуты только подписанные и проверенные образы, что снижает риск вредоносного внедрения образов.

Изолируйте контейнеры с помощью правильной конфигурации сети

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

Используйте безопасный контейнерный хост

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

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

Удаление образов, контейнеров, томов и сети Docker

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

Вы можете удалять появившиеся структуры руками, но лучше оптимизировать эту задачу через командную строку.

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

Перейдите во вкладку «Containers/Apps» (веб Docker Desktop). Укажите, что нужно сделать с элементами и примените:

Также, способ, использую консоль. Команда для удаления — docker container rm. Синтаксис:

  • docker container rm [параметры удаления] [ID объектов]

Параметры — (—force/-f — удаление контейнера в принудительном порядке), (—link/-l — удалить связь между элементами), (—volume/-v — удалить неопределенные тома, которые связаны с контейнером). ID получите с помощью команды — docker ps.

Параметры:

  • —-all или -a: выводим все работающие контейнеры
  • —filter или -f: фильтрация флагов
  • —format: формат вывода
  • —last или -n: вывод информации о последних n контейнерах
  • —latest или -l: вывод информации о последнем контейнере
  • —no-trunc: полный вывод
  • —quiet или -q: отдельный вывод идентификационного номера
  • —size или -s: вывод размера

С этими параметрами можно гибко взаимодействовать с группой контейнеров или отдельными единицами. Например, чтобы создать списки контейнеров на удаление — docker ps -a -f status=created -f status=exited, чтобы удалить — docker container  rm $(docker ps -a -f status=created -f status=exited -q). Перед удалением лучше остановить предполагаемые контейнеры. Чтобы удалить все контейнеры:

  • docker stop $(docker ps -a -q)
  • docker container  rm $(docker ps -a -q)

Удаление образов

Перейдите во вкладку «Images».

Чтобы удалить, найдите «Clean up…», выберите образы для удаления. Если образ в работе, просто удалить его не получится.

Через командную строку

docker rmi [параметры удаления] [ID образов]

Параметры:

  • —force или -f: удалить образ в принудительном порядке 
  • —no-prune: не удалять непомеченные 

Узнать ID образа:

  • docker images [параметры] [REPOSITORY:[TAG]]

Параметры:

  • —all или -a: выводим все образы. По умолчанию промежуточные будут скрыты;
  • —digests: выводим дайджесты;
  • —filter или -f: фильтр по флагам;
  • —format: формат вывода;
  • —no-trunc: не обрезать вывод;
  • —quiet или -q: выводим только идентификаторы;

Запросите нужный список образов и используйте его как параметр для команды docker rmi. В качестве примера избавимся от образов, не привязанных к контейнерам. Для этого воспользуемся флагом dangling=true — docker images –filter dangling=true. Чтобы удалить список — docker rmi $(docker images –filter dangling=true -q). Чтобы удалить неработающие образы — команда docker image prune.

Удаление томов

Том — это файловая система, которая находится вне контейнеров, размещенная на хост-машине. Если вы хотите освободить пространство на диске от них, перейдите в раздел «Volumes», в правом верхнем углу выберите:

Чтобы удалить тома: docker volume rm [параметры] [имена томов]

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

docker volume ls [параметры] — команда для определения имени тома. Параметры:

  • —filter или -f: фильтр по флагам
  • —format: формат вывода
  • —quiet или -q: выводим только имена

Чтобы стереть тома, несвязанные с контейнерами — docker volume ls -f dangling=true. Команда для запуска удаления — docker volume rm $(docker volume ls -f dangling=true -q). Но можно обойтись и другой командой для удаления таких томов: docker volume prune.

Удалить сети

Чтобы удалить сети в Docker, используйте команду «docker network rm» со следующим синтаксисом:

docker network rm [Сетевые имена/идентификаторы]

Эта команда не имеет параметров. Вы можете передавать как имена, так и идентификаторы. Чтобы узнать имена и идентификаторы сетей, используйте «docker network ls»:

docker network ls [параметры]

Есть 4 параметра:

  • —filter или -f: фильтровать по флагам
  • —format: выходной формат
  • —no-trunc: не обрезать вывод
  • —quiet или -q: показать только идентификаторы

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

docker ps -f network=[ID сети]

После этого можно приступать к удалению сети. Например, чтобы удалить сети со значением driver=bridge:

docker network ls -f driver=bridge

docker network rm $(docker network ls -f driver=bridge -q)

Очистка Docker от всех объектов

Сначала остановить и удалить все контейнеры:

  • docker stop $(docker ps -a -q)
  • docker rm $(docker ps -a -q)

Удалить все образы:

  • docker rmi $(docker images -a -q)

Удалить все тома:

  • docker volume rm $(docker volume ls -a -q)

Удалить все сети:

  • docker network rm $(docker network ls -a -q)

Как установить Docker на Ubuntu 22.04

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

Системные требования

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

Установка Docker на Ubuntu 22.04

Обновите пакеты

  • sudo apt update

Установите специальные пакеты

  • curl 
  • software-properties-common
  • ca-certificates
  • apt-transport-https

Команда для установки — sudo apt install curl software-properties-common ca-certificates apt-transport-https -y

Команда автоматически примет все необходимые соглашения

Импорт GPG

  • curl -f -s -S -L https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add —

Ключ GPG используется для подписи программного обеспечения.

Добавление Docker

Выполните команду в терминале:

  • sudo add-apt-repository «deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable»

Обновите пакеты

  • sudo apt update

Проверьте репозиторий

  • apt-cache policy docker-ce

Проконтролируйте, установка зависимостей должна происходить в подготовленной среде (репозитории).

Установите Docker

  • sudo apt install docker-ce -y

Проверьте успешность установки:

  • sudo systemctl status docker

Если успешно — статус Active(Running)

Docker Compose — Ubuntu 22.04

Docker Compose — инструмент Docker. С помощью него возможно управлять множеством контейнеров. Оркестрация позволяет образовать большое количество контейнеров в единую инфраструктуру. Диспетчеризация (управление) производится через YAML-файл, содержащий параметры для контейнеров и программных оболочек.

Установка через Git 

  • sudo apt-get install git

Узнать версию Git 

  • git —version

Чтобы перенести репозиторий, перейдите на веб-страницу Docker Compose на GitHub и скопируйте выделенную на картинке ссылку:

С помощью git clone:

git clone https://github.com/docker/compose.git

Установка вручную

На GitHub найдите последний релиз и загрузите:

Команда для загрузки:

  • sudo curl -L «https://github.com/docker/compose/releases/download/v2.12.2/docker-compose$(uname -s)-$(uname -m)» -o /usr/local/bin/docker-compose

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

  • sudo chmod +x /usr/local/bin/docker-compose

Apt-get установка

Используя встроенный пакетный менеджер, установить Docker Compose можете через команду: 

  • sudo apt-get install docker-compose

Docker — установка и использование

Введение 

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

Для установки и использования Docker вам понадобятся:

  • Настроенный сервер Ubuntu 20.04
  • Учетная запись в Docker Hub, если вы хотите передавать созданные образы

Шаг 1 

Установите Docker из официального репозитория Ubuntu. Чтобы установить последнюю версию, добавьте ключ GPG из Docker, потом установите пакет.

sudo apt update 
sudo apt install apt-transport-https ca-certificates curl software-properties-common

Эти команды обновят все библиотеки и установят необходимые компоненты для работы с протоколом HTTPS

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Первая команда добавит ключ GPG из официального репозитория Docker, вторая команда добавляет Docker в источники APT.

apt-cache policy docker-ce

Данная команда помогает убедиться в актуальности и подлинности версии Docker.

Установка Docker:

sudo apt install docker-ce 

Теперь Docker установлен, проверьте работу:

sudo systemctl status docker

Если всё в порядке, то увидите следующее сообщение:

Output
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: docker.socket
Docs: https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
   └─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Шаг 2 

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

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

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

sudo usermod -aG docker ${USER}

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

su - ${USER}

Вам будет предложено ввести пароль пользователя, чтобы продолжить.

Подтвердите, что ваш пользователь теперь добавлен в группу докеров, набрав:

groups

Если вам нужно добавить пользователя в группу docker, под которым вы не вошли в систему, объявите это имя пользователя самостоятельно, используя:

sudo usermod -aG docker username

В оставшейся части этой статьи предполагается, что вы запускаете команду docker от имени пользователя в группе docker. Если вы решите этого не делать, добавьте к командам sudo.

Далее давайте рассмотрим команду docker.

Шаг 3 

Использование докера заключается в передаче ему цепочки параметров и команд, за которыми следуют аргументы. Синтаксис принимает такую форму:

docker [option] [command] [arguments]

Чтобы увидеть весь список команд:

docker
Output
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Шаг 4

Контейнеры Docker создаются из образов Docker. По умолчанию Docker извлекает эти образы из Docker Hub, реестра Docker, которым управляет Docker, компания, стоящая за проектом Docker. Любой может разместить свои образы Docker на Docker Hub, поэтому образы большинства приложений и дистрибутивов Linux, которые вам понадобятся, будут размещены там.

Чтобы проверить, можете ли вы получить доступ и загрузить образы из Docker Hub, введите:

docker run hello-world
Output
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Первоначально Docker не смог найти образ hello-world локально, поэтому он загрузил образ из Docker Hub, который является репозиторием по умолчанию. После загрузки образа Docker создал контейнер из образа, и приложение внутри контейнера запустилось, отобразив сообщение. В официальном столбце OK указывает на образ, созданный и поддерживаемый компанией, стоящей за проектом. После того, как вы определили образ, который хотите использовать, вы можете загрузить его на свой компьютер с помощью подкоманды pull.

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

docker pull ubuntu

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

Шаг 5 

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

В качестве примера давайте запустим контейнер, используя последний образ Ubuntu. Комбинация ключей -i и -t обеспечивает интерактивный доступ оболочки к контейнеру:

docker run -it ubuntu

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

Теперь вы можете запустить любую команду внутри контейнера. Например, давайте обновим базу данных пакетов внутри контейнера. Вам не нужно ставить перед какой-либо командой префикс sudo, потому что вы работаете внутри контейнера как пользователь root:

apt update
apt install nodejs
node -v

Шаг 6 

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

docker ps

В этом руководстве вы запустили два контейнера; один из образа hello-world, а другой из образа ubuntu. Оба контейнера больше не работают, но они все еще существуют в вашей системе.

Чтобы просмотреть все контейнеры — активные и неактивные, запустите docker ps с ключом -a:

docker ps -a

Вы увидите вывод, похожий на этот:

1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 8 seconds ago                       quizzical_mcnulty
a707221a5f6c        hello-world         "/hello"            6 minutes ago       Exited (0) 6 minutes ago                       youthful_curie

Чтобы просмотреть последний созданный вами контейнер, передайте ему ключ -l:

docker ps -l
Вывод:
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 40 seconds ago                       quizzical_mcnulty

Чтобы запустить остановленный контейнер, используйте docker start, за которым следует идентификатор контейнера или имя контейнера. Запустим контейнер на основе Ubuntu с идентификатором 1c08a7a0d0e4:

docker start 1c08a7a0d0e4
Output
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1c08a7a0d0e4        ubuntu              "/bin/bash"         3 minutes ago       Up 5 seconds

Чтобы остановить работающий контейнер, используйте docker stop, а затем идентификатор или имя контейнера. На этот раз мы будем использовать имя, которое Docker присвоил контейнеру, — quizzical_mcnulty:

docker stop quizzical_mcnulty

Как только вы решили, что вам больше не нужен контейнер, удалите его с помощью команды docker rm, снова используя либо идентификатор контейнера, либо имя. Используйте команду docker ps -a, чтобы найти идентификатор или имя контейнера, связанного с образом hello-world, и удалить его.

docker rm youthful_curie

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

Шаг 7 

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

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

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

Переключатель -m предназначен для сообщения фиксации, которое помогает вам и другим узнать, какие изменения вы внесли, а -a используется для указания автора. container_id — это тот, который вы отметили ранее в руководстве, когда запускали интерактивный сеанс Docker. Если вы не создали дополнительные репозитории в Docker Hub, репозиторий обычно является вашим именем пользователя Docker Hub.

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

docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

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

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

docker images
Output
REPOSITORY               TAG         IMAGE ID          CREATED        SIZE
sammy/ubuntu-nodejs     latest     7c1f35226ca6     7 seconds ago     179MB
...

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

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

Шаг 8

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

В этом разделе показано, как отправить образ Docker в Docker Hub. Чтобы узнать, как создать собственный частный реестр Docker, ознакомьтесь со статьей Как настроить частный реестр Docker в Ubuntu 18.04.

Чтобы отправить образ, сначала войдите в Docker Hub:

docker login -u docker-registry-username

Затем вы можете отправить свой собственный образ, используя:

docker push docker-registry-username/docker-image-name

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

docker push sammy/ubuntu-nodejs

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

Войдите в систему Docker. Затем убедитесь, что образ существует на странице репозитория Docker Hub.
Теперь вы можете использовать docker pull sammy/ubuntu-nodejs, чтобы перетащить образ на новую машину и использовать его для запуска нового контейнера.