Все, что вам нужно знать, чтобы писать Dockerfile и запускать контейнеры с помощью Docker, с примером настройки Ubuntu, пользователя по умолчанию, Miniconda, PyTorch.

Docker позволяет запускать ваши программы как контейнеры поверх операционной системы хоста. Dockerfile предоставляет инструкции по созданию образов, которые затем запускаются как контейнеры. В этом посте обсуждается все, что вам нужно для создания Dockerfile, с примером настройки Ubuntu, Miniconda и PyTorch.

Создание имиджа

Команда docker build используется для создания изображения из Dockerfile и контекста (ПУТЬ или URL). контекст относится ко всем файлам, указанным в команде сборки. Шаги по созданию образа следующие.

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

Укажите контекст

контекст может быть aPATH в локальной файловой системе или удаленным URL, относящимся к репозиторию Git. Пример указания контекста сборки показан ниже.

> docker build .
> docker build /path/to/context

Укажите контекст с URL-адресом

Docker также предоставляет вам возможность создавать изображение из URL-адреса Git. Это в основном используется для конвейеров непрерывной интеграции. Чтобы создать изображение с использованием URL-адреса, Dockerfile должен присутствовать по указанному URL-адресу (а не в локальной файловой системе). docker build автоматизирует для вас следующие шаги при создании изображения из URL-адреса Github.

> git clone {GITHUB_URL}
> git checkout {BRANCH}
> cd repo
> docker build .

Команда для создания образа выглядит следующим образом

> docker build {GITHUB_URL}#{BRANCH}
> docker build https://github.com/KushajveerSingh/Dockerfile.git#master

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

Укажите расположение Dockerfile

Вы можете использовать флаг -f, чтобы указать путь к Dockerfile. По умолчанию предполагается, что Dockerfile находится в корне контекста.

> docker build -f /path/to/Dockerfile .
> docker build -f ubuntu_conda_pytorch/Dockerfile https://github.com/KushajveerSingh/Dockerfile.git#master

Docker автоматически cd в репозиторий Github, поэтому путь не должен включать имя репозитория.

Укажите репозиторий и тег

Рассмотрим следующий Dockerfile

FROM ubuntu:18.04
LABEL PURPOSE = "test Dockerfile"

Когда мы создаем образ, докер назначает хеш фиксации как IMAGE ID.

Вы можете указать репозиторий и тег для каждого образа докера, который затем можно использовать для легкого доступа к образу с помощью флага -t. REPOSITORY можно рассматривать как имя вашего репозитория Github, а TAG используется для указания версии вашего изображения. Например, ubuntu:18.04, ubuntu:latest.

Вы также можете указать несколько тегов

> docker build -t test:0.1 -t test:latest .

Слои образа Docker

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

Почему Докер это делает? Рассмотрим следующий Dockerfile

FROM ubuntu:18.04
RUN COMMAND_1
RUN COMMAND_2
RUN COMMAND_1

Теперь, когда мы построим изображение, мы создадим следующие слои

  • Слои из ubuntu:18.04 Dockerfile
  • RUN COMMAND_1 создаст новый слой
  • RUN COMMAND_2 создаст новый слой
  • RUN COMMAND_3 создаст новый слой

Слой - это в основном изменение изображения или промежуточного изображения. Каждый раз, когда мы запускаем инструкцию (например, FROM, RUN, COPY), мы вносим изменения в предыдущее изображение. Эти изменения приводят к созданию нового слоя. Наличие промежуточных слоев помогает в процессе сборки. Если вы внесете изменения в файл Dockerfile, Docker построит только тот слой, который был изменен, и слои после него. Это может сэкономить много времени.

Примечание. - Будьте осторожны при создании новых слоев, так как они также увеличивают размер вашего изображения.

BuildKit

Docker поддерживает бэкэнд moby / buildkit для создания образов. BuildKit предоставляет множество преимуществ по сравнению с реализацией по умолчанию, предоставляемой Docker.

  • Обнаруживать и пропускать неиспользуемые этапы сборки
  • Распараллеливание независимых этапов сборки
  • Постепенно переносите только измененные файлы в контексте сборки между сборками
  • Обнаружение и пропуск передачи неиспользуемых файлов в контексте сборки
  • Используйте внешние реализации Dockerfile с множеством новых функций
  • Избегайте побочных эффектов с остальной частью API (промежуточные изображения и контейнеры)
  • Назначьте приоритет кешу сборки для автоматической очистки

Чтобы использовать бэкэнд BuildKit, вам необходимо установить переменную среды DOCKER_BUILDKIT=1.

> DOCKER_BUILDKIT=1 docker build .

OR

> export DOCKER_BUILDKIT=1
> docker build .

Резюме

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

Побег персонаж

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

# escape=\
FROM ubuntu:18.04
RUN INSTRUCTION_1 \
    INSTRUCTION_2

В Windows \ используется для указания пути. Поэтому может быть полезно изменить это на что-то вроде обратной кавычки.

# escape=`
FROM ubuntu:18.04
RUN INSTRUCTION_1 `
    INSTRUCTION_2

ОТ

Все файлы Dockerfile начинаются с FROM инструкции. FROM инициализирует новый этап сборки и устанавливает базовый образ для последующих инструкций. Общий синтаксис:

FROM [--platform=<platform>] <image>[:tag] [AS <name>]

Здесь […] означает необязательный. Вы можете начать с чистого изображения и построить все на его основе.

FROM scratch

Или вы можете построить поверх публичного образа (например, Ubuntu, PyTorch, nvidia / cuda)

FROM ubuntu:18.04

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

> DOCKER_BUILDKIT=1 docker build -t test:0.1 .
> docker run -it --name temp test:0.1

Вы увидите, что это простая установка. У него нет ни пользователя, ни sudo. Он предоставляет нам ядро ​​Linux, и мы должны построить все на его основе.

В следующих парах разделов мы рассмотрим все инструкции, которые можно найти в Dockerfile, а затем мы будем использовать все эти инструкции для создания образа Ubuntu / Miniconda / PyTorch.

ARG и ENV

Переменные среды часто используются для объявления переменных в сценариях или для установки некоторых переменных, которые будут сохраняться при запуске контейнера. Docker позволяет нам устанавливать переменные двумя способами: ARG и ENV.

  • Инструкция ARG определяет переменные, которые пользователи будут передавать во время сборки с помощью команды docker build с использованием флага --build-arg <name>=<value>. Они будут использоваться только в Dockerfile.
  • Инструкция ENV устанавливает переменную среды в Dockerfile, и переменная среды будет сохраняться при запуске контейнера из полученного образа.

ARG

Мы можем указать версию Ubuntu как ARG (код Dockerfile показан ниже)

ARG UBUNTU_VERSION
FROM ubuntu:$UBUNTU_VERSION

И тогда мы можем указать версию ubuntu при построении образа

> DOCKER_BUILDKIT=1 docker build -t test --build-arg UBUNTU_VERSION=18.04 .

Мы также можем указать значение по умолчанию ARG как

ARG UBUNTU_VERSION=18.04

Чтобы получить доступ к значению ARG, вы можете использовать синтаксис $UBUNTU_VERSION или ${UBUNTU_VERSION}. Второй метод полезен, когда вы хотите получить доступ к значению ARG внутри строки.

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

  • Используйте ARG для переменных, которые необходимы только в Dockerfile и не нужны при работе контейнера. В этом случае версия Ubuntu не нужна при работающем контейнере.
  • ARG, который использовался до FROM, может использоваться только в FROM
  • ARG, используемый после FROM, может использоваться в любом месте Dockerfile (есть исключение в случае многоступенчатой ​​сборки, т.е. когда мы используем несколько FROM инструкций в одном Dockerfile)

ENV

Это то же самое, что и ARG, за исключением того, что ENV будет сохраняться при запуске контейнера из полученного образа. Пример этого включает

ENV PYTORCH_VERSION 1.9.0
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64
# Setting PATH variables
ENV PATH  /home/default/miniconda3/bin:$PATH

LABEL и EXPOSE

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

МЕТКА

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

LABEL author = "Kushajveer Singh"
LABEL email = "[email protected]"
LABEL website = "kushajveersingh.github.io"

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

РАЗОБЛАЧАТЬ

Инструкция EXPOSE сообщает Docker, что контейнер прослушивает указанные сетевые порты во время выполнения. Фактически он не публикует порт. Он просто действует как своего рода документация между лицом, создавшим образ, и лицом, запускающим контейнер, о том, какие порты должны быть опубликованы.

EXPOSE 8889
EXPOSE 80/udp
EXPOSE 80/tcp

Теперь человек, запускающий контейнер, может указать порт с помощью флага -p следующим образом

> DOCKER_BUILDKIT=1 docker build -t test .
> docker run -p 80:80/tcp -p 80:80/udp test

ДОБАВИТЬ и КОПИРОВАТЬ

В начале мы обсуждали, что контекст передается демону Docker перед чтением файла Docker. Теперь, чтобы добавить файлы к изображению из контекста, мы можем использовать ADD или COPY. Обе инструкции похожи, но ADD выполняет некоторые дополнительные действия (с которыми вам нужно быть осторожным). Синтаксис обеих команд одинаковый

ADD [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] <src>... <dest>

И пример использования будет

COPY --chown=default:sudo /file/on/local/drive /path/on/image
COPY --chown=default:sudo script.sh /home/default

Путь <dest> - это либо абсолютный путь, либо путь относительно WORKDIR, который мы обсудим позже.

Теперь давайте посмотрим на различия между каждой инструкцией.

КОПИРОВАТЬ

COPY [--chown=<user>:<group>] <src>... <dest>

Инструкция COPY копирует файлы или каталоги из <src> и добавляет их в файловую систему контейнера по адресу <dest>. Файлы создаются с UID и GID по умолчанию, равными 0, если вы не укажете --chown. Вот и все. COPY просто скопирует файл из <src> в <dest>.

ДОБАВЛЯТЬ

ADD [--chown=<user>:<group>] <src>... <dest>

Инструкция ADD также копирует файлы или каталоги с <src> на <dest>, как COPY, но также выполняет некоторые дополнительные действия.

  • <src> может быть URL удаленного файла
  • Если <src> является файлом tar (identity, gzip, bzip2, xz), он будет распакован как каталог. Если tar-файл является удаленным URL-адресом, он не распаковывается.

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

WORKDIR

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

WORKDIR /home/default
RUN ...
# You can also provide path relative to previous WORKDIR
WORKDIR ../home

БЕГАТЬ

Синтаксис команды:

RUN <command>

и он запустит команду в оболочке (по умолчанию /bin/sh -c в Linux). Каждая RUN инструкция будет создавать новый уровень, и по этой причине вы должны попытаться сгруппировать несколько RUN инструкций в одну логическую группу.

Чтобы сгруппировать несколько RUN инструкций, вы можете использовать точку с запятой или &&.

Желательно использовать && вместо ;. Причина в том, что когда вы группируете несколько команд, используя точку с запятой, следующая инструкция будет выполняться независимо от того, вызвала ли предыдущая инструкция ошибку или нет. С && дело обстоит иначе. Если команда терпит неудачу, выполнение останавливается, и следующая команда не выполняется.

Это все инструкции, которые нам понадобятся для создания образа Docker. Я оставил некоторые инструкции, так как они нам не понадобятся, но вы можете проверить полную Справочник по Dockerfile для получения информации об этих командах (например, ENTRYPOINT, CMD, VOLUME).

Сводка всех команд

  • FROM - Каждый Dockerfile начинается с этой инструкции и предоставляет базовый образ, на основе которого мы создаем наш образ.
  • ARG - мы можем указать аргументы командной строки, используя --build-arg, которые будут использоваться только в Dockerfile
  • ENV - переменные среды, которые будут использоваться в Dockerfile и сохранятся при запуске контейнера.
  • LABEL - Чтобы указать метаданные, такие как имя автора, ...
  • EXPOSE - для документирования портов, которые предназначены для использования при запуске контейнера.
  • COPY - для добавления файлов или каталогов из контекста в изображение (только копирует файл)
  • ADD - Для добавления файлов или каталогов из контекста в изображение (можно копировать с удаленного URL, автоматически распаковывать tar-файл)
  • WORKDIR - укажите рабочий каталог для других инструкций, использующих путь
  • RUN - Для запуска любой команды из оболочки
  • USER - Установить пользователя по умолчанию при запуске контейнера

Ubuntu, PyTorch Dockerfile

Базовое изображение

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

ARG UBUNTU_VERSION=18.04
FROM ubuntu:$UBUNTU_VERSION

Обновите ubuntu и установите утилиты

Давайте проверим Dockerfile, прежде чем обсуждать, что происходит

Первый шаг - это обновление Ubuntu. Обратите внимание, что пользователем по умолчанию в Ubuntu является root. После того, как мы настроим sudo и default пользователя, нам нужно будет добавить эти инструкции с sudo. Это делается с помощью

--fix-missing не является обязательным. Он используется в случае, если у нас нарушены зависимости, и использование этого флага может помочь нам решить проблему в большинстве случаев. Поскольку мы начинаем с чистой установки, этот флаг мало что делает.

apt install -y --no-install-recommends. Флаг -y помогает нам обойти запрос «да / нет». Каждый пакет в Ubuntu имеет три зависимости

  • основные зависимости
  • рекомендуемые пакеты
  • предлагаемые пакеты

По умолчанию Ubuntu устанавливает основные и рекомендуемые пакеты (для установки предлагаемых пакетов вам необходимо указать --install-suggests флаг для apt install). Наша основная цель - свести размер образа докера к минимуму, и по этой причине мы не хотим тратить место на установку рекомендуемых пакетов. Флаг --no-install-recommends делает это, и в результате мы устанавливаем только основные зависимости.

Теперь вы можете установить любой другой пакет, который вам может потребоваться, например ca-certificates (требуется curl), sudo, curl, git.

Второй шаг - очистить пакеты, которые больше не нужны, и очистить любой локальный кеш. Это делается с помощью

RUN apt clean && \
    rm -rf /var/lib/apt/lists/*

Когда мы устанавливаем пакеты, Ubuntu поддерживает кеш пакетов в /var/cache. Причина в том, что если что-то пойдет не так при обновлении, и у нас нет доступа к сетевому подключению, мы можем вернуться к старой версии в кеше, чтобы понизить версию пакета. Но нам не нужен этот кеш для образа Docker, поэтому мы можем удалить его с помощью apt clean. В частности, apt clean удалит файлы в /var/cache/apt/archives/ и /var/cache/apt/archives/partial, оставив файл lock и подкаталог partial.

/var/lib/apt хранит данные, связанные с менеджером пакетов apt. Эти данные автоматически загружаются каждый раз, когда мы запускаем apt update, поэтому нет смысла хранить эти данные, и мы можем безопасно удалить их, чтобы уменьшить размер изображения, используя rm -rf /var/lib/apt/lists/*.

Примечание. - Чтобы установить пакет после rm -rf /var/lib/apt/lists/*, необходимо сначала запустить apt update, и только после этого вы сможете установить требуемый пакет.

Настройка sudo и пользователя по умолчанию

Следующим шагом является настройка учетной записи root и пользователя по умолчанию. Содержимое Dockerfile показано ниже.

Давайте посмотрим, что делает каждый флаг в useradd

  • -r используется для создания системной учетной записи, т. Е. Учетной записи, созданной операционной системой во время установки, или учетной записи root.
  • -m используется для создания домашнего каталога, если он не существует
  • -d /home/default используется для указания местоположения домашнего каталога
  • -s /bin/bash используется для указания имени оболочки входа пользователя. Вы можете пропустить это, если хотите.
  • -g root -G sudo Это интересно. Флаг -g используется для указания группы, к которой принадлежит пользователь, а -G используется для предоставления списка дополнительных групп, к которым принадлежит пользователь.

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

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

  • -u 1000 используется для предоставления идентификатора пользователя
  • $USERNAME - имя пользователя, который будет создан

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

echo "${USERNAME}:${PASSWORD}" | chpasswd

После выполнения вышеуказанных шагов мы сделали следующее

  • Добавлен пользователь default
  • Пользователь default может получить привилегии root, используя sudo su и default в качестве пароля.

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

> sudo hello > /dev/null
sudo: setrlimit(RLIMIT_CORE): Operation not permitted

Это было решено в последнем патче, но Ubuntu не поставляется с этим, поэтому, чтобы остановить это раздражающее предупреждение, вы можете использовать следующую команду

echo "Set disable_coredump false" >> /etc/sudo.conf

Когда вы запустите контейнер, вы увидите заметку о sudo, как показано ниже.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Это сообщение будет удалено при первом запуске команды с sudo или его можно удалить, добавив файл ~/.sudo_as_admin_successful.

touch /home/$USERNAME/.sudo_as_admin_successful

Вот и все, у вас есть настройка sudo и default пользователь. Когда вы запустите контейнер, по умолчанию вы будете root. Но вы можете установить пользователем по умолчанию default, используя следующую команду

USER $USERNAME
WORKDIR /home/$USERNAME

Краткое изложение Dockerfile до настоящего момента

Наш Dockerfile будет иметь следующее содержимое

Мы можем сгруппировать все команды для обновления Ubuntu, установки sudo и пользователя по умолчанию в одну команду RUN для экономии места.

Доступ к графическому процессору Nvidia

Для доступа к GPU хоста в контейнере Docker вы можете указать флаг --gpus при запуске контейнера.

> docker run --gpus all -it --name temp test:0.1
> docker run --gpus 0,2 -it --name temp test:0.1

Для этого требуется только установка драйвера Nvidia на хост-компьютере, а затем вы можете использовать nvidia-smi в контейнере Docker, чтобы проверить, обнаруживаются ли графические процессоры.

Установка Miniconda

Miniconda можно использовать для простой настройки Python. Просто возьмите ссылку на последний установщик Linux со страницы документации (в данном случае это Python 3.9) и укажите место, куда вы хотите установить Miniconda.

Настройка Miniconda довольно проста.

  • Установите переменные MINICONDA_DOWNLOAD_LINK и MINICONDA_INSTALL_PATH
  • Установите переменную среды ENV PATH ${MINICONDA_INSTALL_PATH}/miniconda3/bin:$PATH, которая позволит нам запускать conda из любого места файловой системы.
  • Установите miniconda, используя bash Miniconda.sh -b -p ./miniconda3
  • Удалите файл .sh для экономии места, используя rm Miniconda.sh
  • conda init можно пропустить, поскольку мы уже установили ENV PATH
  • Обновите пакеты conda до последней версии, используя conda update -y --all

Установка PyTorch

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

Примечание. - По какой-то причине numpy не устанавливался, когда я запускал команду conda install, поэтому мне пришлось добавить команду pip install numpy.

Удалить кеш conda / pip

Conda хранит кеш индексов, файлы блокировки, архивы и кеш неиспользуемых пакетов. Их можно безопасно удалить для экономии места с помощью команды conda clean -afy. Так что добавьте это как последнюю команду conda в Dockerfile.

pip хранит кеш в ~/.cache/pip, и эту папку можно безопасно удалить с помощью команды rm -rf ~/.cache/pip.

Создайте образ

Теперь мы готовы построить образ.

> DOCKER_BUILDKIT=1 docker build -t test:0.1 .

А затем мы можем запустить контейнер, чтобы опробовать изображение

> docker run --gpus all -it --name temp test:0.1
default@a7f862b6bf73:~$

Мы можем попробовать nvidia-smi проверить, обнаруживаются ли графические процессоры.

И, как мы видим, графический процессор обнаруживается вместе с драйвером Nvidia хост-машины. Затем мы можем попробовать запустить несколько команд PyTorch

Мы успешно установили PyTorch и имеем рабочую среду Ubuntu. В следующем разделе обсуждаются различные docker команды, необходимые для создания образа, запуска контейнеров и отправки образов в dockerhub.

Полезные команды Docker

Построить образы

Мы уже обсуждали команду для создания образов из Dockerfile в первом разделе.

Ссылку на docker build можно найти здесь.

Список всех изображений

docker image ls можно использовать для получения списка всех изображений в вашей локальной файловой системе.

Вы можете использовать эту команду, чтобы проверить SIZE изображения и получить IMAGE ID в случае, если вы забыли пометить изображение. Docker хранит образы в /var/lib/docker/ в Linux, однако возиться с содержимым этой папки не рекомендуется, поскольку хранилище Docker сложное и зависит от того, какой драйвер хранилища используется.

Ссылку на docker image ls можно найти здесь.

Удаление изображений

docker image rm можно использовать для удаления изображения, указав тег или IMAGE ID.

Ссылку на docker image rm можно найти здесь.

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

Ссылку на docker image prune можно найти здесь.

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

docker container ls -a можно использовать для вывода списка всех контейнеров (запущенных и остановленных). Если вы хотите отобразить только запущенные контейнеры, используйте docker container ls.

Мы можем получить статус всех контейнеров. В приведенных выше примерах temp_1 не запущен, а temp_2 запущен. И мы также видим, что контейнеры не используют PORTS.

Ссылку на docker container ls можно найти здесь.

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

docker start можно использовать для запуска одного или нескольких остановленных контейнеров (для этого также можно использовать docker container start).

> docker start temp_1
temp_1

Ссылку на docker start можно найти здесь.

Присоединение к контейнеру

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

> docker attach temp_1

Ссылку на docker attach можно найти здесь.

Остановка контейнера

docker stop или docker kill можно использовать для остановки нескольких работающих контейнеров. docker stop можно рассматривать как изящную остановку. Разница между двумя командами заключается в

  • docker stop. Остановите работающий контейнер. Основной процесс получит SIGTERM, а после льготного периода будет получено SIGKILL.
  • docker kill. Убейте работающий контейнер. Основной процесс получит SIGKILL или любой сигнал, указанный пользователем с помощью --signal
> docker stop temp_1
> docker kill temp_1

Ссылку на docker stop можно найти здесь, а ссылку на docker kill можно найти здесь.

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

docker rm можно использовать для удаления остановленных контейнеров.

> docker rm temp_1

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

> docker rm temp_1 || true

Ссылку на docker rm можно найти здесь.

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

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

> docker run -it --gpus all --name temp -p 8888:8888 test:0.1
  • -it откроет терминал, подключенный к контейнеру
  • --gpus all используется, чтобы указать, какие графические процессоры предоставить доступ к контейнеру.
  • --name temp название контейнера
  • -p 8888:8888 для публикации портов. Формат - {HOST_PORT}:{CONTAINER_PORT}. Чтобы использовать записные книжки jupyter внутри докера, вам необходимо опубликовать порт.

Ссылку на docker run можно найти здесь.

Подключить новый терминал к контейнеру

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

> docker exec -it {container_name} bash

docker attach {container_name} не может создать новый сеанс терминала. Он подключится к старому сеансу.

Удалить все контейнеры / изображения

Чтобы удалить все контейнеры и изображения докеров в вашей системе, вы можете использовать следующие две команды (в указанном порядке)

# Remove all containers
> docker rm -vf $(docker ps -a -q)
# Remove all images
> docker rmi -f $(docker images -a -q)

Отправить образ в Dockerhub

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

Рабочий пример показан ниже

Первый аргумент (test:0.1) для docker tag - это имя образа в локальной файловой системе, а второй аргумент - это место в Dockerhub, куда вы хотите отправить образ.

Ссылки на приведенные выше команды

Ссылки

  • KushajveerSingh / Dockerfile - Вы можете получить доступ к Dockerfile из этого репозитория для создания своих собственных образов. Документация предоставляется в README для всех доступных файлов Dockerfile.
  • Dockerhub kushaj - Все изображения можно найти по этой ссылке. Если вы хотите использовать изображение, но не его содержимое, вы можете получить доступ к Dockerfile, который используется для создания образа, по указанной выше ссылке Github и создать образ.

Twitter, linkedin, github

Первоначально опубликовано на https://kushajveersingh.github.io 3 октября 2021 г.