docker run -it ubuntu
. gjiten
). выхода
из контейнера установленное программное обеспечение исчезнет. gjiten
) в моем контейнере? Разное
apt
, где установить пакет. (Если apt
допускает указание целевого каталога, это будет это лучшее решение.) apt
, и обновление программного обеспечения становится болезненным. Изменить: Ответ:
Завершенные контейнеры докеров все еще находятся около , а изменения изнутри контейнеры не потеряны . Я создал на это ответ.
Одно решение
Если есть доступ к хост-машине, одним из решений может быть фиксирует
изменения. Тем не менее, это создаст совершенно новый образ.
root @ 9a20cddf27c0
в контейнере docker commit [идентификатор контейнера] [имя нового образа]
Реквизиты: @Kulfy из комментариев.
Я думаю, вам нужно понять идея образа контейнера . Существует четкое различие между контейнерами и образами контейнеров .
Каждый контейнер запускается из статического образа. Сам образ представляет собой сжатый пакет, в котором есть все необходимое для запуска данного программного обеспечения (двоичные файлы, прямые зависимости, сторонние зависимости, файлы конфигурации, пользователи, разрешения для файлов и все это).
После запуска контейнера все он создает эфемерный, а пользовательские данные сохраняются в томах вне контейнера.
Если вам требуется постоянная установка определенной библиотеки или пакета, вам необходимо изменить образ. На практике это означает создание собственного Dockerfile
и наследование ОТ
базового образа, который вы хотите изменить. Создав свой образ, вы можете запускать контейнеры на его основе.
Официальные документы в наши дни довольно ясны: https://docs.docker.com/get-started/part2/
I Выяснилось, что мое восприятие среды докера было неправильным, поэтому возник этот вопрос.
Информация из завершенного контейнера не потеряна! Установленные программы сохраняются даже после выхода *. Таким образом, этот вопрос в основном устарел.
Далее я пытаюсь прояснить, как docker работает в этом отношении.
* Это противоречит комментарию Кулфи «Когда вы выходите из экземпляра или завершаете службу docker, изменения и файлы теряются, если изменения не были зафиксированы во время использования образа ».
docker run ubuntu
создает контейнер из образа ubuntu
. docker ps -a
, который покажет вам даже закрытые контейнеры. docker run -it ubuntu
создает контейнер из образа ] ubuntu
и запускает интерактивный режим в оболочке. touch aaa
или установите gjiten
) exit
в контейнере, вы выйдете из терминала (TTY) в этом контейнере. Поскольку этот терминал был основным процессом этого контейнера, который теперь завершается, контейнер выйдет (= завершит работу ОС внутри контейнера). docker ps -a
, вы все равно сможете увидеть там свой контейнер. Все изменения остаются в силе; Он просто не работает в данный момент. docker container start -i [containerID]
( -i
для интерактивный). ls
, чтобы увидеть, что ваш файл aaa
все еще существует. docker ps
, и он покажет вам текущий запущенный контейнер. Кстати: обратите внимание, что вам нужно создать контейнер с помощью -it
, чтобы использовать -i
в начало контейнера докеров -i [containerID]
Вам необходимо создать Dockerfile и создать сценарий для собственного контейнера из существующего образа. Синтаксис выглядит следующим образом:
FROM UBUNTU:LATEST
RUN <some command like apt install>
Вам понадобится RTFM, чтобы понять его полностью, потому что это еще не все. Лучший способ учиться - взглянуть на любой проект, который присутствует как на dockerhub, так и на github. Таким образом вы можете увидеть «готовый продукт», а также способ изготовления контейнера.
HTH немного, s1mmel
Вот живой пример. Это Dockerfile из моего единственного репо, которое я создал некоторое время назад. Сервер Minecraft papermc. Это не поможет вам полностью, но для начала, я думаю, этого достаточно.