mirror of
https://github.com/batonogov/learn-devops.git
synced 2025-11-29 00:33:02 +00:00
Update docker readme (#17)
Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
This commit is contained in:
committed by
GitHub
parent
52a3d0eb3b
commit
d6db5a4e6a
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -17,7 +17,7 @@ func main() {
|
||||
}
|
||||
|
||||
// Отправляем имя хоста в ответ
|
||||
fmt.Fprintf(w, "Hostname Hostname: %s\n", hostname)
|
||||
fmt.Fprintf(w, "Имя узла: %s\n", hostname)
|
||||
})
|
||||
|
||||
// Запуск веб-сервера на порту 8080
|
||||
|
||||
@@ -11,7 +11,9 @@ upstream {{ $host }} {
|
||||
|
||||
# конфигурация веб-сервера
|
||||
server {
|
||||
listen 80;
|
||||
listen 8080;
|
||||
|
||||
server_tokens off;
|
||||
|
||||
location / {
|
||||
proxy_pass http://{{ $host }};
|
||||
|
||||
Reference in New Issue
Block a user