Update docker readme (#17)

Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
This commit is contained in:
github-actions[bot]
2024-10-08 16:40:51 +03:00
committed by GitHub
parent 52a3d0eb3b
commit d6db5a4e6a
5 changed files with 82 additions and 31 deletions

View File

@@ -1,5 +1,5 @@
# Используем официальный образ Golang # Используем официальный образ Golang
FROM golang:1.22.5-alpine AS builder FROM golang:1.23.2-alpine AS builder
# Устанавливаем рабочую директорию # Устанавливаем рабочую директорию
WORKDIR /build WORKDIR /build
# Копируем исходный код приложения в контейнер # Копируем исходный код приложения в контейнер
@@ -8,7 +8,7 @@ COPY ./ ./
RUN CGO_ENABLED=0 go build main.go 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 USERNAME=appuser
ARG GROUPNAME=appgroup ARG GROUPNAME=appgroup

View File

@@ -26,10 +26,22 @@ go build main.go
Сервер запущен на порту 8080... Сервер запущен на порту 8080...
``` ```
Проверка
```sh
curl localhost:8080
```
Вывод
```output
Имя узла: MacBook-Pro-Fedor.local
```
### Запуск в контейнере ### Запуск в контейнере
```sh ```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... Сервер запущен на порту 8080...
``` ```
### Запуск при помощи docker compose Проверка
Запуск
```sh ```sh
docker compose --profile blue up --wait --remove-orphans --scale web-blue=5 curl localhost:8080
``` ```
Вывод Вывод
```output ```output
✔ Network docker_default Created 0.0s Имя узла: my_container
✔ Container docker-nginx-proxy-1 Healthy 0.1s ```
✔ Container docker-web-blue-2 Healthy 0.1s
✔ Container docker-web-blue-4 Healthy 0.1s ### Запуск при помощи docker compose
✔ Container docker-web-blue-3 Healthy 0.0s
✔ Container docker-web-blue-5 Healthy 0.1s Запуск
✔ Container docker-web-blue-1 Healthy 0.1s
``` ```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
```
### Сине-зеленое развертывание ### Сине-зеленое развертывание
@@ -71,12 +120,14 @@ bash ./deploy.sh
```output ```output
Список контейнеров Список контейнеров
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS 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-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-blue-1 docker-web-blue "./main" web-blue 7 seconds ago Up 6 seconds (healthy) 8080/tcp docker-web-green-1 docker-web-green "./main" web-green 6 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-green-2 docker-web-green "./main" web-green 6 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 docker-web-green-3 docker-web-green "./main" web-green 6 seconds ago Up 6 seconds (healthy) 8080/tcp
Журналы запуска web-blue Журналы запуска web-green
web-blue-1 | Сервер запущен на порту 8080... web-green-3 | Сервер запущен на порту 8080...
web-blue-3 | Сервер запущен на порту 8080... web-green-2 | Сервер запущен на порту 8080...
web-blue-2 | Сервер запущен на порту 8080... web-green-1 | Сервер запущен на порту 8080...
``` ```
[Проверка](README.md#L83)

View File

@@ -25,11 +25,9 @@ services:
# NGINX-прокси # NGINX-прокси
nginx-proxy: nginx-proxy:
image: nginxproxy/nginx-proxy:1.6.0-alpine image: nginxproxy/nginx-proxy:1.6.2-alpine
expose:
- 80
ports: ports:
- 80:80 # Проксируем порт 80 на хосте - 8080:8080 # Проксируем порт 8080 на хосте
healthcheck: healthcheck:
# Периодичность проверки состояния (5 секунд) # Периодичность проверки состояния (5 секунд)
interval: 5s interval: 5s
@@ -40,7 +38,7 @@ services:
# Время ожидания перед началом проверок (3 секунды) # Время ожидания перед началом проверок (3 секунды)
start_period: 3s start_period: 3s
# Команда для выполнения теста # Команда для выполнения теста
test: curl -f http://localhost/ || exit 1 test: curl -f http://localhost:8080/ || exit 1
volumes: volumes:
# Монтируем сокет Docker # Монтируем сокет Docker
- /var/run/docker.sock:/tmp/docker.sock:ro - /var/run/docker.sock:/tmp/docker.sock:ro

View File

@@ -17,7 +17,7 @@ func main() {
} }
// Отправляем имя хоста в ответ // Отправляем имя хоста в ответ
fmt.Fprintf(w, "Hostname Hostname: %s\n", hostname) fmt.Fprintf(w, "Имя узла: %s\n", hostname)
}) })
// Запуск веб-сервера на порту 8080 // Запуск веб-сервера на порту 8080

View File

@@ -11,7 +11,9 @@ upstream {{ $host }} {
# конфигурация веб-сервера # конфигурация веб-сервера
server { server {
listen 80; listen 8080;
server_tokens off;
location / { location / {
proxy_pass http://{{ $host }}; proxy_pass http://{{ $host }};