步骤一、创建配置信息文件 meta.json
{
"container_name": "yum-repo-builder",
"remote_server": "xx.xx.xx.xx",
"remote_dir": "<remote-dir>",
"docker_image": "<local-target-docker-image-address>"
}
步骤二、创建子目录
$ mkdir -p ./files/packages/
步骤三、创建 build.sh 文件
#!/usr/bin/env bash
set -e
# Get to workdir
cd "$(realpath "$(dirname "$(realpath "${BASH_SOURCE[0]}")")")"
command -v createrepo >/dev/null 2>&1 || \
(echo "$(date -R) [ ERROR ] command required: createrepo" && false)
echo '+ createrepo ./files/'
createrepo ./files/
步骤四、创建 Dockerfile 文件
FROM docker.1ms.run/openeuler/openeuler:24.03
RUN yum update -y
RUN yum install -y createrepo
步骤五、创建 Makefile 文件
SHELL := /bin/bash
container_name := $(shell jq -r '.container_name' meta.json)
remote_server := $(shell jq -r '.remote_server' meta.json)
remote_dir := $(shell jq -r '.remote_dir' meta.json)
docker_image := $(shell jq -r '.docker_image' meta.json)
help:
@cat Makefile | grep '# `' | grep -v '@cat Makefile'
.PHONY: docker-image
docker-image:
docker build \
--progress plain \
--pull \
--tag ${docker_image} \
--file Dockerfile \
.
# `make build` Build
.PHONY: build
build: docker-image
docker run \
--rm \
--name "${container_name}" \
-v "$$(pwd)/:/data/" \
${docker_image} \
bash /data/build.sh
# `make shell` Shell
.PHONY: shell
shell: docker-image
docker run \
--rm \
-it \
-v "$$(pwd)/:/data/" \
--workdir /data \
${docker_image} \
bash
# `make publish` Publish
.PHONY: publish
publish:
ssh 'root@${remote_server}' mkdir -p '${remote_path}/'
rsync \
-a -r --no-i-r \
--info=progress2 --info=name0 \
--no-owner --no-group --no-perms \
--delete \
"$$(pwd)/files/" \
'root@${remote_server}:${remote_dir}/'
# `make clean` Clean
.PHONY: clean
clean:
docker stop ${container_name} >/dev/null 2>&1 || true
docker rm ${container_name} >/dev/null 2>&1 || true