мета-данные страницы
Это старая версия документа!
Выполнение домашнего задания для DevOps-тренировок в Яндексе, лекция "Облако. Кто виноват и что делать."
Для начала нужно создать две виртуальные машины на Яндекс облаке и клонировать себе в каждую машину репозиторий с гитхаба. В рамках проекта тренировок предоставляется возможность бесплатно использовать виртуальные машины по запросу.
Машины созданы
Подключаемся удобным способом к ним по SSH, я использую Windows Terminal. Клонируем репозиторий
git clone https://github.com/igkfellk/y-y-devops-trainings-cloud-1/
Сборка образа для catGPT
Создаем каталог
sudo mkdir /etc/docker/catGPTКопируем нужные файлы в созданный каталог
sudo cp -r /home/ikfellk/y-y-devops-trainings-cloud-1/catgpt/. /etc/docker/catGPT/Переходим в каталог
cd /etc/docker/catGPTСоздаем Dockerfile
sudo nano Dockerfile
# Используем образ Golang рекомендуемый в задании FROM golang:1.21 AS builder # Указываем автора файла MAINTAINER Igor Kucherenko <i.kucherenko@test.ru> # Устанавливаем и переходим в рабочую директорию WORKDIR /go/src/app # Копируем go.mod и go.sum для загрузки зависимостей COPY go.mod go.sum ./ # Загружаем зависимости RUN go mod download # Копируем исходный код приложения COPY . . # Собираем приложение RUN CGO_ENABLED=0 go build -o /go/bin/app RUN chmod +x /go/bin/app # Создаем runtime образ на основе gcr.io/distroless/static-debian12:latest-amd64 FROM gcr.io/distroless/static-debian12:latest-amd64 # Копируем собранный бинарный файл из builder образа COPY --from=builder /go/bin/app /go/bin/app # Определяем команду, которая будет запускаться при запуске контейнера CMD ["/go/bin/app"]
Запуск сборки
sudo docker build -t ikfellk/catgpt:v1 .
Запуск контейнера
docker run -d -p 8080:8080 ikfellk/catgpt:v1
Тестируем
Для проверки созданных образов выполняем команду
docker imagesи получаем подобный вывод
Для проверки созданных контейнеров выполняем команду
docker ps -aи получаем подобный вывод
идем в браузер и открываем страницу
http://ваш_ip:8080/
Получаем такой вывод
Коннектимся к яндекс облаку через Oauth
Для полноценного выполнения задания еще потребуется настроить связь через oauth яндекса с яндекс облаком. Тут ничего сложного, нужно получить токен через свой аккаунт яндекса перейдя по ссылке Далее в ранее созданной виртуальной машине или машинах выполнить подключение в несколько этапов:
- Скачать и установить яндекс CLI
curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
- Выполнить настройку подключения через созданный токен
yc init
Создаем реестр
Выполнив одну команду, получаем созданный реестр
yc container registry create --name registry-ikfellk
- registry-ikfellk - любое имя на ваше усмотрение
Загружаем образ в реестр
Для начала смотрим на образы
docker images
Выбираем нужный нам образ для загрузки и присваиваем тег яндекса
docker tag ikfellk/catgpt:v1 \
cr.yandex/crp3b70qbcrknbg22qbk/ikfellkcatgpt:v1Где:
- crp3b70qbcrknbg22qbk - идентификатор вашего реестра на яндекс облаке
Загружаем образ в реестр
docker push cr.yandex/crp3b70qbcrknbg22qbk/ikfellkcatgpt:v1Проверяем что образ загрузился командой
yc container image listИ получаем такую картину
Автосборка с помощью Github CI
Для начала нужно создать ключи доступа к яндекс облаку из Github
yc iam access-key create --service-account-name ikfellk
Где:
- ikfellk - имя вашего аккаунта в яндекс облаке
Получаем такой вывод
Создаем токен авторизации
yc iam create-token
Создаем в репозитории на гитхабе файл
.github/workflows/docker-build-catgpt.yml
name: Docker Build and Deploy catgpt
on:
push:
tags:
- '*' # Любой тег
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Login to Yandex
run: docker login -u ${{ secrets.YANDEX_USERNAME }} -p ${{ secrets.YANDEX_CLOUD_SERVICE_ACCOUNT_KEY }} cr.yandex/crj3b74hbhretbg25qbk
- name: Build and push Docker image
run: |
docker build -t cr.yandex/crj3b74hbhretbg25qbk/catgpt:v1 ./catgpt
docker push cr.yandex/crj3b74hbhretbg25qbk/catgpt:v1
- YANDEX_USERNAME - логин от яндекс облака
- YANDEX_CLOUD_SERVICE_ACCOUNT_KEY - Токен авторизации созданный ранее
- crj3b74hbhretbg25qbk - Идентификатор вашего реестра на яндекс облаке
Создаем секреты описанные в предыдущем шаге для создания вы должны находится в своем репозитории и нажать кнопку Settings
Далее перейти в Secrets and variables и далее в Actions
Теперь создаем секреты для авторизации Нужно нажать New repository secret Ввести названия что упоминались выше или можете посмотреть свой файл docker-build-catgpt.yml и там найти строки с секретами и изменить на ваши названия, которые вы создали
У вас должен лежать Dockerfile в каталоге, который использует команда docker build.
В случае данного задания у меня лежит файл в каталоге ./catgpt
Обсуждение