Добавить README.md

This commit is contained in:
Xanders25 2024-12-24 23:33:39 +02:00
commit 0a39b55c07
1 changed files with 252 additions and 0 deletions

252
README.md Normal file
View File

@ -0,0 +1,252 @@
# Шпаргалка по 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, удаляя ненужные слои и файлы после установки зависимостей.