Как я могу создать образ контейнера?
Существует два способа для создания образа контейнера:
- Создание снапшота — подходит для образов, которые будут периодически обновляться.
- Установите ПО движка контейнера на хост.
- Запустите пустой базовый контейнер в интерактивном режиме, например, контейнер CentOS. docker run -it centos
- Чтобы установить целевое ПО, выполните следующие команды: yum install XXXgit clone https://github.com/lh3/bwa.gitcd bwa;make
Примечание Заранее установите Git и проверьте, установлен ли ключ SSH на локальном хосте.
- Запишите инструкции по установке программного обеспечения в файл Dockerfile .
- Чтобы создать образ из Dockerfile , запустите команду сборки docker docker build -t test/image:tag.
Создание собственного образа Docker

Обновлено: 17.03.2023 Опубликовано: 29.06.2019
Тематические термины: Docker, Linux. Docker позволяет не только загружать и использовать готовые контейнеры, но создавать свои. В данной инструкции мы пошагово разберем установку Docker на Linux, создание собственного образа и загрузку его на Docker Hub.
Установка 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
Debian/Ubuntu
В 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.
.
Сборка нового образа
Сборка начинается с создания файла Dockerfile — он содержит инструкции того, что должно быть в контейнере. В качестве примера, соберем свой веб-сервер nginx. И так, чтобы создать свой образ с нуля, создаем каталог для размещения Dockerfile:
mkdir -p /opt/docker/mynginx
* где /opt/docker/mynginx — полный путь до каталога, где будем создавать образ. . переходим в данный каталог:
cd /opt/docker/mynginx
. и создаем Dockerfile:
vi Dockerfile
MAINTAINER Dmitriy Mosk
RUN yum install -y epel-release && yum install -y nginx
RUN yum clean all
RUN echo «daemon off;» >> /etc/nginx/nginx.conf
RUN sed -i «0,/nginx/s/nginx/docker-nginx/i» /usr/share/nginx/html/index.html
- используем базовый образ centos 7;
- в качестве автора образа указываем Dmitriy Mosk;
- задаем временную зону внутри контейнера Europe/Moscow.
- устанавливаем epel-release и nginx;
- чистим систему от метаданных и кэша пакетов после установки;
- указываем nginx запускаться на переднем плане (daemon off);
- в индексном файле меняем первое вхождение nginx на docker-nginx;
- запускаем nginx.
* подробное описание инструкций Dockerfile смотрите ниже.
docker build -t dmosk/nginx:v1 .
* где dmosk — имя автора; nginx — название для сборки; v1 — тег с указанием версии. Точка на конце указывает, что поиск Dockerfile выполняем в текущей директории.
. начнется процесс сборки образа — после его завершения мы должны увидеть что-то на подобие:
Successfully built eae801eaeff2
Successfully tagged dmosk/nginx:v1
Посмотреть список образов можно командой:
Создаем и запускаем контейнер из образа:
docker run -d -p 8080:80 dmosk/nginx:v1
* в данном примере мы запустим контейнер из образа dmosk/nginx:v1 и укажем, что необходимо опубликовать внешний порт 8080, который будет перенаправлять трафик на порт 80 внутри контейнера.
Открываем браузер и переходим по адресу http://:8080 — мы должны увидеть страницу приветствия с нашим docker-nginx:

Посмотреть созданные контейнеры можно командой:
Запустить или остановить контейнеры можно командами:
docker stop 5fe78aca2e1d
docker start 5fe78aca2e1d
* где 5fe78aca2e1d — идентификатор контейнера.
Редактирование образа
В примере выше мы рассмотрели создание нового образа с нуля. Также, мы можем взять любой другой образ, отредактировать его и сохранить под своим названием.
Скачаем образ операционной системы CentOS:
docker pull centos:latest
Войдем в скачанный образ для его изменения:
docker run -t -i centos:latest /bin/bash
Внесем небольшие изменения, например, создадим учетную запись:
[root@8f07ef93918f /]# useradd dmosk -G wheel -m
[root@8f07ef93918f /]# passwd dmosk
* в данном примере мы создали пользователя dmosk и задали ему пароль.
docker commit -m «Add user dmosk» -a «Dmitry Mosk» 8f07ef93918f centos:my
* где -m — параметр для указания комментария; -a — указывает автора; 8f07ef93918f — идентификатор контейнера, который был нами изменен (его можно было увидеть в приглашении командной строки); centos:my — название нашего нового образа.
Новый образ создан.
Загрузка образа на Docker Hub
Заходим на Docker Hub страницу регистрации. Создаем пользователя:

На следующей странице также заполняем данные профиля. После переходим в почтовый ящик, который был указан при регистрации и переходим по ссылке Confirm Your Email With Docker для подтверждения регистрации. Регистрация закончена.
Переходим на страницу Repositories и создаем свой репозиторий, например, dmosk. Теперь можно загрузить наши образы в репозиторий.
Сначала авторизуемся в Linux под нашим зарегистрированным пользователем:
docker login —username dmosk
Задаем тег для одного из образов и загружаем его в репозиторий:
docker tag centos:my dmosk/dmosk:centos
docker push dmosk/dmosk:centos
Загрузим второй образ:
docker tag dmosk/nginx:v1 dmosk/dmosk:nginx
docker push dmosk/dmosk:nginx
В Docker Hub должны появиться наш образы:

Чтобы воспользоваться образом на другом компьютере, также авторизуемся под зарегистрированным пользователем docker:
docker login —username dmosk
docker pull dmosk/dmosk:nginx
docker run -d -p 8080:80 dmosk/dmosk:nginx
Описание инструкций Dockerfile
| Инструкция | Описание | Пример |
|---|---|---|
| FROM | Указывает, какой базовый образ нужно использовать. Обязательная инструкция для Dockerfile | FROM ubuntu:16.04 |
| MAINTAINER | Автор образа. | MAINTAINER DMosk |
| RUN | Выполняет команду в новом слое при построении образа. | RUN apt-get install python |
| CMD | Запускает команду каждый раз при запуске контейнера. Может быть вызвана только один раз. Если в Dockerfile указать несколько таких инструкций, то выполнена будет последняя. | CMD [«openvpn»] |
| LABEL | Добавляет метаданные. | LABEL version=»2″ |
| EXPOSE | Указывает, какой порт должно использовать приложение внутри контейнера. | EXPOSE 8080 |
| ENV | Задает переменные окружения в образе. | ENV PGPASSWORD pass |
| ADD | Добавляет файлы/папки из текущего окружения в образ. Если в качестве копируемого файла указать архив, то он будет добавлен в образ в распакованном виде. Также в качестве источника принимает URL. | ADD /root/.ssh/ /root/.ssh/ |
| COPY | Также как и ADD добавляет файлы в образ, но обладает меньшими функциями — не принимает URL и не распаковывает архивы. Рекомендован для использования в случаях, где не требуются возможности ADD или когда нужно перенести архив, как архив. | COPY ./mypasswd /root/ |
| ENTRYPOINT | Указывает команду, которой будет передаваться параметр при запуске контейнера. | ENTRYPOINT [«/sbin/apache2»] |
| VOLUME | Добавляет том в контейнер. | VOLUME [«/opt/myapp»] |
| USER | Задает пользователя, от которого будет запущен образ. | USER user:group |
| WORKDIR | Можно задать каталог, откуда будут запускаться команды ENTRYPOINT и CMD. | WORKDIR /opt/apps |
| ARG | Создает переменную, которую может использовать сборщик. | ARG folder=/opt/apps WORKDIR $folder |
| ONBUILD | Действия, которые выполняются, если наш образ используется как базовый для другой сборки. | ONBUILD ADD . /app/src |
| STOPSIGNAL | Переопределяет сигнал SIGTERM для завершения контейнера. | STOPSIGNAL SIGINT |
| HEALTHCHECK | Команда, которая будет проверять работоспособность контейнера. | HEALTHCHECK —interval=5m —timeout=3s CMD curl -f http://localhost/ || exit 1 |
| SHELL | Позволяет заменить стандартную оболочку для выполнения команд на пользовательскую. | SHELL [«/bin/sh», «-c»] |
Импорт и экспорт образа
Наши образы docker мы можем экспортировать для переноса на другой сервер. Рассмотрим процесс подробнее.
Создание резерва (экспорт)
Созданный нами образ можно сохранить в виде архива и, при необходимости, перенести на другой сервер или оставить как бэкап.
И так, для создания резервной копии образа, смотрим их список:
. и для нужного выполняем команду:
docker save -o /backup/docker/image_name.tar
* в данном примере мы создаем архив контейнера в файл /backup/docker/container.tar.
Чтобы уменьшить размер, занимаемый созданным файлом, заархивируем его командой:
* в итоге, мы получим файл container.tar.gz.
Или, чтобы сразу создать заархивированную копию:
docker save | gzip > /backup/docker/image_name.tar.gz
Для создания архива всех образов в нашей системе выполняем:
docker save $(docker images -q) | gzip > /backup/docker/all_image.tar.gz
* в файле /backup/docker/all_image.tar.gz мы получим архив со всем образами, которые есть в нашей системе.
Восстановление
Сначала распаковываем архив:
После восстанавливаем образ:
docker load -i image_name.tar
Смотрим, что нужный нам образ появился:
Volume
1. Для экспорта вольюма вводим:
docker run —rm —volumes-from container-name -v $(pwd):/backup ubuntu bash -c «cd /volume-path && tar zcf /backup/backup.tar.gz .»
* где container-name — имя контейнера, к которому привязан нужный нам вольюм; volume-path — путь монтирования вольюма внутри контейнера.
После ввода команды docker запустит контейнер с Ubuntu и создаст архив backup.tar.gz. Мы его должны увидеть в текущем каталоге:
Данный файл можно переносить на другой сервер.
2. Для восстановления на целевом сервере переходим в каталог, где лежит наш файл backup.tar.gz и вводим:
docker run —rm —volumes-from container-name -v $(pwd):/backup ubuntu bash -c «cd /volume-path && tar zxf /backup/backup.tar.gz»
* где container-name — имя контейнера, к которому будет привязан вольюм; volume-path — путь монтирования вольюма внутри контейнера.
Дополнительные команды
В данном подразделе приведем примеры команд, которые могут оказаться полезными при работе с образами.
1. Удалить один образ:
docker rmi dmosk/nginx:v1
Как создать и запустить Docker контейнер из образа.

Предположим, что вы нашли в Docker репозитории какой-то образ. Первый вопрос, который возникает, как создать и запустить Docker контейнер из этого образа?
В этой статье я хотел бы обзорно рассмотреть этот вопрос и дать несколько рекомендаций, где можно найти более подробную информацию. Дело в том, что процесс создания Docker контейнера из образа имеет очень много особенностей.
Если вы только начинаете знакомиться с докер, рекомендую посмотреть мой курс «Основы Docker для веб-программистов.»
Там есть объяснение многих базовых понятий, которые нужно знать прежде чем приступать работать с Docker.
Существует несколько способов создания контейнера. Чтобы во всем этом разобраться, нам нужно понять как происходит весь процесс.

Для того, чтобы запустить какой-либо контейнер, мы должны сначала скачать его образ с репозитория Docker на свой локальный компьютер и затем уже происходит процесс запуска.
Здесь нужно учитывать такой момент, что не все образы после их запуска оставляют после себя запущенный в системе контейнер. Некоторые запускаются, выполняют какую-то работу и закрываются.
Например, так происходит с образом hello-world.
Когда мы выполним команду
docker run hello-world
Эта команда автоматически скачает образ из репозитория Docker на ваш локальный компьютер (вручную скачать его можно с помощью docker pull hello-world) и запустит его в контейнере и автоматически закроет и удалит этот контейнер.
Пожалуй, команда «docker run имя_образа» является одним из самых простых способов как можно создать и запустить контейнер Docker на вашем компьютере.
В зависимости от образа, с которым мы работаем, в этой команде можно указывать дополнительные аргументы и настройки, которые позволят запустить Docker контейнер каким-то определенным способом с какими-то определенными настройками.
Например, чтобы запустить контейнер базы данных mysql мы можем воспользоваться командой.
docker run --name ms -p 3307:3306 -e MYSQL_ROOT_PASSWORD=12345 mysql
Это команда скачает образ mysql на наш локальный компьютер, присвоит имя для нового создаваемого контейнера как «ms», назначит порт 3307 на нашем локальном компьютере для работы сервера баз данных, назначит пароль 12345 для пользователя root.
О том, какие аргументы мы можем передавать в команду docker run можно почитать в документации того образа, с которым вы работаете.
После выполнения этой команды вы должны увидеть созданный и запущенный контейнер, который будет работать в вашей операционной системе.

Альтернативой команде docker run является специальный инструмент для Docker, который называется Docker Compose. По сути, это отдельная утилита для докер, которая позволяет собирать контейнера сразу из множества образов и настраивать взаимодействие между ними.
Например, для того, чтобы создать и запустить контейнер Docker с образом языка программирования php и веб-сервером apache, нужно создать специальный файл, который будет называться docker-composer.yaml в нашем проекте. Подробнее об этом файле вы можете посмотреть в этом моем курсе.
И добавить в этот файл следующее содержимое:
version: "3" services: myproject: image: php:7.4-apache volumes: - D:\Sites\tmp6:/var/www/html ports: - "8080:80"
Теперь нужно дать команду утилите docker compose, чтобы она создала и запустила на основе этого образа новый контейнер. Сделать это можно с помощью команды
docker-compose up --build
Это основные способы, как можно создать и запустить Docker контейнер. Конечно, здесь есть много моментов и тонкостей, с которыми нужно разбираться отдельно. Но, надеюсь, что общий смысл для вас стал понятен и изучая дополнительные материалы вы сможете разобраться в своей конкретной ситуации.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Docker и Docker-Compose — Tutorial и подборка видео по темам

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

Видео — Что такое Docker за 200 секунд
Сущности Docker: docker daemon, container, image, Dockerfile, Docker Registry
В Docker используется архитектура клиент/сервер, в соответствии с которой клиент взаимодействует с демоном Docker, а тот предоставляет все необходимые клиенту услуги.

Рассмотрим компоненты рабочего процесса и инструменты для управления контейнерами и их развертывания, составляющие экосистему Docker:
- Daemon Docker (Сервер): Выполняется в хост-системе и управляет всеми запущенными контейнерами. Docker Daemon — это сервер Docker, который прослушивает запросы Docker API. Docker Daemon управляет образами, контейнерами, сетями и томами.
- Docker Container (Контейнер): Автономная виртуальная система, содержащая выполняющийся процесс, все файлы, зависимости, адресное пространство процесса и сетевые порты, необходимые приложению. Так как каждый контейнер имеет свое пространство портов, следует организовать их отображение в фактические порты на уровне Docker;
- Docker Client (Клиент): Пользовательский интерфейс, или интерфейс командной строки, для взаимодействий с демоном Docker. Клиент Docker — это основной способ взаимодействия с Docker. Когда вы используете интерфейс командной строки (CLI) Docker, вы вводите в терминал команду, которая начинается с docker . Затем клиент Docker использует API Docker для отправки команды демону Docker.
- Docker Image (Образ): это шаблон только для чтения, который содержит набор инструкций по созданию контейнера, который может работать на платформе Docker. Он предоставляет удобный способ упаковать приложения и предварительно настроенные серверные среды, которые вы можете использовать для личного использования или публично публиковать с другими пользователями Docker. Также можно воспользоваться командой docker diff, чтобы увидеть различия между двумя образами. Каждый образ состоит из нескольких уровней, или слоев, которые могут совместно использоваться несколькими образами.
- Реестр Docker: Репозиторий для хранения и распространения образов контейнеров Docker. Пример известного реестра — Docker Hub, куда можно помещать и откуда можно извлекать образы.
- Dockerfile: Это очень простой текстовый файл, содержащий команды, которые выполняют сборку образов Docker. Посредством этих команд можно устанавливать дополнительные программные компоненты, настраивать переменные окружения, рабочие каталоги и точку входа ENTRYPOINT, а также добавлять новый код;
- Docker Swarm: По сути своей, это готовый к использованию механизм клас теризации, позволяющий объединить несколько узлов Docker в один боль шой хост Docker.
- Docker Compose: Приложения часто состоят из множества компонентов, и соответственно они будут выполняться в нескольких контейнерах. В состав Docker входит инструмент Compose, с помощью которого можно легко запустить приложение в нескольких контейнерах. Вы можете определить окружение для приложения в общем файле Dockerfile и определить перечень служб в файле docker-compose.yml, после чего Docker автоматически будет создавать и запускать необходимые контейнеры, как определено в этих файлах.
Что такое docker image (образ)
Образ Docker — это шаблон только для чтения, который содержит набор инструкций по созданию контейнера, который может работать на платформе Docker. Образ — это главный шаблон, который используется для запуска одинаковых контейнеров. Если выразиться кратко, то docker image — это переносимый формат для одного контейнера.
Образ Docker состоит из набора файлов, которые объединяют воедино все необходимое, например installations, application code, и dependencies, необходимые для настройки полностью работоспособной среды контейнера. Вы можете создать образ Docker одним из двух способов:
- Интерактивный: запустив контейнер из существующего образа Docker, вручную изменив среду контейнера с помощью серии активных шагов и сохранив полученное состояние как новый образ.

- Dockerfile: путем создания текстового файла, известного как Dockerfile, который предоставляет спецификации для создания образа Docker.
Dockerfile — это файл с инструкциями о том, как Docker должны строить свой image.

С физической точки зрения docker image состоит из набора слоев, доступных только для чтения (read-only layers). Слои image работают следующим образом:
- Каждый слой image является результатом одной команды в файле Dockerfile. Образ докера представляет собой сжатый (tar) файл, содержащий серию слоев.
- Каждый дополнительный слой image включает только набор отличий от предыдущего слоя (попробуйте запустить для docker image команду docker history, которая выведет все его слои и те команды, которые их создало).
Пример Dockerfile: