-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommands.sh
More file actions
140 lines (116 loc) · 3.25 KB
/
Copy pathcommands.sh
File metadata and controls
140 lines (116 loc) · 3.25 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
# --- Install Required Tools ---
sudo apt update
sudo apt install -y curl ca-certificates
curl -fsSL https://get.docker.com -o get-docker.sh
ls -lh get-docker.sh
sudo sh get-docker.sh
# --- Executing docker install script, commit: 7d96bd3c5235ab2121bcb855dd7b3f3f37128ed4 ---
sudo usermod -aG docker $USER
newgrp docker
groups
docker --version
# --- Step 1: Set Up Project Structure ---
mkdir -p ~/containerize-lab
cd ~/containerize-lab
pwd
mkdir -p api worker shared
find . -maxdepth 1 -type d | sort
# --- Step 2: Create Shared Configuration ---
nano shared/config.py
cat shared/config.py
# --- Step 3: Create API Service ---
nano api/app.py
nano api/requirements.txt
cat api/requirements.txt
# --- Step 4: Create Worker Service ---
nano worker/worker.py
nano worker/requirements.txt
cat worker/requirements.txt
# --- Step 1: Create API Dockerfile ---
nano api/Dockerfile
cat api/Dockerfile
# --- Step 2: Create Worker Dockerfile ---
nano worker/Dockerfile
cat worker/Dockerfile
# --- Step 3: Create Docker Compose File (Optional Reference) ---
nano docker-compose.yml
ls -R
# --- Step 1: Build Docker Images ---
cd ~/containerize-lab
docker build -t task-api:v1 -f api/Dockerfile .
docker build -t task-worker:v1 -f worker/Dockerfile .
docker images | grep task
# --- Step 2: Create Docker Network ---
docker network create app-network
docker network ls
# --- Step 3: Run Redis Container ---
docker run -d --name redis --network app-network -p 6379:6379 redis:7-alpine
docker ps | grep redis
# --- Step 4: Run API Container ---
docker run -d \
--name api \
--network app-network \
-p 5000:5000 \
-e REDIS_HOST=redis \
-e REDIS_PORT=6379 \
task-api:v1
docker logs api
# --- Step 5: Run Worker Container ---
docker run -d \
--name worker \
--network app-network \
-e REDIS_HOST=redis \
-e REDIS_PORT=6379 \
task-worker:v1
docker logs worker
# --- Step 1: Verify All Containers Running ---
docker ps
# --- Step 2: Test API Health Endpoint ---
curl http://localhost:5000/health
# --- Step 3: Test Task Submission and Processing ---
curl -X POST http://localhost:5000/task \
-H "Content-Type: application/json" \
-d '{"task_type": "process", "data": {"value": 42}}'
sleep 4
curl http://localhost:5000/result/8c0be32f-bd29-4da4-a7d7-a5d102f6b4e2
curl http://localhost:5000/result/12345678-1234-1234-1234-123456789abc
# --- Step 4: Inspect Container Networking ---
docker network inspect app-network
# --- Step 5: Check Container Logs ---
docker logs api --tail 20
docker logs worker --tail 20
# --- Container won't start ---
docker logs api
# --- Cannot connect to Redis ---
docker ps
docker network inspect app-network | grep -E '"Name":|"IPv4Address"'
# --- Port already in use ---
sudo lsof -i :5000
docker stop api
docker run -d \
--name api \
--network app-network \
-p 5001:5000 \
-e REDIS_HOST=redis \
-e REDIS_PORT=6379 \
task-api:v1
docker stop api
docker rm api
docker run -d \
--name api \
--network app-network \
-p 5000:5000 \
-e REDIS_HOST=redis \
-e REDIS_PORT=6379 \
task-api:v1
# --- Image build fails ---
find . -maxdepth 2 -type f | sort
# --- Worker not processing tasks ---
docker logs worker --tail 50
docker exec -it redis redis-cli
# --- Cleanup ---
docker stop api worker redis
docker rm api worker redis
docker network rm app-network
docker rmi task-api:v1 task-worker:v1
docker ps -a