From d6db5a4e6af9664e84673f9a0477b249554bf2c3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:40:51 +0300 Subject: [PATCH] Update docker readme (#17) Co-authored-by: Fedor Batonogov --- docker/Dockerfile | 4 +- docker/README.md | 95 +++++++++++++++++++++++++++++--------- docker/docker-compose.yaml | 8 ++-- docker/main.go | 2 +- docker/nginx.tmpl | 4 +- 5 files changed, 82 insertions(+), 31 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 0a5debe..4f77de6 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,5 +1,5 @@ # Используем официальный образ Golang -FROM golang:1.22.5-alpine AS builder +FROM golang:1.23.2-alpine AS builder # Устанавливаем рабочую директорию WORKDIR /build # Копируем исходный код приложения в контейнер @@ -8,7 +8,7 @@ COPY ./ ./ RUN CGO_ENABLED=0 go build main.go # Отдельный этап сборки для уменьшения размера образа -FROM alpine:3.20.1 AS runner +FROM alpine:3.20.3 AS runner # Определяем аргумент для имени пользователя ARG USERNAME=appuser ARG GROUPNAME=appgroup diff --git a/docker/README.md b/docker/README.md index a0ec68e..03096df 100644 --- a/docker/README.md +++ b/docker/README.md @@ -26,10 +26,22 @@ go build main.go Сервер запущен на порту 8080... ``` +Проверка + +```sh +curl localhost:8080 +``` + +Вывод + +```output +Имя узла: MacBook-Pro-Fedor.local +``` + ### Запуск в контейнере ```sh -docker build -t test . && docker run test +docker build -t test . && docker run --hostname my_container --publish 8080:8080 test ``` Вывод @@ -38,25 +50,62 @@ docker build -t test . && docker run test Сервер запущен на порту 8080... ``` -### Запуск при помощи docker compose - -Запуск +Проверка ```sh -docker compose --profile blue up --wait --remove-orphans --scale web-blue=5 +curl localhost:8080 ``` Вывод ```output - ✔ Network docker_default Created 0.0s - ✔ Container docker-nginx-proxy-1 Healthy 0.1s - ✔ Container docker-web-blue-2 Healthy 0.1s - ✔ Container docker-web-blue-4 Healthy 0.1s - ✔ Container docker-web-blue-3 Healthy 0.0s - ✔ Container docker-web-blue-5 Healthy 0.1s - ✔ Container docker-web-blue-1 Healthy 0.1s - ``` +Имя узла: my_container +``` + +### Запуск при помощи docker compose + +Запуск + +```sh +docker compose --profile blue up --wait --remove-orphans --scale web-blue=3 +``` + +Вывод + +```output +✔ Network docker_default Created +✔ Container docker-web-blue-1 Healthy +✔ Container docker-nginx-proxy-1 Healthy +✔ Container docker-web-blue-3 Healthy +✔ Container docker-web-blue-2 Healthy +``` + +Проверка + +Поскольку запущено несколько реплик сервиса, то при повторной проверке мы можем увидеть разное имена узлов + +```sh +declare -A responses +count=0 + +while [ ${#responses[@]} -lt 3 ]; do + response=$(curl -s localhost:8080) + + if [[ -z "${responses[$response]}" ]]; then + responses["$response"]=1 + count=$((count + 1)) + echo "Уникальный ответ $count: $response" + fi +done +``` + +Вывод + +```output +Уникальный ответ 1: Имя узла: eeec60605b3c +Уникальный ответ 2: Имя узла: 1a0e8d8f0d64 +Уникальный ответ 3: Имя узла: d5822762eab6 +``` ### Сине-зеленое развертывание @@ -70,13 +119,15 @@ bash ./deploy.sh ```output Список контейнеров -NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS -docker-nginx-proxy-1 nginxproxy/nginx-proxy:1.5.2-alpine "/app/docker-entrypo…" nginx-proxy 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:80->80/tcp -docker-web-blue-1 docker-web-blue "./main" web-blue 7 seconds ago Up 6 seconds (healthy) 8080/tcp -docker-web-blue-2 docker-web-blue "./main" web-blue 7 seconds ago Up 6 seconds (healthy) 8080/tcp -docker-web-blue-3 docker-web-blue "./main" web-blue 7 seconds ago Up 6 seconds (healthy) 8080/tcp -Журналы запуска web-blue -web-blue-1 | Сервер запущен на порту 8080... -web-blue-3 | Сервер запущен на порту 8080... -web-blue-2 | Сервер запущен на порту 8080... +NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS +docker-nginx-proxy-1 nginxproxy/nginx-proxy:1.6.2-alpine "/app/docker-entrypo…" nginx-proxy 22 seconds ago Up 22 seconds (healthy) 0.0.0.0:80->80/tcp +docker-web-green-1 docker-web-green "./main" web-green 6 seconds ago Up 6 seconds (healthy) 8080/tcp +docker-web-green-2 docker-web-green "./main" web-green 6 seconds ago Up 6 seconds (healthy) 8080/tcp +docker-web-green-3 docker-web-green "./main" web-green 6 seconds ago Up 6 seconds (healthy) 8080/tcp +Журналы запуска web-green +web-green-3 | Сервер запущен на порту 8080... +web-green-2 | Сервер запущен на порту 8080... +web-green-1 | Сервер запущен на порту 8080... ``` + +[Проверка](README.md#L83) diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 220c9ae..9da4d60 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -25,11 +25,9 @@ services: # NGINX-прокси nginx-proxy: - image: nginxproxy/nginx-proxy:1.6.0-alpine - expose: - - 80 + image: nginxproxy/nginx-proxy:1.6.2-alpine ports: - - 80:80 # Проксируем порт 80 на хосте + - 8080:8080 # Проксируем порт 8080 на хосте healthcheck: # Периодичность проверки состояния (5 секунд) interval: 5s @@ -40,7 +38,7 @@ services: # Время ожидания перед началом проверок (3 секунды) start_period: 3s # Команда для выполнения теста - test: curl -f http://localhost/ || exit 1 + test: curl -f http://localhost:8080/ || exit 1 volumes: # Монтируем сокет Docker - /var/run/docker.sock:/tmp/docker.sock:ro diff --git a/docker/main.go b/docker/main.go index 29d188b..c420579 100644 --- a/docker/main.go +++ b/docker/main.go @@ -17,7 +17,7 @@ func main() { } // Отправляем имя хоста в ответ - fmt.Fprintf(w, "Hostname Hostname: %s\n", hostname) + fmt.Fprintf(w, "Имя узла: %s\n", hostname) }) // Запуск веб-сервера на порту 8080 diff --git a/docker/nginx.tmpl b/docker/nginx.tmpl index dff02bc..e9d6f00 100644 --- a/docker/nginx.tmpl +++ b/docker/nginx.tmpl @@ -11,7 +11,9 @@ upstream {{ $host }} { # конфигурация веб-сервера server { - listen 80; + listen 8080; + + server_tokens off; location / { proxy_pass http://{{ $host }};