1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#!/usr/bin/env bash
# author : ipbabble
# Assumptions install buildah and podman
# login to Quay.io using buildah if you want to see the image push
# otherwise it will just fail the last step and no biggy.
# buildah login quay.io
# Set some of the variables below
#################
# is_rootless # Check if we run as normal user
#################
function is_rootless() {
[ "$(id -u)" -ne 0 ]
}
## Steps in this demo use pkg-managers like dnf and yum which
## must be invoked as root. Similarly `buildah mount` only work
## as root. The `buildah unshare` command switches your user
## session to root within the user namespace.
if is_rootless; then
buildah unshare $0
exit
fi
demoimg=myshdemo
quayuser=ipbabble
myname=WilliamHenry
distrorelease=30
pkgmgr=dnf # switch to yum if using yum
#Setting up some colors for helping read the demo output
bold=$(tput bold)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
cyan=$(tput setaf 6)
reset=$(tput sgr0)
echo -e "Using ${green}GREEN${reset} to introduce Buildah steps"
echo -e "Using ${yellow}YELLOW${reset} to introduce code"
echo -e "Using ${blue}BLUE${reset} to introduce Podman steps"
echo -e "Using ${cyan}CYAN${reset} to introduce bash commands"
echo -e "Building an image called ${demoimg}"
read -p "${green}Start of the script${reset}"
set -x
read -p "${green}Create a new container on disk from scratch${reset}"
newcontainer=$(buildah from scratch)
read -p "${green}Mount the root directory of the new scratch container${reset}"
scratchmnt=$(buildah mount $newcontainer)
read -p "${cyan}Lets see what is in scratchmnt${reset}"
ls $scratchmnt
echo -e "${red}Note that the root of the scratch container is EMPTY!${reset}"
read -p "${cyan}Time to install some basic bash capabilities: coreutils and bash packages${reset}"
if [ "$pkgmgr" == "dnf" ]; then
$pkgmgr install --installroot $scratchmnt --release ${distrorelease} bash coreutils --setopt install_weak_deps=false -y
elif [ "$pkgmgr" == "yum" ]; then
$pkgmgr install --installroot $scratchmnt --releasever ${distrorelease} bash coreutils -y
else
echo -e "${red}[Error] Unknown package manager ${pkgmgr}${reset}"
fi
read -p "${cyan}Clean up the packages${reset}"
$pkgmgr clean --installroot $scratchmnt all
read -p "${green}Run the shell and see what is inside. When your done, type ${red}exit${green} and return.${reset}"
buildah run $newcontainer bash
read -p "${cyan}Let's look at the program${yellow}"
FILE=./runecho.sh
/bin/cat <<EOM >$FILE
#!/usr/bin/env bash
for i in {1..9};
do
echo "This is a new cloud native container using Buildah [" \$i "]"
done
EOM
chmod +x $FILE
cat $FILE
read -p "${green}Copy program into the container and run ls to see it is there${reset}"
buildah copy $newcontainer $FILE /usr/bin
ls -al $scratchmnt/usr/bin/*.sh
read -p "${green}Run the container using Buildah${reset}"
buildah run $newcontainer /usr/bin/runecho.sh
read -p "${green}Make the container run the program by default when container is run${reset}"
buildah config --entrypoint /usr/bin/runecho.sh $newcontainer
read -p "${green}Set some config information for the container image${reset}"
buildah config --author "${myname}" --created-by "${quayuser}" --label name=${demoimg} $newcontainer
read -p "${green}Inspect the meta data${yellow}"
buildah inspect $newcontainer
read -p "${green}Unmount the container and commit to an image called ${demoimg}.${reset}"
buildah unmount $newcontainer
buildah commit $newcontainer $demoimg
read -p "${green}List the images we have.${reset}"
buildah images
read -p "${blue}Run the container using Podman.${reset}"
podman run -t $demoimg
read -p "${green}Make sure you are already logged into your account on Quay.io. Or use Quay creds.${reset}"
buildah push $demoimg docker://quay.io/$quayuser/$demoimg
echo -e "${red}We are done!${reset}"
|