-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile.docker
More file actions
241 lines (197 loc) · 7.38 KB
/
Makefile.docker
File metadata and controls
241 lines (197 loc) · 7.38 KB
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
# ------------------------------------------------------------
# cawk is subjet to a MIT open-source licence
# please refer to the MIT licence file for further information
# ------------------------------------------------------------
# Makefile used for managing cawk container
# authors: cedric llorens, florian heitz
# cawk docker version: 1.0
# ------------------------------------------------------------
# ---------------------------------------------
SHELL := /bin/bash
# ---------------------------------------------
include Makefile.support.mk
# ---------------------------------------------
# Container configuration
CONTAINER_NAME := cawk-container
CONTAINER_FULL := $(CONTAINER_NAME)-$(CAWK_RELEASE)
# image configuration
IMAGE_NAME := cawk-image
IMAGE_FULL := $(IMAGE_NAME):$(CAWK_RELEASE)
# ---------------------------------------------
# Volume configuration
CAWK_VOLUME := cawk-persistent-volume
CAWK_VOLUME_FULL := $(CAWK_VOLUME)-$(CAWK_RELEASE)
# ---------------------------------------------
# Proxy configuration
PROXY_URL := $(shell echo $$HTTP_PROXY)
PROXY_URL_SECU := $(shell echo $$HTTPS_PROXY)
# ---------------------------------------------
# Default target
.PHONY: help build run stop clean clean-all rebuild status images containers \
prune prune-all logs shell connect info pull-alpine-image \
create-volume info-volume remove-volume cawk-check-repo \
remove-image-cawk remove-image-alpine check-system
# ---------------------------------------------
# Default target
help:
@echo "===================================================================="
@echo "Cawk Docker Management - Available Targets"
@echo "===================================================================="
@echo "Container Management:"
@echo " build - Build the cawk image $(IMAGE_FULL)"
@echo " run - Run the cawk container with persistent volume $(IMAGE_FULL)"
@echo " stop - Stop the cawk container $(IMAGE_FULL)"
@echo " connect - Connect to cawk container $(IMAGE_FULL)"
@echo " rebuild - Clean, prune, build and run (full cycle) $(IMAGE_FULL)"
@echo ""
@echo "Volume Management:"
@echo " create-volume - Create $(CAWK_VOLUME_FULL) named volume"
@echo " remove-volume - Remove $(CAWK_VOLUME_FULL) volume"
@echo " info-volume - Show $(CAWK_VOLUME_FULL) volume details"
@echo ""
@echo "Information & Monitoring:"
@echo " status - Show container status"
@echo " images - List all images"
@echo " remove-image-cawk - Remove cawk image"
@echo " remove-image-alpine - Remove alpine image"
@echo " containers - List all containers"
@echo " logs - Show container logs"
@echo " info - Show system information"
@echo ""
@echo "Base Images Management:"
@echo " pull-alpine-image - Pull latest alpine from docker.io"
@echo ""
@echo "Cleanup & Maintenance:"
@echo " clean - Remove container (keep volumes)"
@echo " clean-all - Remove container and volumes"
@echo " prune - Remove unused images"
@echo ""
@echo "Run:"
@echo " cawk-check - Run cawk gmake check && gmake check_parallel"
@echo ""
@echo "help - Show this help message"
@echo "check-system - Check the cawk docker system requirements"
@echo "===================================================================="
# ---------------------------------------------
check-system:
@echo "==== cawk docker check"
@docker_ok=true; \
buildx_ok=true; \
proxy_ok=true; \
\
printf "Docker check: "; \
if command -v docker >/dev/null 2>&1; then \
echo "OK"; \
else \
echo "NOK"; docker_ok=false; \
fi; \
\
printf "BuildX check: "; \
if sudo docker buildx version >/dev/null 2>&1; then \
echo "OK"; \
else \
echo "NOK"; buildx_ok=false; \
fi; \
\
printf "env PROXY_HTTP check: "; \
if [ -n "$(PROXY_URL)" ]; then \
echo "OK ($(PROXY_URL))"; \
else \
echo "NOK"; proxy_ok=false; \
fi; \
\
printf "env PROXY_HTTPS check: "; \
if [ -n "$(PROXY_URL_SECU)" ]; then \
echo "OK ($(PROXY_URL_SECU))"; \
else \
echo "NOK"; proxy_ok=false; \
fi; \
\
if [ "$$docker_ok" = "true" ] && [ "$$buildx_ok" = "true" ] && [ "$$proxy_ok" = "true" ]; then \
echo "System: OK"; \
else \
echo "System: NOK"; \
fi
@echo "==== cawk docker check"
# ---------------------------------------------
create-volume:
@echo "cawk create volume: $(CAWK_VOLUME_FULL) ----"
sudo docker volume inspect $(CAWK_VOLUME_FULL) || sudo docker volume create $(CAWK_VOLUME_FULL)
sudo docker volume inspect $(CAWK_VOLUME_FULL)
remove-volume:
@echo "cawk remove volume ----"
sudo docker volume rm $(CAWK_VOLUME_FULL) || true
info-volume:
@echo "cawk volume information ----"
sudo docker volume inspect $(CAWK_VOLUME_FULL) || echo "Volume $(CAWK_VOLUME_FULL) not found"
# ---------------------------------------------
build: check-system
@echo "cawk building $(IMAGE_FULL) ----"
sudo docker buildx build \
--build-arg http_proxy=$(PROXY_URL) \
--build-arg https_proxy=$(PROXY_URL_SECU) \
--build-arg HTTP_PROXY=$(PROXY_URL) \
--build-arg HTTPS_PROXY=$(PROXY_URL_SECU) \
-t $(IMAGE_FULL) .
run: create-volume
@echo "cawk starting $(CONTAINER_FULL) with $(CAWK_VOLUME_FULL) volume ----"
sudo docker run -d --name $(CONTAINER_FULL) \
--restart unless-stopped \
-v $(CAWK_VOLUME_FULL):/app/cawk/cawk-persistent-volume \
$(IMAGE_FULL)
stop:
@echo "cawk stopping $(CONTAINER_FULL) ----"
sudo docker stop $(CONTAINER_FULL) || true
sudo docker rm $(CONTAINER_FULL) || true
rebuild: clean-all prune create-volume build run
shell:
@echo "cawk opening shell in $(CONTAINER_FULL) ----"
sudo docker exec -it $(CONTAINER_FULL) /bin/bash
connect: shell
# ---------------------------------------------
clean:
@echo "cawk cleaning $(CONTAINER_FULL) container ----"
sudo docker stop $(CONTAINER_FULL) || true
sudo docker rm $(CONTAINER_FULL) || true
clean-all: clean remove-volume
status:
@echo "cawk container status ----"
sudo docker ps -a --filter name=$(CONTAINER_FULL) || echo "No containers found"
@echo ""
@echo "cawk volume status ----"
sudo docker volume ls --filter name=cawk || echo "No cawk volumes found"
images:
@echo "cawk all images ----"
sudo docker images
remove-image-cawk:
@echo "cawk remove cawk image ----"
sudo docker rmi $(IMAGE_FULL)
remove-image-alpine:
@echo "cawk remove cawk image ----"
sudo docker rmi alpine:latest
containers:
@echo "cawk $(CONTAINER_FULL) container ----"
sudo docker ps -a
logs:
@echo "cawk $(CONTAINER_FULL) log"
sudo docker logs $(CONTAINER_FULL)
info:
@echo "cawk system information ----"
sudo docker system df
@echo ""
@echo "cawk version information ----"
sudo docker version --format "{{.Client.Version}}"
@echo ""
@echo "cawk volume information ----"
sudo docker volume ls --format "table {{.Name}}\t{{.Driver}}\t{{.Mountpoint}}"
# ---------------------------------------------
pull-alpine-image:
@echo "cawk pulling latest alpine image ----"
sudo docker pull alpine:latest
prune:
@echo "cawk removing unused images ----"
sudo docker image prune -f
# ---------------------------------------------
cawk-check:
sudo docker exec $(CONTAINER_FULL) sh -c "cd /app/cawk && gmake check >> /app/cawk/logs/cawk-check.log 2>&1"
sudo docker exec $(CONTAINER_FULL) sh -c "cd /app/cawk && gmake check_parallel >> /app/cawk/logs/cawk-check_parallel.log 2>&1"