Что на самом деле делает создание родительского образа простого докера? - PullRequest
0 голосов
/ 03 октября 2018

Я следую инструкциям на веб-сайте Docker по созданию родительского изображения .Я очень новичок в Докере.Я на CentOS 7.5.

  1. Я запустил скрипт mkimage-yum.sh , предложенный на веб-сайте Docker для CentOS.Я не понял, почему последняя строка скрипта, rm -rf "$target", была там, потому что она, кажется, удаляет всю работу, выполненную скриптом.Поэтому я закомментировал его, и он оставляет каталог /tmp/mkimage-yum.sh.ahE8xx, который выглядит как минимальное изображение linux с типичной файловой структурой linux (например, /usr/, /etc/)

  2. Inмой домашний каталог, я скомпилировал программу,

main.c:

#include <stdio.h>
#include <stdlib.h>

int main(void){
    printf("Hello Docker World!\n");

    return 0;
}

Используя gcc -static -static-libgcc -static-libstdc++ -o hello main.c, я скомпилировал код в статически связанный исполняемый файл, как это предписанона веб-странице докера.

Я создал Dockerfile,

Например

FROM scratch
ADD hello /
CMD ["/hello"]
Я запускаю сервер dockerd и на отдельном терминале запускаю docker build --tag hello .

Вывод:

Sending build context to Docker daemon 864.8 kB
Step 1/3 : FROM scratch
 --->
Step 2/3 : ADD hello /
 ---> Using cache
 ---> a38d49d40e50
Step 3/3 : CMD /hello
 ---> Using cache
 ---> 3bcbb04c367f
Successfully built 3bcbb04c367f

Ну и дела свист, похоже, этоработал!Тем не менее, я все еще вижу только Dockerfile hello main.c в каталоге, я сделал это.Докер явно думает, что он что-то сделал, но что?Новые файлы не создавались.

Теперь я запускаю docker run --rm hello и выдает Hello Docker World!.

Однако я получаю смущающие ошибки от сервера dockerd:

ERRO[502548] containerd: deleting container                error=exit status 1: "container f336b3a5505879453b4f7a00c06acf274d0a5f8b3d260762273a2d7c0a846141 does not exist\none or more of the container deletions failed\n"
WARN[502548] f336b3a5505879453b4f7a00c06acf274d0a5f8b3d260762273a2d7c0a846141 cleanup: failed to unmount secrets: invalid argument

ВОПРОСЫ :

  1. Что именно docker build --tag hello . сделал?Я не вижу выхода из этого.

  2. Что такое ошибки dockerd?Может быть, вы ищете изображение докера, не созданное docker build?

  3. Как mkimage-yum.sh вписывается в это?Почему он удаляет всю работу, которую он делает в конце.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы не увидите никаких дополнительных файлов, созданных в вашей папке.Чтобы увидеть созданный образ, выполните команду docker images.Здесь вы должны увидеть ваше изображение, созданное с тегом hello.

. Когда вы запускаете docker run <imagename>, запускается контейнер с предоставленным изображением.Вот почему вы видите вывод вашей C-программы

0 голосов
/ 03 октября 2018

Когда вы запускаете --rm с docker run, контейнер запускается, а затем удаляет себя.Если вы хотите сохранить контейнер, удалите --rm из команды.
Команда docker build захватит файл docker и создаст локальное изображение, в вашем случае, с нуля с именем изображения hello.

...