Основы Docker-образов
Что такое Docker-образ?
Docker-образ представляет собой легковесный, автономный и исполняемый пакет, который включает все необходимое для запуска программного обеспечения, включая код, среду выполнения, системные инструменты, библиотеки и настройки. Он служит чертежом для создания Docker-контейнеров.
Основные характеристики Docker-образов
Неизменяемость
Docker-образы неизменяемы, то есть после создания их нельзя изменить. Любые изменения требуют создания нового образа.
graph LR
A[Dockerfile] --> B[Build Image]
B --> C[Create Container]
C --> D[Run Application]
Слоистая архитектура
Docker-образы используют слоистую файловую систему, которая позволяет эффективно хранить и передавать данные образов.
Тип слоя |
Описание |
Пример |
Базовый слой |
Основная операционная система |
Ubuntu 22.04 |
Слой зависимостей |
Системные библиотеки и инструменты |
Python, Node.js |
Слой приложения |
Код приложения и его настройки |
Ваше пользовательское приложение |
Методы создания образов
1. Dockerfile
Самым распространенным способом создания Docker-образов является использование Dockerfile.
## Example Dockerfile for a Python application
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3 python3-pip
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
CMD ["python3", "app.py"]
2. Docker Commit
Вы можете создать образ из работающего контейнера с помощью команды docker commit
.
## Create an image from a container
docker commit container_name new_image_name:tag
Соглашения об именовании образов
Docker-образы следуют определенному формату именования:
repository_name/image_name:tag
- Пример:
labex/python-app:latest
Команды управления образами
## List local images
docker images
## Pull an image from Docker Hub
docker pull ubuntu:22.04
## Remove an image
docker rmi image_name:tag
Лучшие практики
- Создавайте небольшие и специализированные образы.
- Используйте официальные базовые образы.
- Минимизируйте количество слоев.
- Используйте многоэтапные сборки для сложных приложений.
Понимая эти основы, вы будете хорошо подготовлены для эффективной работы с Docker-образами в своем процессе разработки.