HELPes/README.md

253 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Шпаргалка по Dockerfile и docker-compose
Эта шпаргалка содержит основные команды и примеры использования Dockerfile и docker-compose. Полезно для быстрой настройки и работы с Docker.
---
## Dockerfile
### Основные инструкции Dockerfile:
1. **FROM**
Указывает базовый образ:
```dockerfile
FROM <base_image>
```
Пример:
```dockerfile
FROM python:3.10-slim
```
2. **WORKDIR**
Устанавливает рабочую директорию в контейнере:
```dockerfile
WORKDIR /app
```
3. **COPY**
Копирует файлы из локальной системы в образ:
```dockerfile
COPY <source> <destination>
```
Пример:
```dockerfile
COPY . /app
```
4. **RUN**
Выполняет команды внутри образа при сборке:
```dockerfile
RUN <command>
```
Пример:
```dockerfile
RUN apt-get update && apt-get install -y build-essential
```
5. **CMD**
Определяет команду, выполняемую при запуске контейнера:
```dockerfile
CMD ["executable", "arg1", "arg2"]
```
Пример:
```dockerfile
CMD ["python", "app.py"]
```
6. **ENTRYPOINT**
Устанавливает основную команду для контейнера:
```dockerfile
ENTRYPOINT ["executable", "arg1"]
```
7. **EXPOSE**
Указывает порт, используемый контейнером:
```dockerfile
EXPOSE <port>
```
8. **ENV**
Устанавливает переменные окружения:
```dockerfile
ENV <key>=<value>
```
9. **VOLUME**
Определяет точки монтирования для данных:
```dockerfile
VOLUME ["/data"]
```
10. **LABEL**
Добавляет метаданные к образу:
```dockerfile
LABEL maintainer="your_email@example.com"
```
### Пример Dockerfile:
```dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
```
---
## docker-compose.yml
### Основные элементы docker-compose:
1. **version**
Указывает версию файла Compose:
```yaml
version: "3.8"
```
2. **services**
Определяет сервисы и их параметры:
```yaml
services:
app:
image: <image_name>
```
3. **build**
Указывает путь к Dockerfile для сборки образа:
```yaml
build:
context: .
```
4. **ports**
Пробрасывает порты контейнера на хост:
```yaml
ports:
- "8000:8000"
```
5. **volumes**
Монтирует директории или создаёт тома:
```yaml
volumes:
- ./app:/app
```
6. **environment**
Передаёт переменные окружения:
```yaml
environment:
- KEY=value
```
7. **depends_on**
Указывает зависимости между сервисами:
```yaml
depends_on:
- db
```
8. **networks**
Настраивает сети:
```yaml
networks:
- my_network
```
### Пример docker-compose.yml:
```yaml
version: "3.8"
services:
app:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./app:/app
environment:
- DATABASE_URL=postgres://postgres:password@db:5432/postgres
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
```
---
## Полезные команды Docker
### Работа с образами:
1. Сборка образа:
```bash
docker build -t <image_name> .
```
2. Просмотр образов:
```bash
docker images
```
3. Удаление образа:
```bash
docker rmi <image_id>
```
### Работа с контейнерами:
1. Запуск контейнера:
```bash
docker run --name <container_name> -p 8000:8000 <image_name>
```
2. Просмотр запущенных контейнеров:
```bash
docker ps
```
3. Остановка контейнера:
```bash
docker stop <container_id>
```
4. Удаление контейнера:
```bash
docker rm <container_id>
```
### Работа с docker-compose:
1. Запуск всех сервисов:
```bash
docker-compose up
```
2. Остановка всех сервисов:
```bash
docker-compose down
```
3. Пересборка образов и перезапуск:
```bash
docker-compose up --build
```
4. Перезапуск контейнеров без пересборки:
```bash
docker-compose up --force-recreate
```
5. Просмотр логов:
```bash
docker-compose logs
```
---
## Полезные советы:
1. Используйте `.env` для хранения конфиденциальных данных.
2. Всегда сохраняйте данные сервисов через тома (`volumes`).
3. Для разработки монтируйте код в контейнер с помощью `volumes`, чтобы изменения были видны сразу.
4. Оптимизируйте Dockerfile, удаляя ненужные слои и файлы после установки зависимостей.