Создать контейнер для PyTest в Docker

Содержание
Введение
Структура проекта
На основе Python
Код докерфайла
На основе Ubuntu
Код докерфайла
Сборка и публикация
Статьи про Docker

Введение

В этой статье вы можете изучить пример создания простейшего контейнера с установленным pytest а также простого контейнера на основе Ubuntu с предустановленным фреймворком PyTest

Для лучшего понимания происходящего нужно владеть основами Docker , Docker Compose , Dockerfile , Ubuntu , Python requirements

Структура проекта

Создадим простую структру следующего оригинального вида:

docker/ ├── docker-compose.yml ├── dockerfiles │ ├── Dockerfile.pytest │ └── requirements.pytest.txt └── src └── README.md

mkdir docker docker/dockerfiles docker/src touch docker/docker-compose.yml docker/src/README.md docker/dockerfiles/Dockerfile.pytest docker/dockerfiles/requirements.pytest.txt

Python контейнер

Возьмём за основу официальный контейнер Python - в этом случае не нужно отдельно устанавливать Python.

Отредактируем файлы с настройками Docker:

Dockerfile и docker-compose.yml

И файл с требования к пакетам Python requirements.pytest.txt с помощью редактора vim или любого другого редактора на ваш выбор.

vi dockerfiles/Dockerfile

# Dockerfile.pytest FROM python:3.13.0rc2-bullseye LABEL maintainer="www.devhops.ru" # install dependencies COPY requirements.pytest.txt . RUN python -m pip install -r requirements.pytest.txt ENV PYTHONPATH="/opt:$PATH"

vi docker-compose.yml

Если контейнеров будет несколько - будет автоматически создана сеть в которой обращаться к контейнерам можно будет по их именам.

# docker-compose.yml services: pytest: container_name: pytest_container image: pytest_image build: context: ./dockerfiles dockerfile: Dockerfile.pytest args: buildversion: 1 ports: - "3000:3000" volumes: - ./src:/opt tty: true command: tail -F /dev/null

Если по какой-то причине нужно явно указать сеть и адрес в ней, то файл будет несколько длиннее

# docker-compose.yml services: pytest: container_name: pytest_container image: pytest_image build: context: ./dockerfiles dockerfile: Dockerfile.pytest args: buildversion: 1 ports: - "3000:3000" networks: net1: ipv4_address: 10.5.0.2 volumes: - ./src:/opt tty: true command: tail -F /dev/null networks: net1: driver: bridge ipam: config: - subnet: 10.5.0.0/16 gateway: 10.5.0.1

vi requirements.pytest.txt

# requirements.pytest.txt pytest==8.3.3 requests==2.32.3

Когда все файлы готовы нужно запустить docker compose

docker compose up -d

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c69b88ea3ae1 pytest_image "tail -F /dev/null" About a minute ago Up About a minute 0.0.0.0:3000->3000/tcp pytest_container

Теперь можно зайти в контейнер с помощью команды exec

docker exec -it pytest_ubuntu bash

# python -m pytest -V

pytest 8.3.3

Проверим, что README.md доступен в /opt

cd opt
ls

README.md

В этой почти пустой директории можно сделать тестовый запуск pytest

python -m pytest

============================================================================== test session starts ============================================================================== platform linux -- Python 3.13.0rc2, pytest-8.3.3, pluggy-1.5.0 rootdir: /opt collected 0 items ============================================================================= no tests ran in 0.12s =============================================================================

Ubuntu контейнер

Если Python контейнер не подходит - можно воспользоваться контейнером с Linux , например Ubuntu .

В этом случае нужно позаботиться об установке Python самостоятельно

FROM ubuntu:24.04 LABEL maintainer="www.devhops.ru" ENV TEST_DIR=/opt ENV PYTHONPATH=TEST_DIR ENV TZ=Europe/Helsinki ENV DEBIAN_FRONTEND=noninteractive RUN mkdir -p $TEST_DIR WORKDIR $TEST_DIR # old way - ADD # ADD src $TEST_DIR # new way - create VOLUME VOLUME $TEST_DIR # apt-get is recommended for Docker files # install linux utils RUN apt-get -y update \ && apt-get install -y dialog \ && apt-get install -y apt-utils \ && apt-get install -y tree vim \ && apt-get install -y curl gcc g++ make \ && apt-get -y update \ && apt-get -y upgrade # install python RUN apt-get install -y python3 python3-pip \ && apt-get install -y curl gcc g++ make \ && cd /usr/local/bin \ && ln -s /usr/bin/python3 python \ && python -m pip install --upgrade pip # install dependencies COPY requirements.ubuntu.pytest.txt . RUN python -m pip install -r requirements.ubuntu.pytest.txt

# requirements.ubuntu.pytest.txt pytest==7.2.0 requests==2.28.1

# docker-compose.yml version: '3.8' services: pytest_ubuntu: container_name: pytest_ubuntu image: pytest_ubuntu # priveleged: true # user: root build: context: ./dockerfiles dockerfile: Dockerfile.ubuntu.pytest args: buildversion: 1 ports: - "3000:3000" networks: net1: ipv4_address: 10.5.0.2 volumes: - ./src:/opt tty: true command: tail -F /dev/null networks: net1: driver: bridge ipam: config: - subnet: 10.5.0.0/16 gateway: 10.5.0.1

Похожие статьи
Docker
build: Создание контейнеров + примеры
Dockerfile
Ubuntu в контейнере на Windows 10
Контейнер с доступом по SSH
Контейнер с Nginx
Контейнер для Jenkins агента
Контейнер для PyTest
Контейнер для Swagger
Make

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: