---
# System prepended metadata

title: Docker часть 1

---

# Docker часть 1
Что нужно сделать:
1. Написать Dockerfile, который позволит собрать образ для запуска вашего проекта.
*Очевидно что в докерфайле будут примерно следующие шаги:
Подходящий базовый образ
Подготовка окружения
Копирование файлов сборки в образ
Старт сервера - главный процесс контейнера
2*. Локально протестируйте, что сборка проходит успешно.
Локально протестируйте, что запуск контейнера приводит к запуску сервера.
Проверьте, что при запущенном контейнере при попытке отправить запрос в контйнеризованный сервер получается увидеть ответ.
3. Сделайте коммит Dockerfile-а в ваш gitlab репозиторий
4. Напишите новую джобу (давайте называть ее: build-docker), которая будет проводить сборку вашего проекта в docker-образ

Что показать ментору:
1. Dockerfile в вашем репозитории
2. gitlab-ci.yaml в вашем репозитории, в котором появилась новая джоба build-docker, способная собрать ваш проект в docker образ с помощью Dockerfile из первого пункта

# Ответы
```
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Convertet C-F/Convertet_C-F.csproj", "Convertet C-F/"]
RUN dotnet restore "Convertet C-F/Convertet_C-F.csproj"
COPY . .
WORKDIR "/src/Convertet C-F"
RUN dotnet build "Convertet_C-F.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Convertet_C-F.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Convertet_C-F.dll"]
```


.gitlab-ci.yml
```
stages:
  - test
  - build-docker


Test:
  stage: test
  script: 
    - ls -la
    - if [ -f ./docker-compose.yml -a -f ./Convertet_C-F.sln ]; then echo "ok"; else false; fi;
  tags:
    - "dev"


build-docker:   
  stage: build-docker  
  script:
    - docker build -f ./Convertet_C-F/Dockerfile -t tamplate_project . 
  tags:
    - "dev"
  allow_failure: false
```
![](https://i.imgur.com/o5rSMIi.png)
