# Шпаргалка по Dockerfile и docker-compose Эта шпаргалка содержит основные команды и примеры использования Dockerfile и docker-compose. Полезно для быстрой настройки и работы с Docker. --- ## Dockerfile ### Основные инструкции Dockerfile: 1. **FROM** Указывает базовый образ: ```dockerfile FROM ``` Пример: ```dockerfile FROM python:3.10-slim ``` 2. **WORKDIR** Устанавливает рабочую директорию в контейнере: ```dockerfile WORKDIR /app ``` 3. **COPY** Копирует файлы из локальной системы в образ: ```dockerfile COPY ``` Пример: ```dockerfile COPY . /app ``` 4. **RUN** Выполняет команды внутри образа при сборке: ```dockerfile RUN ``` Пример: ```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 ``` 8. **ENV** Устанавливает переменные окружения: ```dockerfile ENV = ``` 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: ``` 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 . ``` 2. Просмотр образов: ```bash docker images ``` 3. Удаление образа: ```bash docker rmi ``` ### Работа с контейнерами: 1. Запуск контейнера: ```bash docker run --name -p 8000:8000 ``` 2. Просмотр запущенных контейнеров: ```bash docker ps ``` 3. Остановка контейнера: ```bash docker stop ``` 4. Удаление контейнера: ```bash docker rm ``` ### Работа с 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, удаляя ненужные слои и файлы после установки зависимостей.