Все, что вам нужно знать, чтобы писать 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
, которые будут использоваться только в DockerfileENV
- переменные среды, которые будут использоваться в 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 и создать образ.
Первоначально опубликовано на https://kushajveersingh.github.io 3 октября 2021 г.