Cleaned up a few things and added a make test to do a quick build test
FossilOrigin-Name: 1a21b01b33244f3d652dece381edfb2b3b36744ae4c0ae0fc861b882484b36a1
This commit is contained in:
parent
295995e44c
commit
d11f8b1240
18
Makefile
18
Makefile
@ -1,18 +1,22 @@
|
|||||||
TANGLE=tclsh scripts/tangle.tcl
|
TANGLE=tclsh scripts/tangle.tcl
|
||||||
DOCKERFILES=ubi9+epel.dockerfile ubuntu.dockerfile fossil.dockerfile opensuse.dockerfile alpine.dockerfile
|
ALL=ubi9epel ubuntu fossil opensuse alpine
|
||||||
|
|
||||||
.SUFFIXES: .md .dockerfile
|
.SUFFIXES: .md .dockerfile .test
|
||||||
|
|
||||||
.md.dockerfile:
|
.md.dockerfile:
|
||||||
@$(TANGLE) -R $@ $< > $@
|
@$(TANGLE) -R $@ $< > $@
|
||||||
|
.md.test:
|
||||||
|
$(TANGLE) -R $(@:%.test=%.dockerfile) $< | docker build -t mek:$@ -f - .
|
||||||
|
|
||||||
.PHONY: default
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
.PHONY: all
|
all: $(ALL:%=%.dockerfile)
|
||||||
all: $(DOCKERFILES)
|
|
||||||
|
test: $(ALL:%=%.test)
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
clean:
|
||||||
@rm -f *~
|
@rm -f *~
|
||||||
@rm -rf $(DOCKERFILES)
|
@rm -rf $(ALL:%=%.dockerfile)
|
||||||
|
|
||||||
|
.PHONY: default all clean test
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ I like to insure that my containers follow a few simple rules.
|
|||||||
|
|
||||||
## Docker Files
|
## Docker Files
|
||||||
|
|
||||||
* [ubi9+epel](ubi9+epel.md)
|
* [ubi9epel](ubi9epel.md)
|
||||||
* Redhat's Universal Base Image (UBI) for RHEL9, with epel installed and read for use.
|
* Redhat's Universal Base Image (UBI) for RHEL9, with epel installed and read for use.
|
||||||
* [ubuntu](ubuntu.md)
|
* [ubuntu](ubuntu.md)
|
||||||
* Yes, I use Ubuntu from time to time.
|
* Yes, I use Ubuntu from time to time.
|
||||||
|
@ -109,5 +109,5 @@ WORKDIR ${baseDIR}
|
|||||||
```
|
```
|
||||||
## build and test
|
## build and test
|
||||||
`docker build -t mek:alpine -f alpine.dockerfile .`
|
`docker build -t mek:alpine -f alpine.dockerfile .`
|
||||||
`docker run --rm -it mek:alpine /bin/sh``
|
`docker run --rm -it mek:alpine /bin/sh`
|
||||||
```
|
```
|
26
scripts/build-docker.sh
Executable file
26
scripts/build-docker.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -euax
|
||||||
|
|
||||||
|
## check the usage and get the image to test
|
||||||
|
if [ $# -ne 1 ] ; then
|
||||||
|
echo 1>&2 "usage: $0 image"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
image=$1
|
||||||
|
|
||||||
|
# Get the toplevel directory of the git repo
|
||||||
|
repo_dir=`git rev-parse --show-toplevel`
|
||||||
|
|
||||||
|
# See if the file for the image is available
|
||||||
|
|
||||||
|
if [ ! -f "${repo_dir}/${image}.md" ] ; then
|
||||||
|
echo 1>&2 "could not find the file for ${image}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Let's try to build it.
|
||||||
|
echo "attempting to build ${image} in ${repo_dir}"
|
||||||
|
${repo_dir}/scripts/tangle.tcl -R "${image}.dockerfile" "${image}.md" | \
|
||||||
|
docker build -t test:${image} -f - .
|
||||||
|
|
||||||
|
exit 0
|
144
ubi9+epel.md
144
ubi9+epel.md
@ -1,144 +0,0 @@
|
|||||||
# A simple base docker image for RH's UBI9 Docker Image
|
|
||||||
|
|
||||||
Redhat has recently made their Universal Base Image (UBI) availabe
|
|
||||||
on the Docker Registery (docker.io/libarary/redhat/ubi9).
|
|
||||||
|
|
||||||
Of course, it doesn't have the ELPL repository enabled on it, which is
|
|
||||||
something I use consistently with the RHel based images.
|
|
||||||
|
|
||||||
There are a few other things I liked to do with my docker images to help
|
|
||||||
make development and usage a bit more standardized.
|
|
||||||
|
|
||||||
## UBI9+EPEL Docker Image
|
|
||||||
|
|
||||||
### Setup FROM and enable a version choice.
|
|
||||||
|
|
||||||
First let's set the where we'll pull from. I use `podman` and `docker` equally, so on I give the full path to the FROM image.
|
|
||||||
|
|
||||||
An `ARG` for the version, `VER` is there. This can be overridden with `--build-arg 'VER=<version>'`.
|
|
||||||
|
|
||||||
```
|
|
||||||
<<base.image>>=
|
|
||||||
ARG VER=latest
|
|
||||||
FROM docker.io/redhat/ubi9:${VER}
|
|
||||||
@ % def VER
|
|
||||||
```
|
|
||||||
|
|
||||||
### Setup user specific arguments.
|
|
||||||
|
|
||||||
Setup a base username, uid, gid, and work directory with some defaults. All of these can be overridden with `-build-arg "ARG=VALUE"`.
|
|
||||||
|
|
||||||
```
|
|
||||||
<<base.userargs>>=
|
|
||||||
ARG baseUSER="mat.kovach"
|
|
||||||
ARG baseUID=5000
|
|
||||||
ARG baseGID=5000
|
|
||||||
ARG baseDIR="/work"
|
|
||||||
@
|
|
||||||
```
|
|
||||||
|
|
||||||
### Add user and work directory
|
|
||||||
|
|
||||||
You'll need to be careful here to not change a current directory. For example, do not set baseDIR="/bin".
|
|
||||||
|
|
||||||
Add the group, user, (with the home directory of the user ad the work directory) and insure the proper ownership on the work directory.
|
|
||||||
|
|
||||||
```
|
|
||||||
<<base.setupuser>>=
|
|
||||||
RUN groupadd -g ${baseGID} ${baseUSER} && \
|
|
||||||
useradd -c 'work user' -m -u ${baseUID} \
|
|
||||||
-g ${baseGID} -d ${baseDIR} ${baseUSER} && \
|
|
||||||
chown -R ${baseUID}:${baseGID} ${baseDIR}
|
|
||||||
@
|
|
||||||
```
|
|
||||||
|
|
||||||
### Add repos and update software.
|
|
||||||
|
|
||||||
First, we'll add the EPEL repo. If you have additional repos you want to
|
|
||||||
enable, add them here.
|
|
||||||
|
|
||||||
```
|
|
||||||
<<base.enablerepos>>=
|
|
||||||
RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
|
|
||||||
/usr/bin/crb enable && \
|
|
||||||
dnf update -y
|
|
||||||
@
|
|
||||||
```
|
|
||||||
|
|
||||||
### Addtional root changes
|
|
||||||
|
|
||||||
We are still root at this point, this is where we add software, make
|
|
||||||
additional changes, etc.
|
|
||||||
|
|
||||||
```
|
|
||||||
<<base.addsoftware>>=
|
|
||||||
RUN dnf install -y ed joe tcl tcllib
|
|
||||||
@
|
|
||||||
```
|
|
||||||
|
|
||||||
The different sections are setup based on how often they may be changed.
|
|
||||||
The more likely some will change, the further down they should be to help
|
|
||||||
minimize the layers that need to be rebuilt.
|
|
||||||
|
|
||||||
### Make sure we the user, volume, and workdir setup
|
|
||||||
|
|
||||||
```
|
|
||||||
<<base.end>>=
|
|
||||||
USER ${baseUSER}
|
|
||||||
VOLUME ${baseDIR}
|
|
||||||
WORKDIR ${baseDIR}
|
|
||||||
# you can add entry point, etc. here.
|
|
||||||
@
|
|
||||||
```
|
|
||||||
|
|
||||||
### Pulling it all together
|
|
||||||
|
|
||||||
```
|
|
||||||
<<ubi9+epel.dockerfile>>=
|
|
||||||
<<base.image>>
|
|
||||||
<<base.userargs>>
|
|
||||||
<<base.setupuser>>
|
|
||||||
<<base.enablerepos>>
|
|
||||||
<<base.addsoftware>>
|
|
||||||
<<base.end>>
|
|
||||||
@
|
|
||||||
```
|
|
||||||
|
|
||||||
## build and test
|
|
||||||
|
|
||||||
`docker build -t mek:ubi9 -f ubi9-epel.dockerfile .`
|
|
||||||
|
|
||||||
`docker run --rm -it mek:ubi9 /bin/bash`
|
|
||||||
|
|
||||||
```
|
|
||||||
$ docker run --rm -it mek:ubi9 /bin/bash
|
|
||||||
[mat.kovach@4bd996f669b2 ~]$ pwd
|
|
||||||
/work
|
|
||||||
[mat.kovach@4bd996f669b2 ~]$ id -a
|
|
||||||
uid=5000(mat.kovach) gid=5000(mat.kovach) groups=5000(mat.kovach)
|
|
||||||
$ dnf repolist
|
|
||||||
Not root, Subscription Management repositories not updated
|
|
||||||
|
|
||||||
This system is not registered with an entitlement server. You can use subscription-manager to register.
|
|
||||||
|
|
||||||
repo id repo name
|
|
||||||
epel Extra Packages for Enterprise Linux 9 - x86_64
|
|
||||||
ubi-9-appstream-rpms Red Hat Universal Base Image 9 (RPMs) - AppStream
|
|
||||||
ubi-9-baseos-rpms Red Hat Universal Base Image 9 (RPMs) - BaseOS
|
|
||||||
ubi-9-codeready-builder Red Hat Universal Base Image 9 (RPMs) - CodeReady Builder
|
|
||||||
```
|
|
||||||
|
|
||||||
Now let's try using my current working directory inside the container.
|
|
||||||
|
|
||||||
```
|
|
||||||
$ docker run --rm -it -v $(PWD):/work mek:ubi9 /bin/bash
|
|
||||||
bash-5.1$ pwd
|
|
||||||
/work
|
|
||||||
bash-5.1$ ls -l *.md
|
|
||||||
-rw-r--r-- 1 mat.kovach mat.kovach 3474 Apr 5 14:57 UBI9-DOCKER.md
|
|
||||||
bash-5.1$ touch test
|
|
||||||
bash-5.1$ exit
|
|
||||||
exit
|
|
||||||
Mats-MBP:docker mek$ ls -l test
|
|
||||||
-rw-r--r--@ 1 mek staff 0 Apr 5 11:06 test
|
|
||||||
```
|
|
@ -66,7 +66,7 @@ additional changes, etc.
|
|||||||
<<base.addsoftware>>=
|
<<base.addsoftware>>=
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get -qq upgrade && \
|
DEBIAN_FRONTEND=noninteractive apt-get -qq upgrade && \
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get -qq ed joe tcl
|
DEBIAN_FRONTEND=noninteractive apt-get -qq install ed joe tcl
|
||||||
@
|
@
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user