commit 0a39b55c078c7e6377c8abe611529ffda038d536 Author: Xanders25 Date: Tue Dec 24 23:33:39 2024 +0200 Добавить README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..954157c --- /dev/null +++ b/README.md @@ -0,0 +1,252 @@ +# Шпаргалка по 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, удаляя ненужные слои и файлы после установки зависимостей. +