docker - обновить изображение на основе контейнера - PullRequest
0 голосов
/ 22 ноября 2018

Всякий раз, когда я работаю с докером-контейнером, я обнаруживаю, что по мере роста моего проекта мне неизбежно придется устанавливать новые пакеты Python, модули узлов и весь API-интерфейс, например opencv.

Но когда я перестраиваюобраз docker, все новое программное обеспечение и пакеты, которые я установил, стираются - так как они не указаны в файле docker.

Есть ли способ автоматически обновить файл docker новыми установками, которые я сделал, илисоздать том, в котором будут храниться пакеты apt-get?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

все новое программное обеспечение и пакеты, которые я установил, стираются - так как они не указаны в файле Docker

Это ошибка: исправьте ее.

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

Я бы предложил рабочий процесс:

  1. Создание работающего приложения без использования Docker вообще.Убедитесь, что все ваших языковых зависимостей записаны в соответствующем файле (package.json, setup.py, requirements.txt).Вы должны иметь возможность запускать ваше приложение в чистой среде с вашим исходным деревом и соответствующей языковой средой выполнения.

  2. Напишите Dockerfile, который устанавливает среду выполнения языка, любые необходимые зависимости хост-библиотеки,и ваше приложение.Полученное изображение должно быть полностью автономным;вам никогда не нужно вводить docker exec в него, чтобы что-то делать.

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

Если вы просматриваете вопросы SO , вы увидите много комментариев в виде "пожалуйста, включите свой Dockerfile в вопрос"».Это простой воспроизводимый способ создания образа, которым вы можете поделиться со своими коллегами сейчас или самим собой через шесть месяцев.Вы никогда не должны использовать docker commit: это рецепт для настройки самого особенного образа, который вы не можете вспомнить, как вы создали, и поэтому никогда не сможете обновить, что будет проблемой, когда у вас будет критическое обновление безопасности или новое программное обеспечениевам нужно установить.

0 голосов
/ 22 ноября 2018

Я думаю, фиксация Docker может помочь вашему делу

Посмотрите на приведенный ниже пример:

  • Создание контейнера из базового изображения 'alpine'
  • Добавить файл tmp в контейнер
  • Используйте " docker commit " и создайте из него новое изображение
  • Раскрутите новый контейнер из пользовательского изображения, котороеимеет файл, который был добавлен ранее

[node1] (local) root@192.168.0.8 ~
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[node1] (local) root@192.168.0.8 ~

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              196d12cf6ab1        2 months ago        4.41MB
[node1] (local) root@192.168.0.8 ~$ docker run -it alpine /bin/sh
/ # date > /tmp/now.txt
/ # cat /tmp/now.txt
Thu Nov 22 08:16:50 UTC 2018
/ # exit
[node1] (local) root@192.168.0.8 ~


$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
6e0913313df1        alpine              "/bin/sh"           25 seconds ago      Exited (0) 4 seconds ago                       practical_knuth
[node1] (local) root@192.168.0.8 ~
$ docker commit 6e0913313df1 custom-alpine:123
sha256:188d17ff3c5577ee858a6d71fbad410bb142fa818e11d0c965cdc634280512e2
[node1] (local) root@192.168.0.8 ~
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
custom-alpine       123                 188d17ff3c55        4 seconds ago       4.41MB
alpine              latest              196d12cf6ab1        2 months ago        4.41MB
[node1] (local) root@192.168.0.8 ~


$ docker history custom-alpine:123
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
188d17ff3c55        15 seconds ago      /bin/sh                                         72B
196d12cf6ab1        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:25c10b1d1b41d46a1…   4.41MB
[node1] (local) root@192.168.0.8 ~


$ docker run -it custom-alpine:123 /bin/sh
/ # cat /tmp/now.txt
Thu Nov 22 08:16:50 UTC 2018
/ # date
Thu Nov 22 08:18:46 UTC 2018
/ # exit
[node1] (local) root@192.168.0.8 ~
$
...