Изучаем docker, часть 1: основы

6: Коммиты контейнеров Docker

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

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

Данный раздел научит вас сохранять состояние контейнера в качестве нового образа Docker.

Итак, в контейнер Ubuntu вы установили приложение node.js. Теперь контейнер отличается от образа, который был использован для его создания.

Чтобы сохранить текущее состояние контейнера в качестве нового образа, сначала закройте контейнер:

Затем передайте все изменения в новый образ Docker при помощи следующей команды. Опция –m позволяет создать сообщение о коммите, которое предоставит вам (и другим пользователям) подробную информацию о внесённых изменениях. Опция –a позволяет указать автора коммита. ID контейнера был выписан из командной строки. В качестве репозитория, как правило, указывается имя пользователя your Docker Hub:

Например:

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

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

Команда должна вернуть:

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

Резервное копирование и восстановление контейнера

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

Создание резерва

И так, для создания резервной копии контейнера, смотрим их список:

docker ps -a

… и для нужного выполняем команду:

docker save -o /backup/docker/container.tar <container image>

* в данном примере мы создаем архив контейнера <container image> в файл /backup/docker/container.tar.

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

gzip /backup/docker/container.tar

* в итоге, мы получим файл container.tar.gz.

Восстановление

Сначала распаковываем архив:

gunzip container.tar.gz

После восстанавливаем контейнер:

docker load -i container.tar

Смотрим, что нужный нам контейнер появился:

docker images

Перед установкой

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

  • Дроплет с 64-битной Ubuntu 16.04.
  • Не-рутовый пользователь с привилегиями . Настроить такого пользователя вы можете с помощью инструкций в статье “Начальная настройка сервера на Ubuntu 16.04”.

Внимание: Для установки Docker необходима 64-битная версия Ubuntu, а также версия ядра не ниже 3.10. 64-битный дроплет по умолчанию с Ubuntu 16.04 отвечает этим требованиям

Все команды, упомянутые в этой статье, должны выполняться от имени не-рутового пользователя. Если для выполнения команды необходимы привилегии root, эта команда будет выполняться с . Статья Начальная настройка сервера с Ubuntu 16.04 описывает процесс добавления пользователей и наделения их привилегиями sudo.

Шаг 7 — Сохранение изменений в контейнере в образ Docker

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

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

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

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

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

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

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

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

Результат получится примерно следующим:

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

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

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

Использование Docker в Ubuntu

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

Больше ничего не нужно, программа сама скачает образ, и выполнит оболочку в нем. Вы увидите сообщение Hello from Docker:

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

Использование docker очень простое по своей сути. Если вы не знаете название нужного пакета, можете воспользоваться поиском, например, найдем Ubuntu:

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

Для загрузки образа на локальный компьютер используйте команду pull:

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

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

Теперь, давайте запустим командную оболочку контейнера с помощью команды run, для получения интерактивного доступа используйте опции -i и -t:

Вы в окружении контейнера. У вас есть права суперпользователя, но вы не можете получить доступ к основной системе. Контейнер содержит минимум необходимых файлов, нет даже текстовых редакторов. Для установки чего-либо сначала нужно обновить репозиторий:

Например, установим утилиту dialog:

Сохранение изменений

Вы можете изменять контейнер как захотите, добавлять и удалять программы и многое другое. Но когда вы его удалите, все изменения будут потеряны. Вы можете создать новое образ из модифицированного контейнера, для этого используется команда commit. Сначала смотрим список запущенных контейнеров:

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

Например:

Новый образ был сохранен на вашем компьютере и вы можете увидеть его в списке образов:

Список контейнеров

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

Если вам нужны все контейнеры, используйте опцию -a:

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

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

Чтобы остановить запущенный контейнер используйте команду stop:

Для запуска:

Вы можете подключиться к запущенному контейнеру с помощью attach:

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

Step 5 — Accessing the Docker Container Filesystem (Optional)

If you need to work on the command prompt inside a container, you can use the command.

The Hello World! example exits after it is run, so we need to start a container that will keep running so we can then use to access the filesystem for the container. Let’s take a look at the Nginx image from Docker Hub.

Create a new directory for it and change into it:

Create a file in our new directory:

and paste in the following:

~/nginx/docker-compose.yml

Save the file and exit. We just need to start the Nginx container as a background process with the following command:

The Nginx image will be downloaded and then the container will be started in the background.

Now we need the for the container. List of all the containers that are running:

You will see something similar to the following:

Note: Only running containers are listed with the command.

If we wanted to make a change to the filesystem inside this container, we’d take its ID (in this example ) and use to start a shell inside the container:

The option opens up a terminal, and the option makes it interactive. The options opens a bash shell to the running container. Be sure to use the ID for your container.

You will see a bash prompt for the container similar to:

From here, you can work from the command prompt. Keep in mind, however, that unless you are in a directory that is saved as part of a data volume, your changes will disappear as soon as the container is restarted. Another caveat is that most Docker images are created with very minimal Linux installs, so some of the command line utilities and tools you are used to may not be present.

Способы установки Docker

Как правило, существует три основных метода установки Docker, выбор которых зависит от ситуации и среды, как описано ниже.

  1. Использование репозиториев Docker: — Простой способ установки и обновления рекомендуется для большинства онлайн-установок.
  2. Загрузка, установка и обновление вручную: — подходит для автономных компьютеров, не имеющих доступа в интернет
  3. Использование автоматизированных скриптов : для сред разработки и тестирования.

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

Образы Docker

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

Вы можете думать об образе Docker как о снимке контейнера Docker.

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

Искать в Docker Image

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

Например, чтобы найти образ Ubuntu, вы должны ввести:

Результат должен выглядеть так:

Как видите, поиск выводит таблицу с пятью столбцами: , , , и .

Официальный образ — это образ, который Docker разрабатывает совместно с партнерами по разработке.

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

Скачать образ Docker

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

В зависимости от скорости вашего Интернета загрузка может занять несколько секунд или минут.

Если не указать тег, Docker извлекает последний образ Ubuntu, который на момент написания этой статьи был 18.04.

Если вы хотите загрузить предыдущую версию Ubuntu , скажем, Ubuntu 16.04, вам нужно использовать .

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

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

Установка Docker

Рассмотрим примеры установки на базе операционных систем Red Hat/CentOS и Debian/Ubuntu.

Red Hat/CentOS

Устанавливаем репозиторий — для этого загружаем файл с настройками репозитория:

wget https://download.docker.com/linux/centos/docker-ce.repo

* если система вернет ошибку, устанавливаем wget командой yum install wget.

… и переносим его в каталог yum.repos.d:

mv docker-ce.repo /etc/yum.repos.d/

Устанавливаем docker:

yum install docker-ce docker-ce-cli containerd.io

Если система вернет ошибку Необходимо: container-selinux >= …, переходим на страницу пакетов CentOS, находим нужную версию container-selinux и копируем на него ссылку:

… с помощью данной ссылки выполняем установку:

yum install http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.99-1.el7_6.noarch.rpm

После повторяем команду на установку докера:

yum install docker-ce docker-ce-cli containerd.io

В deb-системе ставится командой:

apt-get install docker docker.io

После установки

Разрешаем запуск сервиса docker:

systemctl enable docker

… и запускаем его:

systemctl start docker

После проверяем:

docker run hello-world

… мы должны увидеть:


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

Утилита Docker

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

$ docker опции команда опции_команды аргументы

Давайте сначала рассмотрим основные опции утилиты их всего несколько:

  • -D — включить режим отладки;
  • -H — подключиться к серверу, запущенному на другом компьютере;
  • -l — изменить уровень ведения логов, доступно: debug,info,warn,error,fatal;
  • -v — показать версию;
  • —help вывести справку по команде или утилите в целом;

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

  • attach — подключиться к запущенному контейнеру;
  • build — собрать образ из инструкций dockerfile;
  • commit — создать новый образ из изменений контейнера;
  • cp — копировать файлы между контейнером и файловой системой;
  • create — создать новый контейнер;
  • diff — проверить файловую систему контейнера;
  • events — посмотреть события от контейнера;
  • exec — выполнить команду в контейнере;
  • export — извлечь содержимое контейнера в архив;
  • history — посмотреть историю изменений образа;
  • images — список установленных образов;
  • import — создать контейнер из архива tar;
  • info — посмотреть информацию о системе;
  • inspect — посмотреть информацию о контейнере;
  • kill — остановить запущенный контейнер;
  • load — загрузить образ из архива;
  • login — авторизация в официальном репозитории Docker;
  • logout — выйти из репозитория Docker;
  • logs — посмотреть логи контейнера;
  • pause — приостановить все процессы контейнера;
  • port — подброс портов для контейнера;
  • ps — список запущенных контейнеров;
  • pull — скачать образ контейнера из репозитория;
  • push — отправить образ в репозиторий;
  • restart — перезапустить контейнер;
  • rm — удалить контейнер;
  • run — выполнить команду в контейнере;
  • save — сохранить образ в архив tar;
  • search — поиск образов в репозитории по заданному шаблону;
  • start — запустить контейнер;
  • stats — статистика использования ресурсов контейнером;
  • stop — остановить контейнер;
  • top — посмотреть запущенные процессы в контейнере;
  • unpause — проложить выполнение процессов в контейнере.

В этой статье мы будем часто использовать команду run, рассмотрим ее опции:

  • -e — переменные окружения для команды;
  • -h — имя хоста контейнера;
  • -i — интерактивный режим, связывающий stdin терминала с командой;
  • -m — ограничение памяти для команды;
  • -u — пользователь, от имени которого будет выполнена команда;
  • -t — связать tty с контейнером для работы ввода и вывода;
  • -v — примонтировать директорию основной системы в контейнер.

Теперь, когда мы рассмотрели все основы, приведем несколько примеров работы с контейнерами. Это очень просто.

Установка DEB-пакета Docker на Linux

Сейчас мы рассмотрим установку DEB-пакета Docker на Linux на примере Ubuntu 18.04 LTS, но эта инструкция также подойдет и для следующих дистрибутивов:

   Ubuntu Eoan 19.10

   Ubuntu Bionic 18.04 (LTS)

   Ubuntu Xenial 16.04 (LTS)

   Debian Stretch 9

   Debian Buster 10

Также всё будет работать и на других Linux-дистрибутивах, которые основаны на вышеперечисленных.

Docker Community Edition доступен для следующих архитектур:

   x86_64 (или amd64)

   armhf

   arm64

   s390x (IBM Z)

   ppc64le (IBM Power)

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

Если у вас ничего не было установлено, то в терминале вы получите сообщение, что таких пакетов у вас нет:

При этом содержимое директории /var/lib/docker, где Docker хранит образы (images), контейнеры (containers), хранилища (volumes) и настройки сетей (networks), будут сохранены. Пакет Docker Engine Community сейчас называется .

Есть 3 способа установки Docker CE в Ubuntu:

   Способ №1: Настроить поддержку репозитория Docker и установить его оттуда.

   Способ №2: Загрузить DEB-пакет и установить его вручную.

   Способ №3: Воспользоваться , которые позволяют установить Docker.

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

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

Для начала обновим список существующих репозиториев в системе:

Далее установим пакеты:

Затем подтверждаем наши намерения символом и нажимаем :

После подтверждения получим следующий вывод:

Далее нам нужно добавить официальный GPG-ключ для Docker репозитория:

После чего нажимаем .

Проверяем цифровой отпечаток ключа , сравнивая последние 8 символов с помощью следующей команды:

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

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

И, собственно, устанавливаем сам Docker:

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

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

Проверяем, всё ли ок:

Если в терминале появились сообщения, указанные на скриншоте, расположенном выше, то вы успешно установили Docker на DEB-дистрибутив Linux!

2: Запуск контейнера при помощи Docker Compose

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

Создайте каталог для YAML-файла и перейдите в него:

Создайте YAML-файл:

Поместите в файл следующий код, затем сохраните и закройте его:

Первая строка будет использоваться как часть имени контейнера. Вторая строка указывает, какой образ использовать для создания контейнера. Команда docker-compose up будет искать в локальных образах образ hello-world.

Список локальных образов можно просмотреть вручную:

Если локальных образов нет, команда вернёт только заголовки столбцов:

В каталоге ~/hello-world выполните следующую команду, чтобы создать контейнер:

Если при первом запуске команда не обнаружит нужного образа на локальной машине, образ будет загружен из официального репозитория Docker Hub.

Загрузив образ, docker-compose создаст контейнер и запустит программу hello-world. Если всё выполнено верно, на экране появится такой вывод:

Затем команда выведет описание своих действий:

  • Клиент Docker подключается к демону Docker.
  • Демон загружает образ hello-world с Docker Hub.
  • Демон создаёт из этого образа новый контейнер.
  • Демон передаёт полученный вывод клиенту Docker, а он возвращает его в терминал.

Контейнер Docker работает до тех пор, пока работает программа, запущенная в нём. Если вы остановите программу hello, контейнер тоже остановится. Запросите список активных контейнеров; программы hello-world среди них не будет.

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

Understanding Docker

Its main novelty is that it allows you to “package” an application or a set of services in containers. A Docker container is an instance of an application that contains all the libraries and components necessary for an application to work. From a practical point of view, a container is like a reduced virtual machine that functions independently from the operating system where a specific application or service is executed.

A Docker container is generated from an image that is the result of the packaged app or service. It can contain a complete operating system or pre-installed applications. That is to say, the container will start to work from an image.

There are many Docker images that we can use in our daily work cycle. We can also create our own images and further expand the possibilities of this great application.

How to Start Using Docker on Ubuntu 18.04

Once Docker is installed, all we need to do is use the test image to check that everything is working as it should. Do this with the following command:

sudo docker run hello-world

Now, if we want to search for available images we just have to use the following command:

sudo docker search 

Just replace your query with the bracketed text.

For example, if we want to search for an image related to Debian, the command and output will look like this:

sudo docker search debian

Then, to download the image to our computer, we will use the name of the image along with the following command:

sudo docker pull 

For example, the command might look like this:

sudo docker pull debian

Normally, users will have several images in their system. We can list them with the command:

sudo docker images

The list will look much like the one you receive when you enter a search query.

After that, we can execute our image using the pull command and the Image ID.

sudo docker run -i -t 

There are options that extend the functionality of the command itself. For example, the -i option makes the image execution interactive. Or the -d option that executes it in the background.

Once we are running an image, we can end its execution by using the key combination CTRL+D.

Finally, if we want to use Docker without root privileges, we need to run the following command:

sudo usermod -aG docker $(whoami)

After that, restart the system, and the changes will be applied.

How to Install Docker on Ubuntu 18.04

Docker is not in the official Ubuntu 18.04 repositories. However, the installation process will not be complicated because of it. Let’s begin.

2. Update Your System

Then, the system needs to be updated to make it safer and reliable to install Docker. Run the following two commands:

sudo apt update
sudo apt upgrade

3. Install Prerequisite Packages

Once we have updated the system, we need to install some necessary packages before we are ready to install Docker. You can do this with the help of a single command:

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

To better understand the command above here is a short description of what it means:

  • apt-transport-https – lets the package manager transfer files and data over https
  • ca-certificates – lets the web browser and system check security certificates
  • curl – transfers data
  • software-properties-common – adds scripts to manage the software

4. Add the Docker Repositories

Now we have to add the Docker repositories. This will make the installation process much easier. This enables us to use the officially supported method of the installation.

First, we add the GPG key, by entering the following command in the command line:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Next, we add the repository:

sudo add-apt-repository "deb  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

After that, just update the repository information:

sudo apt update

Make sure you are installing from the Docker repo instead of the default Ubuntu repo with this command:

apt-cache policy docker-ce

A correct output will look like the following with different version numbers:

docker-ce:
   Installed: (none)
   Candidate: 16.04.1~ce~4-0~ubuntu
   Version table:
       16.04.1~ce~4-0~ubuntu 500
            500 https://download.docker.com/linux/ubuntubionic/stableamd64packages

As you can see, docker-ce is not installed, so we can move on to the next step.

We are almost done. Use the apt command to install Docker:

sudo apt install docker-ce

6. Check Docker Status

Once the installation is complete, it is a good idea to check the status of the service:

sudo systemctl status docker

That’s it, you now know how to install Docker on Ubuntu 18.04. Easy, right? Let’s learn some Docker basics!

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: