Как создать изображение контейнера с нуля как пользователь без полномочий root? - PullRequest
0 голосов
/ 18 февраля 2019

С buildah Я пытаюсь создать образ контейнера, который должен содержать только программу cowsay и ее зависимости.Я делаю это на компьютере Fedora 29 , где у меня нет прав root.Вместо использования Dockerfile и команды buildah build-using-dockerfile (он же buildah bud) я хотел бы

  1. Создать пустой контейнер.
  2. Смонтировать его файловую систему.
  3. Используйте /usr/bin/dnf в моей хост-системе для установки пакетов непосредственно в файловую систему под точкой монтирования.
  4. Создание образа контейнера из файловой системы.

Команда buildah from scratch создает пустой контейнер, но при попытке смонтировать файловую систему выдается ошибка

[testuser@linux ~]$ container=$(buildah from scratch)
[testuser@linux ~]$ mnt=$(buildah mount $container)
cannot mount using driver overlay in rootless mode
ERRO[0000] exit status 1                                
[testuser@linux ~]$ 

Дополнительная информация

[testuser@linux ~]$ cat /etc/redhat-release 
Fedora release 29 (Twenty Nine)
[testuser@linux ~]$ buildah --version
buildah version 1.6 (image-spec 1.0.0, runtime-spec 1.0.0)
[testuser@linux ~]$ 

Что не так?Как я могу создать образ контейнера с нуля как пользователь без полномочий root?

1 Ответ

0 голосов
/ 18 февраля 2019

Короткая история

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

Чтобы создать образ контейнера, создайте файл build.sh с этим содержимым

container=$(buildah from scratch)                                                                                                                                                                       
mnt=$(buildah mount $container)                                                                                                                                                                         
LC_ALL=C dnf install --installroot $mnt --release 29 --setopt=install_weak_deps=False -q -y cowsay                                                                                                      
LC_ALL=C dnf --installroot $mnt clean all                                                                                                                                                               
buildah umount $container                                                                                                                                                                               
buildah commit $container cowsay-container1

Затем запустите скрипт build.sh в среде unshare

[testuser@linux ~]$ buildah unshare bash build.sh

Выведите список всех изображений, чтобы увидеть только что созданный контейнерimage

[testuser@linux ~]$ buildah images                                                                                                                                                                     
IMAGE NAME                                               IMAGE TAG            IMAGE ID             CREATED AT             SIZE                                                                          
localhost/cowsay-container1                              latest               9d9b88a8d5f1         Feb 18, 2019 17:26     307 MB                                                                        
[testuser@linux ~]$ 

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

[testuser@linux ~]$ podman run localhost/cowsay-container1 cowsay hello                                                                                                                                
 _______                                                                                                                                                                                                
< hello >                                                                                                                                                                                               
 -------                                                                                                                                                                                                
        \   ^__^                                                                                                                                                                                        
         \  (oo)\_______                                                                                                                                                                                
            (__)\       )\/\                                                                                                                                                                            
                ||----w |                                                                                                                                                                               
                ||     ||                                                                                                                                                                               
[testuser@linux ~]$

Сценарий build.sh можно улучшить, добавив некоторые команды buildah configпредоставить некоторую информацию метаданных (например, buildah config --created-by и buildah config --cmd).

Более длинная история

Вместо создания образа контейнера с помощью скрипта build.sh , этоТакже возможно войти в среду unshare и запустить команды сборки вручную.

[testuser@linux ~]$ cat /etc/redhat-release 
Fedora release 29 (Twenty Nine)
[testuser@linux ~]$ buildah unshare
[root@linux ~]# container=$(buildah from scratch)
[root@linux ~]# mnt=$(buildah mount $container)
[root@linux ~]# LC_ALL=C dnf install --installroot $mnt --release 29 --setopt=install_weak_deps=False -q -y cowsay
warning: /home/testuser/.local/share/containers/storage/overlay/cc67b957fb78eebe6a861a8b69ef4728d0660a636645813224b6ba94fbc80ce0/merged/var/cache/dnf/updates-0b4cc238d1aa4ffe/packages/bash-4.4.23-6.fc29.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 429476b4: NOKEY
Importing GPG key 0x429476B4:
 Userid     : "Fedora 29 (29) <fedora-29@fedoraproject.org>"
 Fingerprint: 5A03 B4DD 8254 ECA0 2FDA 1637 A20A A56B 4294 76B4
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-29-x86_64
[root@linux ~]# LC_ALL=C dnf --installroot $mnt clean all
33 files removed
[root@linux ~]# buildah umount $container
020ee8e3fb29274a306c441770d2458c732e84076cc0487ce6ea06ac957640d4
[root@linux ~]# buildah commit $container cowsay-container2
Getting image source signatures
Copying blob b3fbecd80150: 292.45 MiB / 292.45 MiB [========================] 2s
Copying config 8aa2ad2933ce: 263 B / 263 B [================================] 0s
Writing manifest to image destination
Storing signatures
8aa2ad2933ce33c8ed8b7551c4a3261177ebd811c9b813b40d5ea77536ac6ef5
[root@linux ~]# exit
exit
[testuser@linux ~]$ buildah images
IMAGE NAME                                               IMAGE TAG            IMAGE ID             CREATED AT             SIZE
localhost/cowsay-container1                              latest               9d9b88a8d5f1         Feb 18, 2019 17:26     307 MB
localhost/cowsay-container2                              latest               8aa2ad2933ce         Feb 18, 2019 17:47     307 MB
[testuser@linux ~]$ podman run localhost/cowsay-container2 cowsay hello
 _______
< hello >
 -------
    \   ^__^
     \  (oo)\_______
    (__)\       )\/\
        ||----w |
        ||     ||
[testuser@linux ~]$ 
...