From c1cab90dbcd0f1fc743cb733114064f602766db6 Mon Sep 17 00:00:00 2001 From: Mel Date: Sat, 17 Feb 2024 02:09:26 +0100 Subject: Single container with a service and Postgres --- Dockerfile | 14 ++++++++++++++ Makefile | 8 ++++++++ script.sh | 4 ++++ service.c | 22 ++++++++++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 Dockerfile create mode 100644 Makefile create mode 100755 script.sh create mode 100644 service.c diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3f3de0f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM alpine:latest AS build +WORKDIR /build +RUN apk update && \ + apk add --no-cache gcc musl-dev postgresql-dev + +COPY service.c . +RUN gcc -o service service.c -lpq + +FROM postgres:alpine + +COPY script.sh . +COPY --from=build /build/service . + +ENTRYPOINT ["./script.sh"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..511c3c3 --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +.PHONY: build-image run-container +.DEFAULT_GOAL := run-container + +build-image: + docker build -t onecontainer . + +run-container: build-image + docker run -e POSTGRES_HOST_AUTH_METHOD=trust -it --rm onecontainer diff --git a/script.sh b/script.sh new file mode 100755 index 0000000..3a6e0f5 --- /dev/null +++ b/script.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +/usr/local/bin/docker-entrypoint.sh postgres & +./service diff --git a/service.c b/service.c new file mode 100644 index 0000000..edc6fd0 --- /dev/null +++ b/service.c @@ -0,0 +1,22 @@ +#include +#include +#include +#include + +int main() { + PGconn *conn; + for (int i = 0; i < 100; i++) { + printf("trying to connect...\n"); + conn = PQconnectdb("host=localhost dbname=postgres user=postgres password="); + if (PQstatus(conn) == CONNECTION_OK) { + printf("connected :)\n"); + break; + } else { + fprintf(stderr, "connection failed: %s", PQerrorMessage(conn)); + sleep(2); + } + } + + PQfinish(conn); +} + -- cgit 1.4.1