0

practicum

Docker

26.04.2022

Как и виртуальные машины, контейнеры создаются из образов. На сегодняшний день самая популярная и удобная платформа для создания и запуска образов — Docker.Docker работает так. Предположим, вы с коллегами разработали приложение. Вы упаковываете его со всеми зависимостями — библиотеками, интерпретаторами, файлами и пр. — в Docker-образ и отправляете в репозиторий (т. е. хранилище). Чтобы развернуть приложение, нужно скачать из репозитория образ и создать из него контейнер на рабочем сервере.Хранилища Docker-образов бывают публичные и приватные. Самое известное публичное хранилище — это Docker Hub. Однако если вы работаете с Yandex.Cloud, лучше использовать собственное хранилище облака Yandex Container Registry. О нём и его плюсах мы поговорим на следующем уроке.

Как создаются образы

Docker-образы создаются с помощью инструкций, таких как запуск команды, добавление файла или директории, создание переменной окружения. Инструкции хранятся в Dockerfile — это обычный текстовый файл, который можно редактировать в любом текстовом редакторе (что соответствует принципам Infrastructure as Code).Вот простой пример Dockerfile для образа, в котором есть только ОС Ubuntu и веб-сервер nginx:

Скопировать кодFROM ubuntu:latest
RUN apt-get update -y
RUN apt-get install -y nginx
ENTRYPOINT ["nginx", "-g", "daemon off;"] 

Каждая инструкция создаёт новый слой образа, и эти слои накладываются друг на друга. В конце вы задаёте команду — исполняемый файл, который будет запущен при старте Docker-контейнера.В примере выше первая строка определяет исходный образ (публичный образ с последней версией Ubuntu), на основе которого мы строим свой.Вторая и третья строки устанавливают веб-сервер nginx.Последняя строка задаёт точку входа — запускает nginx.Процесс создания образа — это считывание и выполнение инструкций из Dockerfile. Чтобы создать образ из Dockerfile, используется команда build. Если файл со спецификацией называется стандартно (Dockerfile), не указывайте название. Если иначе — напишите название после ключа -f. После ключа -t указывается имя образа, который будет создан:

Скопировать кодdocker image build -f my-dockerfile -t my-image . 

Точка в примере означает, что для сборки используется текущая директория.

Как создаются контейнеры из образов

Для работы с хранилищем используются традиционные команды push и pull. Так мы помещаем образ в хранилище:

Скопировать кодdocker push my-image 

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

Скопировать кодdocker pull my-image
docker run my-image 

При создании контейнера из образа можно использовать параметры (флаги). Например, чтобы ограничить ресурсы памяти и процессора, загрузить свежую версию образа, передать значения переменных. Смотрите доступные флаги с помощью традиционного ключа --help.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380