# 가상환경 생성
python -m venv <가상환경명>
# 가상환경 열기
.\<가상환경명>\Scripts\activate
# 가상환경에 django 패키지 설치
pip install django
django-admin.exe startproject <프로젝트명> .
python manage.py startapp <앱명>
# toy_swarm/settings.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'logger',
]
...# logger/models.py
from django.db import models
class Message(models.Model):
content = models.TextField()
timestamp = models.DateTimeField(auto_now=True)
def __str__(self):
return self.content# logger/views.py
from django.http import JsonResponse, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from .models import Message
import json
def index(request):
return HttpResponse('Hi! This is index page.')
@csrf_exempt
@require_POST
def log_message(request):
try:
data = json.loads(request.body.decode('utf-8'))
message_content = data.get('message')
if message_content:
message = Message(content=message_content)
message.save()
return JsonResponse({'message': 'Message logged successfully'})
else:
return JsonResponse({'error': 'Invalid message data'}, status=400)
except json.JSONDecodeError:
return JsonResponse({'error': 'Invalid JSON data'}, status=400)# logger/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('log', views.log_message, name='logger'),
]# toy_swarm/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('logger.urls')),
]python manage.py makemigration
python manage.py migrate
python -m pip freeze > requirements.txt
# client.py
import requests
import json
url = "http://localhost:8000/log"
message_data = {
"message": "This is a log message."
}
response = requests.post(url,
data=json.dumps(message_data),
headers={"Content-Type": "application/json"})
print(response.text)python manage.py runserver
FROM python:3.8
COPY . /app
WORKDIR /app
RUN python3 -m venv venv && . venv/bin/activate
RUN pip3 install -r requirements.txt
WORKDIR /app/toy_swarm
ENTRYPOINT ["python3", "manage.py", "runserver", "0.0.0.0:8000", "--noreload"]
EXPOSE 8000
version: '3.7'
services:
logger:
image: shgpwls374/logger
deploy:
replicas: 3
ports:
- 8000:8000

8000번 포트 인바운드 허용
docker build -t logger .
docker run -d --name logger -p 8000:8000 logger
git clone https://github.com/nohhyejin1/toy_swarm
docker login
docker build -t logger .
docker tag logger shgpwls374/logger
docker push shgpwls374/logger
docker stack deploy -c docker-stack.yml logger
git pull
docker build -t logger .
docker tag logger shgpwls374/logger
docker push shgpwls374/logger
docker service update shgpwls374/logger logger_logger