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

Как создать dockerfile windows

  • автор:

Начало работы. Запуск первого контейнера Windows

В этой статье объясняется, как запустить первый контейнер Windows после настройки среды, описанной в статье Начало работы. Подготовка Windows для контейнеров. Чтобы запустить контейнер, сначала скачайте (в контейнерах, которые также называются операцией извлечения) базовый образ, который предоставляет базовый уровень служб операционной системы для контейнера. Затем создается и запускается образ контейнера, который основан на базовом образе. Дополнительные сведения см. далее в этой статье.

Извлечение базового образа контейнера

Все контейнеры создаются из образов контейнеров. Корпорация Майкрософт предоставляет для начала работы несколько образов, называемых базовыми образами (дополнительные сведения см. в статье о базовых образах контейнеров). Эти процедуры позволяют получить (скачать и установить) базовый образ Nano Server.

    Откройте окно командной строки (например, встроенную командную строку, PowerShell или терминал Windows), а затем выполните следующую команду, чтобы скачать и установить базовый образ:

docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022 

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

Совет Если вы увидите сообщение об ошибке с текстом no matching manifest for linux/amd64 in the manifest list entries , убедитесь, что в Docker не настроен запуск контейнеров Linux. Чтобы переключиться на контейнеры Windows в Docker, щелкните значок Docker правой кнопкой мыши и выберите Переключиться на контейнеры Windows. Чтобы использовать командную строку для переключения между контейнерами, выполните команду & $Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon .

REPOSITORY TAG IMAGE ID CREATED SIZE microsoft/nanoserver latest 105d76d0f40e 4 days ago 652 MB 

Выполнение контейнера Windows

В этом простом примере будет создан и развернут образ контейнера «Hello World». Для вашего удобства лучше выполнять эти команды в окне командной строки с повышенными привилегиями. Не используйте интегрированную среду сценариев Windows PowerShell, так как она не работает для интерактивных сеансов с контейнерами и в результате контейнеры перестают отвечать на запросы.

    Запустите контейнер с интерактивным сеансом из образа nanoserver . Для этого введите следующую команду в окне командной строки:

docker run -it mcr.microsoft.com/windows/nanoserver:ltsc2022 cmd.exe 
echo "Hello World!" > Hello.txt exit 
docker ps -a 
docker commit helloworld 

После завершения вы получите пользовательский образ, содержащий скрипт «Привет мир». Это можно проверить с помощью команды docker images.

docker images 

Ниже приведен пример выходных данных.

REPOSITORY TAG IMAGE ID CREATED SIZE helloworld latest a1064f2ec798 10 seconds ago 258MB mcr.microsoft.com/windows/nanoserver 2022 2b9c381d0911 3 weeks ago 256MB 
docker run --rm helloworld cmd.exe /s /c type Hello.txt 

Запуск контейнера Windows с помощью Windows Admin Center

Вы можете использовать Windows Admin Center для локального запуска контейнеров. А именно, вы можете использовать расширение «Контейнеры» своего экземпляра Windows Admin Center для запуска контейнеров. Сначала откройте узел контейнеров, которым требуется управлять, а затем в области «Сервис» выберите расширение Контейнеры. Затем откройте вкладку Образы в расширении «Контейнеры» в разделе Узел контейнеров.

Вкладка

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

Окно параметров

В разделе Извлечение образа контейнера укажите URL-адрес и тег образа. Если вы не уверены, какой образ нужно извлечь, ознакомьтесь со списком популярных образов от Майкрософт, предоставляемых в Windows Admin Center. Вы также можете указать учетные данные для извлечения образа из частного репозитория. Внеся необходимые сведения, щелкните Извлечь. Windows Admin Center запустит процесс извлечения на узле контейнеров. После завершения скачивания вы увидите новый образ на вкладке Образы.

Выберите образ для запуска и щелкните Запустить.

Окно параметров запуска образа

В меню Запуск настройте конфигурацию для контейнера, например имя контейнера, тип изоляции, порты для публикации, а также выделение памяти и ЦП. Кроме того, вы можете добавить команды запуска Docker, которые недоступны в пользовательском интерфейсе, такие как -v для постоянного тома. Дополнительные сведения о доступных параметрах запуска Docker см. в документации.

Завершив настройку контейнера, щелкните Запустить. Состояние выполняющихся контейнеров можно просмотреть на вкладке Контейнеры:

Dockerfile в Windows

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

  • Сохранение образов контейнеров в виде кода.
  • Быстрое и точное воссоздание образов контейнеров для обслуживания и обновления.
  • Непрерывная интеграция между образами контейнеров и циклом разработки.

За такую автоматизацию отвечают два компонента Docker — файл Dockerfile и команда docker build .

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

Docker build — команда подсистемы Docker, использующая файл Dockerfile и запускающая процесс создания образа.

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

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

Полный обзор файлов Dockerfile см. в справке по Dockerfile на странице .

Базовый синтаксис

В исходной форме файл Dockerfile может быть очень простым. Следующий пример создает образ, включающий IIS и сайт «hello world». Этот пример включает комментарии (обозначенные с помощью # ), поясняющие каждый шаг. В последующих разделах этой статьи более подробно рассматриваются правила синтаксиса Dockerfile и инструкции Dockerfile.

Файл Dockerfile необходимо создавать без расширения. Чтобы сделать это в Windows, создайте файл с помощью удобного для вас редактора, а затем сохраните его, используя нотацию «Dockerfile» (вместе с кавычками).

# Sample Dockerfile # Indicates that the windowsservercore image will be used as the base image. FROM mcr.microsoft.com/windows/servercore:ltsc2019 # Metadata indicating an image maintainer. LABEL maintainer="jshelton@contoso.com" # Uses dism.exe to install the IIS role. RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart # Creates an HTML file and adds content to this file. RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html # Sets a command or process that will run each time a container is run from the new image. CMD [ "cmd" ] 

Дополнительные примеры файлов Dockerfile для Windows см. в репозитории файлов Dockerfile для Windows.

Instructions

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

FROM

Инструкция FROM задает образ контейнера, который будет применяться при создании нового образа. Например, при использовании инструкции FROM mcr.microsoft.com/windows/servercore полученный образ является производным и зависимым от базового образа ОС Windows Server Core. Если указанный образ отсутствует в системе, где выполняется процесс сборки Docker, подсистема Docker попытается скачать его из общедоступного или частного реестра образов.

Формат инструкции FROM выглядит следующим образом:

FROM

Ниже приведен пример команды FROM.

Чтобы загрузить Windows Server Core версии ltsc2019 из Реестра контейнеров (Майкрософт):

FROM mcr.microsoft.com/windows/servercore:ltsc2019 

ВЫПОЛНИТЬ

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

Инструкция RUN выглядит следующим образом:

# exec form RUN ["", "", ""] # shell form RUN

Различие между формой исполняемого файла (exec form) и формой оболочки (shell form) заключается в способе выполнения инструкции RUN . При использовании формы исполняемого файла указанная программа запускается явным образом.

Ниже приведен пример формы исполняемого файла.

FROM mcr.microsoft.com/windows/servercore:ltsc2019 RUN ["powershell", "New-Item", "c:/test"] 

Полученный образ выполняет команду powershell New-Item c:/test :

docker history doc-exe-method IMAGE CREATED CREATED BY SIZE COMMENT b3452b13e472 2 minutes ago powershell New-Item c:/test 30.76 MB 

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

FROM mcr.microsoft.com/windows/servercore:ltsc2019 RUN powershell New-Item c:\test 

Полученный образ содержит инструкцию RUN cmd /S /C powershell New-Item c:\test .

docker history doc-shell-method IMAGE CREATED CREATED BY SIZE COMMENT 062a543374fc 19 seconds ago cmd /S /C powershell New-Item c:\test 30.76 MB 

Рекомендации по использованию инструкции RUN с Windows

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

RUN ["powershell", "New-Item", "c:\\test"] 

Если целевая программа является установщиком Windows, чтобы запустить фактическую процедуру (автоматической) установки, необходимо извлечь программу установки, используя флаг /x: . Прежде чем выполнять какие-либо другие действия, необходимо дождаться завершения выполнения команды. В противном случае процесс будет завершен преждевременно и без установки. Дополнительные сведения см. в приведенном ниже примере.

Примеры использования инструкции RUN с Windows

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

RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart 

Этот пример устанавливает распространяемый пакет Visual Studio. Start-Process и параметр -Wait используются для запуска программы установки. Это гарантирует, что установка будет завершена до перехода к следующей инструкции в Dockerfile.

RUN powershell.exe -Command Start-Process c:\vcredist_x86.exe -ArgumentList '/quiet' -Wait 

Подробные сведения об инструкции RUN см. в справочнике по RUN на странице .

КОПИРОВАТЬ

Инструкция COPY копирует файлы и каталоги в файловую систему контейнера. Эти файлы и каталоги должны иметь путь, являющийся относительным для Dockerfile.

Формат инструкции COPY выглядит следующим образом:

COPY

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

COPY ["", ""] 
Рекомендации по использованию инструкции COPY с Windows

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

COPY test1.txt /temp/ COPY test1.txt c:/temp/ 

При этом следующий формат с обратными косыми чертами работать не будет:

COPY test1.txt c:\temp\ 
Примеры использования инструкции COPY с Windows

В следующем примере содержимое исходного каталога добавляется в каталог с именем sqllite в образе контейнера.

COPY source /sqlite/ 

В следующем примере все файлы, начинающиеся с config, добавляют в каталог c:\temp образа контейнера.

COPY config* c:/temp/ 

Дополнительные сведения об инструкции COPY см. в справочнике по инструкции COPY.

ADD

Инструкция ADD похожа на инструкцию COPY, но с дополнительными возможностями. Кроме копирования файлов с узла в образ контейнера, инструкция ADD также позволяет скопировать файлы из удаленного расположения с помощью задания URL-адреса.

Формат инструкции ADD выглядит следующим образом:

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

Рекомендации по выполнению инструкции ADD с Windows

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

ADD test1.txt /temp/ ADD test1.txt c:/temp/ 

При этом следующий формат с обратными косыми чертами работать не будет:

ADD test1.txt c:\temp\ 

Кроме того, в системе Linux во время копирования инструкция ADD распаковывает сжатые пакеты. В Windows эта функция недоступна.

Примеры использования инструкции ADD с Windows

В следующем примере содержимое исходного каталога добавляется в каталог с именем sqllite в образе контейнера.

ADD source /sqlite/ 

В следующем примере все файлы, начинающиеся с «config», добавляют в каталог c:\temp образа контейнера.

ADD config* c:/temp/ 

В этом примере Python для Windows скачивается в каталог c:\temp образа контейнера.

ADD https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe /temp/python-3.5.1.exe 

Дополнительные сведения об инструкции ADD см. в справочнике по инструкции ADD.

WORKDIR

Инструкция WORKDIR задает рабочий каталог для других инструкций Dockerfile, например RUN и CMD , а также рабочий каталог для запущенных экземпляров образа контейнера.

Формат инструкции WORKDIR выглядит следующим образом:

WORKDIR
Рекомендации по использованию инструкции WORKDIR с Windows

Если в Windows рабочий каталог содержит обратную косую черту, ее следует экранировать.

WORKDIR c:\\windows 

Примеры

WORKDIR c:\\Apache24\\bin 

Подробные сведения об инструкции WORKDIR см. в справочнике по WORKDIR.

CMD

Инструкция CMD задает команду по умолчанию, выполняемую при развертывании экземпляра образа контейнера. Например, если в контейнере будет размещен веб-сервер NGINX, CMD может включать инструкции для запуска этого веб-сервера, например с помощью команды nginx.exe . Если в файле Dockerfile указано несколько инструкций CMD , вычисляется только последняя из них.

Формат инструкции CMD выглядит следующим образом:

# exec form CMD [""] # shell form CMD
Рекомендации по использованию инструкции CMD с Windows

В Windows для путей к файлам, указанным в инструкции CMD , следует использовать символы косой черты или экранировать символы обратной косой черты \\ . Допустимы следующие инструкции CMD :

# exec form CMD ["c:\\Apache24\\bin\\httpd.exe", "-w"] # shell form CMD c:\\Apache24\\bin\\httpd.exe -w 

Однако следующий формат без соответствующих косых черт работать не будет:

CMD c:\Apache24\bin\httpd.exe -w 

Дополнительные сведения об инструкции CMD см. в справочнике по инструкции CMD.

Escape-символ

Во многих случаях инструкция Dockerfile должна занимать несколько строк. Для этого можно использовать escape-символ. Escape-символ Dockerfile по умолчанию — обратная косая черта ( \ ). Однако, поскольку обратная косая черта также является разделителем пути к файлу в Windows, использование его для разделения нескольких строк может вызвать проблемы. Чтобы их избежать, можно изменить escape-символ по умолчанию с помощью директивы анализатора. Дополнительные сведения о директивах анализатора см. в этом разделе.

В следующем примере показана инструкция RUN, которая занимает несколько строк и использует escape-символ по умолчанию.

FROM mcr.microsoft.com/windows/servercore:ltsc2019 RUN powershell.exe -Command \ $ErrorActionPreference = 'Stop'; \ wget https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python-3.5.1.exe ; \ Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \ Remove-Item c:\python-3.5.1.exe -Force 

Чтобы изменить escape-символ, поместите директиву Parser для escape-символа на первую строку Dockerfile. Это показано в следующем примере.

В качестве escape-символов можно использовать только символы: \ и ` .

# escape=` FROM mcr.microsoft.com/windows/servercore:ltsc2019 RUN powershell.exe -Command ` $ErrorActionPreference = 'Stop'; ` wget https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python-3.5.1.exe ; ` Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; ` Remove-Item c:\python-3.5.1.exe -Force 

Дополнительные сведения о директиве анализатора для escape-символа см. в этом разделе.

PowerShell в Dockerfile

Командлеты PowerShell

Командлеты PowerShell можно выполнять в Dockerfile при помощи операции RUN .

FROM mcr.microsoft.com/windows/servercore:ltsc2019 RUN powershell -command Expand-Archive -Path c:\apache.zip -DestinationPath c:\ 

Вызовы REST

При сборе данных или файлов из веб-службы удобно использовать командлет PowerShell Invoke-WebRequest . Например, при сборке образа, включающего Python, можно задать для $ProgressPreference значение SilentlyContinue , чтобы ускорить загрузку, как показано в следующем примере.

FROM mcr.microsoft.com/windows/servercore:ltsc2019 RUN powershell.exe -Command \ $ErrorActionPreference = 'Stop'; \ $ProgressPreference = 'SilentlyContinue'; \ Invoke-WebRequest https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python-3.5.1.exe ; \ Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \ Remove-Item c:\python-3.5.1.exe -Force 

Invoke-WebRequest также работает на сервере Nano Server.

Кроме того, при помощи PowerShell можно скачивать файлы во время создания образа, используя библиотеку .NET WebClient. Это может повысить производительность скачивания. Следующий пример скачивает программное обеспечение Python, используя библиотеку WebClient.

FROM mcr.microsoft.com/windows/servercore:ltsc2019 RUN powershell.exe -Command \ $ErrorActionPreference = 'Stop'; \ (New-Object System.Net.WebClient).DownloadFile('https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe','c:\python-3.5.1.exe') ; \ Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \ Remove-Item c:\python-3.5.1.exe -Force 

Сейчас Nano Server не поддерживает WebClient.

Сценарии PowerShell

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

Это ограничивает возможности кэширования слоев образов, а также ухудшает удобочитаемость файла Dockerfile.

Этот пример копирует сценарий с компьютера сборки в контейнер с помощью инструкции ADD . Затем этот сценарий выполняется с помощью инструкции RUN.

FROM mcr.microsoft.com/windows/servercore:ltsc2019 ADD script.ps1 /windows/temp/script.ps1 RUN powershell.exe -executionpolicy bypass c:\windows\temp\script.ps1 

Команда Docker build

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

Формат команды docker build выглядит следующим образом:

docker build [OPTIONS] PATH 

Например, следующая команда создает образ с именем «iis».

docker build -t iis . 

При инициации процесса сборки в выходных данных указывается состояние и выводятся все возникающие ошибки.

C:\> docker build -t iis . Sending build context to Docker daemon 2.048 kB Step 1 : FROM mcr.microsoft.com/windows/servercore:ltsc2019 ---> 6801d964fda5 Step 2 : RUN dism /online /enable-feature /all /featurename:iis-webserver /NoRestart ---> Running in ae8759fb47db Deployment Image Servicing and Management tool Version: 10.0.10586.0 Image Version: 10.0.10586.0 Enabling feature(s) The operation completed successfully. ---> 4cd675d35444 Removing intermediate container ae8759fb47db Step 3 : RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html ---> Running in 9a26b8bcaa3a ---> e2aafdfbe392 Removing intermediate container 9a26b8bcaa3a Successfully built e2aafdfbe392 

В результате создается новый образ контейнера, который в этом примере носит имя «iis».

docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE iis latest e2aafdfbe392 About a minute ago 207.8 MB windowsservercore latest 6801d964fda5 4 months ago 0 B 

Дополнительные материалы и справочники

  • Оптимизация файлов Dockerfile и сборка команды Docker build для Windows
  • Справочник по Dockerfile

Работа с Dockerfile

Консультация по продукту 1cloud

Приведем пример несложного Dockerfile, и на его примере разберем логику взаимодействия инструкций между собой.

FROM python:latest
RUN apt-get update && apt-get install python3-pip -y && pip install —upgrade pip && pip install pipenv
RUN mkdir -p /usr/src/app/
WORKDIR /usr/src/app/
COPY . /usr/src/app/
EXPOSE 5000
RUN pip install —no-cache-dir -r requirements.txt
CMD [«python», «web_interface.py»]

Наш Dockerfile, как и положено, открывается инструкцией FROM с указанием родительского образа. Выбрать подходящий образ можно на hub.docker.com или с помощью команды docker search имя образа . Например, docker search python .

Далее следуют несколько команд RUN . Поскольку каждая инструкция создает новый слой — хорошей практикой считается писать конвейеры логически связанных команд в одной инструкции RUN . Например, мы поместили команды обновления пакетов apt , установку пакетного менеджера pip и его обновление в одну инструкцию. Для комбинирования команд используется логический оператор «И», обозначающийся как && .

После серии инструкций RUN идет инструкция WORKDIR , которая устанавливает рабочую директорию контейнера. Все последующие команды, работающие с привязками к директории, такие как RUN , CMD , ENTRYPOINT будут выполняться исходя из установленной директории.

Далее идёт инструкция EXPOSE , которая выражает намерение открыть заданный порт. Инструкция сама по себе не открывает порт без применения команды docker run с ключом -P. Если нужно «повесить» контейнер на определённый внешний порт с переадресацией во внутренний порт контейнера — применяется ключ -p с указанием внутреннего и внешнего порта через «:». Например, docker run -p 5000:8080 .

Предпоследней идет опять инструкция RUN . Мы уже рассматривали её выше, однако здесь она исполняется с зависимостью от WORKDIR . Инструкция WORKDIR в качестве рабочей директории установила /usr/src/app/ , поэтому текущая инструкция RUN будет выполнять команду pip install —no-cache-dir -r requirements.txt из директории установленной инструкцией WORKDIR .

Завершающая инструкция в нашем Dockerfile — CMD с командой [«python», «web_interface.py»] . Опять же заметим, что здесь CMD связана с WORKDIR и скрипт web_interface.py будет выполнен из директории /usr/src/app/ . Важно запомнить, что CMD всегда идет последней и должна быть в единственном экземпляре.

Приведем таблицу инструкций Dockerfile с примерами команд и опций:

Инструкция Описание Пример использования Комментарий
FROM Задает базовый образ. Все последующие инструкции создают слои поверх родительского образа. FROM python:latest
FROM debian:wheezy
Быстрее всего можно найти образ с нужным тегом на Docker hub.
RUN Выполняет команду внутри контейнера и сохраняет результат. RUN mkdir /usr/src/app/
RUN apt-get update && apt-get install python3-pip -y
RUN может исполнять конвейер команд с логическими операторами && и ||.
COPY Копирует файлы и папки из текущей директории, где находится пользователь в указанную директорию в контейнере COPY . /usr/src/app/ COPY считывает позицию пользователя на хосте, поэтому первым аргументом идет «.».
ADD Копирует файлы и папки из текущей позиции пользователя, скачивает файлы по URL и работает с tar-архивами. ADD https://1cloud.ru/archive/api_config.ini
/usr/src/app/
Официальная документация не рекомендует применять ADD. Для скачивания по URL можно использовать RUN с CURL или WGET, а для копирования — COPY.
CMD Выполняет команду с указанными аргументами во время запуска контейнера. CMD [«python», «web_interface.py»] CMD должна быть одна в конце Dockerfile. CMD может вызывать исполняемый файл — .sh
Аргументы docker run переопределяют CMD. Если в Dockerfile нет CMD, обязательно должна быть инструкция ENTRYPOINT.
ENTRYPOINT Похожа на CMD, но при запуске контейнера не переопределяется в отличие от CMD. ENTRYPOINT [«python», «web_interface.py»] ENTRYPOINT может использоваться совместно с CMD.
ENV Задает переменные среды внутри образа, на которые могут ссылаться другие инструкции. ENV ADMIN=»ivan» ENV часто применяется для передачи информации в контейнеризированное приложение через переменные среды.
ARG Задает переменные, значение которых передается докером во время сборки образа. ARG maintainer=ivan В отличие от ENV-переменных, ARG-переменные недоступны во время выполнения контейнера.
WORKDIR Устанавливает рабочую директорию контейнера. WORKDIR /usr/src/app/ Последующие инструкции CMD, RUN, ENTRYPOINT наследуют привязку к директории установленной WORKDIR.
VOLUME Создает и подключает постоянный том хранения данных. VOLUME /data_cont_1 Просмотреть существующие тома можно командой docker volume ls. К контейнеру можно подключить существующий том, для этого достаточно указать уже существующий том.
EXPOSE Указывает планируемый рабочий порт у контейнера. Инструкция сама по себе не открывает порт. Чтобы использовался указанный в EXPOSE порт — нужно указать docker run -P при запуске контейнера. EXPOSE 5000 Если требуется пробросить и сопоставить разные порты внутри и снаружи контейнера используется docker run -p внутренний порт:внешний порт
LABEL Добавляет метаданные в образ. LABEL maintainer=»katkov_ivan» Обычно LABEL содержит информацию об авторе образа.

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

История контейнеризации

История контейнеризации

Краткая история контейнеризации и разбор конкретных технологий: chroot, jail, namespaces и cgroups.

Первый опыт работы с Docker

Хотелось бы поделиться «граблями», на которые успел наступить при работе с docker, интересными фишками и вообще рассказать про эту замечательную технологию.

Что за зверь такой?

Думаю, сегодня уже все слышали про docker, но все же:
Docker — контейнеризатор приложений. =) (более развернутое пояснение на вики)

А тут я собрал основные свойства технологии:

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

Запуск на любой машине без установки среды

Запуск с помощью одной команды

Возможность тестирования новых технологий без ее установки

Установка

Установка вполне дефолтная, но все же уделю этому немного внимания

Первое, что необходимо сделать — перейти на официальный сайт (удивительно, правда?!)

официальный сайт docker

далее, как показано на скриншоте выше, вбираем вашу систему, и дожидаемся загрузки.
Стандартная установка и все, поздравляю, Вы установили себе Docker Desktop.

первый запуск

Грабля при установке

На ОС Windows может появиться ошибка, связанная с Hyper-V (система аппаратной визуализации)

Решение:

Переходим в папку с Docker -> открыть файл start.sh ->открываем в любом текстовом редакторе -> найти следующую строку:

«$» create -d virtualbox —virtualbox-no-vtx-check $PROXY_ENV «$«

->снова запустить процесс установки (готово)

Работа с Docker

Есть несколько способов работы с Docker :

  • Работать в Docker Desktop (как устанавливать смотреть выше!)
  • При помощи cmd
  • Через IDE

Первый запуск

Запускаем наш Docker Desktop и открываем командную строку. После запуска приложения, у Вас должна отображаться следующая иконка (в скрытых значках):

в командной сроке пишем следующую команду:

docker

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

cmd

Если командная строка говорит, что не знает такой команды как «docker»

Проверьте переменные зависимости. В переменной Patch мог не прописаться путь до docker.exe. Найдите путь до docker.exe (обычно в папке bin) и добавьте путь в переменную Patch

Надеюсь у Вас все хорошо, и команда docker заработала и описание команд появилось и погода хорошая. Теперь то можно и скопировать команду из Docker Desktop

Про это команду идет речь

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

процесс создание контейнера

И что же мы сделали? Создали и запустили контейнер docker/getting-started на порту 80.
Вернемся в наш Docker Desktop и видим следующее:

Запущенный контейнер

Поздравляю — мы запустили контейнер.

Перейдем во вкладку Images и увидим следующее:

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

docker info

тогда увидим следующее

Видим всю информацию про все контейнеры и образы.

Давайте-то уже посмотрим, что у нас получилось. Переходим в Docker Desktop во вкладку Containers/Apps и нажимаем следующее:

Hello world! по docker-ски

Можем насладиться проделанной работой)

Контейнеры и образы

Контейнеры, образы — чтооооо?!
Давайте теперь немного теории(совсем чуть-чуть)

Образ – готовое решение , содержащее некий функционал(нельзя изменять), на его основе можем создать свой контейнер
Контейнер – это собранный проект , состоящий из образов: упакованное (контейнеризированное) приложение на основе образов

Посмотрим на картинку ниже:

Архитектура docker

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

  • Docker deamon – промежуточный api для нахождение и скачивания нужного image
  • Docker hub — место сбора различных образов
  • Images –образы
  • Containers- контейнеры

Установка образа

Давайте попробуем развернуть какой-нибудь контейнер (что-то повеселее стартовой страницы).

на

  • Заходим на сайт docker
  • Переходим во вкладку: Explore
  • В поиске вводим название нужного образа (я буду скачивать образ java- вы можете выбрать любой другой)

нажимаем, видим сразу готовенькую команду:

Копируем и вставляем в командную строку –> тем самым устанавливаем себе образ java:

Запуск образа

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

docker run имя_образа 

«Стоп» — скажите Вы . А откуда взять имя образа? А вот от куда:

docker images

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

Что получили

Запустить образ без контейнера невозможно – противоречит принципу docker, следовательно у нас создался контейнер на основе нашего образа, который мы пытались запустить

Давайте запустим наш контейнер в интерактивном режиме и убедимся, что мы все сделали верно. Вводим команду для запуска (даем свое имя- тут я обозвал его как JavaContainer):

docker run -it --name JavaContainer openjdk

Получаем запушенный контейнер:

Видим — запустили контейнер с java (об этом нам говорит надпись jshell- java оболочка). Ну хорошо, поигрались с java, а как вернуться обратно, команды docker то уже не работают. И что делать ?

Спокойствие, только спокойствие. Нажимаем магическую комбинацию Ctrl + D:

и о чудо, можно выдохнуть)

А что еще можно запустить?

Давайте , на последок, посмотрим еще возможности docker и запустим Ubuntu.

Схема запуска не сложнее, чем мы занимались выше, все действия аналогичные:

  • Аналогично шагам выше , зайдем на сайт и найдем Ubuntu, после воспользуемся командой в описании на сайте
  • Далее запустим в интерактивном режиме:
docker run –it –name имя_контейнера имя_образа

Итоги

Тут я собрал некоторые полезные команды docker и их описание на русском. Может кому пригодится).

Это был краткий обзор на технологию Docker, разумеется он не претендует на полноценный гайд: не было рассказано про Dockerfile или Docker compose или про запуск контейнеров в IDE, про создание собственных образов; НО цель данной статьи — помочь ознакомиться с базой а не рассказать про все и вся). В будущем поговорим про незатронутые тут моменты в Docker. Надеюсь моя статья была для Вас полезной!

  • IT-инфраструктура
  • DevOps

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

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