Если вы хотите запускать Python-программы в изолированной и удобной среде, Docker — отличный инструмент.
В этой статье мы подробно расскажем о двух основных подходах: первый — использование официального образа Python, второй — установка Python на других базовых образах, таких как Alpine и Ubuntu.
Оба варианта имеют свои плюсы и особенности, поэтому выбор зависит от ваших задач и требований.
- Вариант 1: Использование официального образа Python
- Вариант 2: Установка Python на базовых образах (Alpine и Ubuntu)
Почему удобно использовать Docker для Python‑проектов
Docker помогает создать устойчивую, переносимую среду, которая одинаково работает на любой системе. Особенно это важно для Python-проектов, где могут возникать проблемы с зависимостями и версиями интерпретатора.
Обратите внимание, что установка Docker описана в отдельной статье (для Windows, для Linux). Здесь мы сосредоточимся на самих способах запуска Python.
Но перед тем как перейти непосредственно к Docker, подготовим проверочный скрипт:
[root@waky practice]# mkdir python_scripts
[root@waky practice]# echo 'print("Hello from Docker!")' > python_scripts/my_script.py
Вариант 1: Использование официального образа Python
На Docker Hub есть официальный образ python, созданный командой разработчиков Python. Он содержит заранее установленный интерпретатор Python и обеспечивает быстрый старт.
Почему стоит использовать официальный образ?
- Быстрый старт без необходимости самостоятельно настраивать Python.
- Образы обновляются и поддерживаются командой Python.
Как создать контейнер с Python на базе официального образа
Скачайте официальный образ, используйте команду docker pull, укажите требуемую версию:
[root@waky practice]# docker pull python:3.14
3.14: Pulling from library/python
53c88f1dfeb7: Pull complete
eae668646f44: Pull complete
ff2e6e687b6c: Pull complete
7c40a3faff76: Pull complete
85694cfea2c4: Pull complete
d7d82d76b698: Pull complete
50475ada0cb1: Pull complete
Digest: sha256:edf6433343f65f94707985869aeaafe8beadaeaee11c4bc02068fca52dce28dd
Status: Downloaded newer image for python:3.14
docker.io/library/python:3.14
[root@waky practice]#
Запустите контейнер с помощью docker run:
[root@waky practice]# docker run -dt --name python_container -v ./python_scripts/:/home python:3.14
973a2c06641f8c818f28f222c169a03b5beb180fea7d4aa471cef4278b26aa20
[root@waky practice]#
Использованные параметры:
-d — запускает его в фоновом режиме
–t – доступ до псевдо терминала
–name python_container — задает имя контейнера
-v ./python_scripts/:/home — монтирует локальную директорию внутрь контейнера
python:3.14— образ, из которого создается контейнер
Зайдите в контейнер командой docker exec:
[root@waky practice]# docker exec -it python_container /bin/bash
root@973a2c06641f:/#
Мы попали в консоль контейнера, проверим версию Python:
root@973a2c06641f:/# python --version
Python 3.14.0
root@973a2c06641f:/#
Запустим наш проверочный скрипт:
root@973a2c06641f:/# python /home/my_script.py
Hello from Docker!
root@973a2c06641f:/#
Контейнер из официального образа запущен и работает. Теперь у вас есть изолированная среда с нужной нам версией Python для запуска ваших скриптов.
Выйдем из контейнера:
root@973a2c06641f:/# exit
exit
[root@waky practice]#
и удалим его командой docker rm:
[root@waky practice]# docker rm -f python_container
python_container
[root@waky practice]#
Если ваш скрипт не требует постоянной работы, а лишь однократного исполнения – держать все время работающий контейнер не рационально. Можно создать контейнер, выполнить скрипт, получить результат и удалить контейнер:
[root@waky practice]# docker run --rm --name python_container -v ./python_scripts/:/home python:3.14 python /home/my_script.py
Hello from Docker!
[root@waky practice]#
Использованные параметры:
—rm – удаление контейнера после остановки
python /home/my_script.py – команда, которая будет запущена в контейнере после его создания
Запуск контейнера непосредственно для выполнения скрипта позволяет экономить ресурсы сервера.
Вариант 2: Установка Python на базовых образах (Alpine и Ubuntu)
Иногда требуется установить Python в уже имеющийся контейнер. Или нужно собрать свой образ на базе популярного дистрибутива. Рассмотрим, как установить Python в таком случае на примере двух два популярных образов alpine и ubuntu.
Использование Alpine Linux
Alpine — это легкий минималистский образ с малым размером. Для установки Python в нем потребуется выполнить некоторые команды:
Создадим новый контейнер из образа alpine:
[root@waky practice]# docker run -dt --name python_container -v ./python_scripts/:/home alpine
d343b0ea7685233117417200a08d2ef0c490f087e653c0ccb8f48b9af954ccfd
[root@waky practice]#
Заходим в контейнер:
[root@waky practice]# docker exec -it python_container /bin/sh
/ #
Для установки будем использовать пакетный менеджер, обновляем пакеты:
/ # apk add --update
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/community/x86_64/APKINDEX.tar.gz
OK: 7 MiB in 16 packages
/ #
Устанавливаем python3:
/ # apk add python3
(1/17) Installing libbz2 (1.0.8-r6)
(2/17) Installing libexpat (2.7.3-r0)
(3/17) Installing libffi (3.4.8-r0)
(4/17) Installing gdbm (1.24-r0)
(5/17) Installing xz-libs (5.8.1-r0)
(6/17) Installing libgcc (14.2.0-r6)
(7/17) Installing libstdc++ (14.2.0-r6)
(8/17) Installing mpdecimal (4.0.1-r0)
(9/17) Installing ncurses-terminfo-base (6.5_p20250503-r0)
(10/17) Installing libncursesw (6.5_p20250503-r0)
(11/17) Installing libpanelw (6.5_p20250503-r0)
(12/17) Installing readline (8.2.13-r1)
(13/17) Installing sqlite-libs (3.49.2-r1)
(14/17) Installing python3 (3.12.12-r0)
(15/17) Installing python3-pycache-pyc0 (3.12.12-r0)
(16/17) Installing pyc (3.12.12-r0)
(17/17) Installing python3-pyc (3.12.12-r0)
Executing busybox-1.37.0-r19.trigger
OK: 46 MiB in 33 packages
/ #
Запускаем тестовый скрипт:
/ # python3 /home/my_script.py
Hello from Docker!
/ #
Выйдем из контейнера и удалим его:
[root@waky practice]# docker rm -f python_container
python_container
[root@waky practice]#
Изменения, внесенные в контейнер вручную, исчезнут вместе с контейнером в случае его удаления.
Чтобы не устанавливать Python каждый раз, можно использовать Dockerfile следующего содержания:
FROM alpine:latest
RUN apk add --update && apk add python3
Если вы не знакомы с Dockerfile, вам поможет наша статья, посвященная созданию образов.
Использование Ubuntu
Ubuntu – один из самых популярных дистрибутивов Linux, поэтому и образ ubuntu имеет широкое распространение.
Установка Python в контейнер на Ubuntu отличается только используемыми образом и пакетным менеджером.
Создадим контейнер из образа ubuntu:
[root@waky practice]# docker run -dt --name python_container -v ./python_scripts/:/home ubuntu
1d0e000b69259a4c087d51501a6a0572688d32e560228ee3a8f805df93c9e8ea
[root@waky practice]#
Зайдем в консоль контейнера:
[root@waky practice]# docker exec -it python_container /bin/bash
root@1d0e000b6925:/#
Обновляем пакеты:
root@1d0e000b6925:/# apt update
Get:1 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Get:2 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Get:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:4 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [2781 kB]
Get:5 http://archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
Get:6 http://archive.ubuntu.com/ubuntu noble/restricted amd64 Packages [117 kB]
Get:7 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages [1808 kB]
Get:8 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages [19.3 MB]
Get:9 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [33.1 kB]
Get:10 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [1181 kB]
Get:11 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [1687 kB]
Get:12 http://archive.ubuntu.com/ubuntu noble/multiverse amd64 Packages [331 kB]
Get:13 http://archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Packages [35.9 kB]
Get:14 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [1942 kB]
Get:15 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [2050 kB]
Get:16 http://archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [2925 kB]
Get:17 http://archive.ubuntu.com/ubuntu noble-backports/main amd64 Packages [49.4 kB]
Get:18 http://archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [34.3 kB]
Fetched 34.9 MB in 10s (3464 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
root@1d0e000b6925:/#
Устанавливаем python3:
root@1d0e000b6925:/# apt install -y python3
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
ca-certificates libexpat1 libpython3-stdlib libpython3.12-minimal libpython3.12-stdlib libreadline8t64 libsqlite3-0 media-types netbase openssl python3-minimal python3.12 python3.12-minimal
readline-common tzdata
Suggested packages:
python3-doc python3-tk python3-venv python3.12-venv python3.12-doc binutils binfmt-support readline-doc
The following NEW packages will be installed:
ca-certificates libexpat1 libpython3-stdlib libpython3.12-minimal libpython3.12-stdlib libreadline8t64 libsqlite3-0 media-types netbase openssl python3 python3-minimal python3.12
python3.12-minimal readline-common tzdata
0 upgraded, 16 newly installed, 0 to remove and 0 not upgraded.
...
root@1d0e000b6925:/#
Проверяем работу скрипта:
root@1d0e000b6925:/# python3 /home/my_script.py
Hello from Docker!
root@1d0e000b6925:/#
Опять же, если Python в контейнере нужен на постоянной основе, это лучше зафиксировать с помощью Dockerfile:
FROM ubuntu:latest
RUN apt update && apt install -y python3
Заключение
Использование Docker дает гибкость в запуске Python-окружений. Выбор между официальным образом и установкой Python на базовых образах зависит от задач: для быстрого старта подойдет официальный образ, а для минимизации размера или кастомной настройки — базовые образы.