Как создать контейнер
Перейти к содержимому

Как создать контейнер

  • автор:

Создание собственного образа 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

Если система вернет ошибку Необходимо: 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

  1. используем базовый образ centos 7;
  2. в качестве автора образа указываем Dmitriy Mosk;
  3. задаем временную зону внутри контейнера Europe/Moscow.
  4. устанавливаем epel-release и nginx;
  5. чистим систему от метаданных и кэша пакетов после установки;
  6. указываем nginx запускаться на переднем плане (daemon off);
  7. в индексном файле меняем первое вхождение nginx на docker-nginx;
  8. запускаем 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-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 страницу регистрации. Создаем пользователя:

Регистрация на 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’a и хорошенько там осмотреться.

Начнем с того, для чего же нам нужен Docker:

  1. изолированный запуск приложений в контейнерах
  2. упрощение разработки, тестирования и деплоя приложений
  3. отсутствие необходимости конфигурировать среду для запуска — она поставляется вместе с приложением — в контейнере
  4. упрощает масштабируемость приложений и управление их работой с помощью систем оркестрации контейнеров.

Предыстрория

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

  • процессор,
  • память,
  • дисковое пространство,
  • сетевые интерфейсы.

На каждой ВМ устанавливаем нужную ОС и запускаем приложения. Недостатком такого подхода является то, что значительная часть ресурсов хоста расходуется не на полезную нагрузку(работа приложений), а на работу нескольких ОС.

Контейнеры

Альтернативным подходом к изоляции приложений являются контейнеры. Само понятие контейнеров не ново и давно известно в Linux. Идея состоит в том, чтобы в рамках одной ОС выделить изолированную область и запускать в ней приложение. В этом случае говорим о виртуализации на уровне ОС. В отличие от ВМ контейнеры изолированно используют свой кусочек ОС:

  • файловая система
  • дерево процессов
  • сетевые интерфейсы
  • и др.

Т.о. приложение, запущенное в контейнере думает, что оно одно во всей ОС. Изоляция достигается за счет использования таких Linux-механизмов, как namespaces и control groups. Если говорить просто, то namespaces обеспечивают изоляцию в рамках ОС, а control groups устанавливают лимиты на потребление контейнером ресурсов хоста, чтобы сбалансировать распределение ресурсов между запущенными контейнерами.

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

Образы

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

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

Образ состоит из слоев, каждый из которых представляет собой неизменяемую файловую систему, а по-простому набор файлов и директорий. Образ в целом представляет собой объединенную файловую систему (Union File System), которую можно рассматривать как результат слияния файловых систем слоев. Объединенная файловая система умеет обрабатывать конфликты, например, когда в разных слоях присутствуют файлы и директории с одинаковыми именами. Каждый следующий слой добавляет или удаляет какие то файлы из предыдущих слоев. В данном контексте «удаляет» можно рассматривать как «затеняет», т.е. файл в нижележащем слое остается, но его не будет видно в объединенной файловой системе.
Можно провести аналогию с Git: слои — это как отдельные коммиты, а образ в целом — результат выполнения операции squash. Как мы увидим дальше, на этом параллели с Git не заканчиваются. Существуют различные реализации объединенной файловой системы, одна из них — AUFS.

Для примера рассмотрим образ произвольного .NET приложения MyApplication: первым слоем является ядро Linux, далее следуют слои ОС, среды исполнения и уже самого приложения.

Слои являются read only и, если в слое MyApplication нужно изменить файл, находящийся в слое dotnet, то файл сначала копируется в нужный слой, а потом в нем изменяется, оставаясь в исходном слое в первозданном виде.

Неизменяемость слоев позволяет использовать их всеми образами на хосте. Допустим MyApplication — это веб-приложение, которое использует БД и взаимодействует также с NodeJS сервером.

Совместное использование проявляется также и при скачивании образа. Первым загружается манифест, который описывает какие слои входят в образ. Далее скачиваются только те слои из манифеста, которых еще нет локально. Т.о. если мы для MyApplication уже скачали ядро и ОС, то для PostgreSQL и Node.js эти слои уже загружаться не будут.

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

Docker-контейнеры

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

Например, мы создали на основе образа с PostgreSQL сервером контейнер и запустили его. Когда мы создаем БД, то соответствующие файлы появляются в верхнем слое контейнера — слое для записи.

Можно провести и обратную операцию: из контейнера сделать образ. Верхний слой контейнера отличается от остальных только лишь разрешением на запись, в остальном это обычный слой — набор файлов и директорий. Делая верхний слой read only, мы преобразуем контейнер в образ.

Теперь я могу перенести образ на другую машину и запустить. При этом на сервере PostgreSQL можно будет увидеть БД, созданные на предыдущем этапе. Когда при работе контейнера будут внесены изменения, то файл БД будет скопирован из неизменяемого слоя с данными в слой для записи и там уже измененен.

Docker

Когда мы устанавливаем докер на локальную машину, то получаем клиент (CLI) и http-сервер, работающий как демон. Сервер предоставляет REST API, а консоль просто преобразует введенные команды в http-запросы.

Registry

Registry — это хранилище образов. Самым известным является DockerHub. Он напоминает GitHub, только содержит образы, а не исходный код. На DockerHub также есть репозитории, публичные и приватные, можно скачивать образы (pull), заливать изменения образов (push). Скачанные однажды образы и собранные на их основе контейнеры хранятся локально, пока не будут удалены вручную.

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

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

Dockerfile

Dockerfile представляет собой набор инструкций, на основе которых строится новый образ. Каждая инструкция добавляет новый слой к образу. Для примера рассмотрим Dockerfile, на основе которого мог бы быть создан образ рассмотренного ранее .NET-приложения MyApplication:

FROM microsoft/aspnetcore WORKDIR /app COPY bin/Debug/publish . ENTRYPOINT["dotnet", "MyApplication.dll"] 

Рассмотрим отдельно каждую инструкцию:

  1. определяем базовый образ, на основе которого будем строить свой. В данном случае берем microsoft/aspnetcore — официальный образ от Microsoft, который можно найти на DockerHub
  2. задаем рабочую директорию внутри образа
  3. копируем предварительно спаблишенное приложение MyApplication в рабочую директорию внутри образа. Сначала пишется исходная директория — путь относительно контекста, указанного в команде docker build , а вторым аргументом — целевая директория внутри образа, в данном случае точка обозначает рабочую директорию
  4. конфигурируем контейнер как исполняемый: в нашем случае для запуска контейнера будет выполнена команда dotnet MyApplication.dll

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

FROM microsoft/aspnetcore-build:2.0 AS publish WORKDIR /src COPY . . RUN dotnet restore RUN dotnet publish -o /publish FROM microsoft/aspnetcore:2.0 WORKDIR /app COPY --from=publish /publish . ENTRYPOINT ["dotnet", "MyApplication.dll"] 

Инструкции в файле разбиты на две секции:

  1. Определение образа для сборки приложения: microsoft/aspnetcore-build. Данный образ предназначен для сборки, паблиша и запуска .NET приложений и согласно DockerHub с тегом 2.0 имеет размер 699 MB. Далее происходит копирование исходных файлов приложения внутрь образа и внутри него выполняются команды dotnet restore и dotnet publish с размещением результатов в директории /publish внутри образа.
  2. Определяется базовый образ, в данном случае это microsoft/aspnetcore, который содержит в себе только среду исполнения и согласно DockerHub с тегом 2.0 имеет размер всего 141 MB. Далее определяется рабочая директория и в нее копируется результат предыдущей стадии (ее имя указывается в аргументе —from ), определяется команда запуска контейнера и все — образ готов.

Напоследок хочу отметить, что намеренно для простоты оперировал понятием образ, рассматривая работу с Dockerfile. На самом деле изменения, вносимые каждой инструкцией происходят конечно же не в образе (ведь в нем только неизменяемые слои), а в контейнере. Механизм такой: из базового образа создается контейнер (добавляется ему слой для записи), выполняется инструкция в данном слое (она может добавлять файлы в слой для записи: COPY или нет: ENTRYPOINT ), вызывается команда docker commit и получается образ. Процесс создания контейнера и коммита в образ повторяется для каждой инструкции в файле. В итоге в процессе формирования конечного образа создается столько промежуточных образов и контейнеров, сколько инструкций в файле. Все они автоматически удаляются после окончания сборки конечного образа.

Заключение

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

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

Ссылки

  1. Документация Docker
  2. Механизм namespaces
  3. Механизм control groups
  4. Статья о Docker
  • Docker
  • Linux контейнеры

Как сделать контейнер в html

Чтобы создать контейнер в HTML, нужно использовать тег . Этот тег не имеет своего собственного стиля, но вы можете добавить стили, используя атрибут class или id .

Пример создания контейнера с классом «container»:

 class="container"> 

Вы можете добавить стили для этого контейнера в своем файле CSS, например:

.container  width: 80%; margin: 0 auto; padding: 20px; background-color: #f2f2f2; > 

Этот код задаст ширину контейнера в 80% от родительского элемента, задаст отступы сверху и снизу в 20 пикселей, а также задаст цвет фона.

Также, вместо класса можно использовать атрибут id , который должен быть уникальным на странице:

 id="container"> 

И стили для этого контейнера нужно будет задать так:

#container  /* Стили */ > 

Как создать и запустить 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 контейнер. Конечно, здесь есть много моментов и тонкостей, с которыми нужно разбираться отдельно. Но, надеюсь, что общий смысл для вас стал понятен и изучая дополнительные материалы вы сможете разобраться в своей конкретной ситуации.

Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *