Добавить README.md
This commit is contained in:
commit
0a39b55c07
|
@ -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, удаляя ненужные слои и файлы после установки зависимостей.
|
||||||
|
|
Loading…
Reference in New Issue