Использование docker-compose of docker!

задняя часть Linux
Использование docker-compose of docker!

Это 18-й день моего участия в августовском испытании обновлений. Ознакомьтесь с подробностями мероприятия: Испытание августовского обновления

Введение

Docker-ComposeПроект является официальным проектом Docker с открытым исходным кодом, который отвечает за быструю оркестрацию контейнерных кластеров Docker.

Docker-Compose делит управляемые контейнеры на три уровня, а именно工程(project),服务(service)так же как容器(container).

Все файлы в рабочем каталоге Docker-Compose (docker-compose.yml, файл расширения или файл переменной среды и т. д.) образуют проект. Если специальное указанное имя проекта не указано, это имя текущего каталога. Проект может содержать несколько служб, и каждая служба определяет образ, параметры и зависимости работающего контейнера. Служба может включать в себя несколько экземпляров контейнера. Docker-Compose не решает проблему балансировки нагрузки, поэтому для обнаружения службы и балансировки нагрузки необходимы другие инструменты.

Файл конфигурации проекта Docker-Compose по умолчанию имеет значениеdocker-compose.yml, доступный через переменные окруженияCOMPOSE_FILEили-fПользовательский файл конфигурации параметров, который определяет несколько зависимых служб и контейнер, в котором работает каждая служба. Использование файла шаблона Dockerfile позволяет пользователям легко определить один контейнер приложения. На работе часто возникают ситуации, когда несколько контейнеров должны взаимодействовать друг с другом для выполнения определенной задачи. Например, для реализации веб-проекта, помимо самого контейнера веб-службы, часто необходимо добавить контейнер внутренней службы базы данных и даже контейнер балансировки нагрузки.

Compose позволяет пользователямdocker-compose.ymlФайл шаблона (в формате YAML) для определения набора связанных контейнеров приложений в качестве проекта.

Проект Docker-Compose написан на Python и вызывает API, предоставляемый службой Docker, для управления контейнерами. Поэтому, если операционная платформа поддерживает Docker API, вы можете использовать Compose для управления оркестровкой.

Установить докер-компоновку

1. Загрузите текущую стабильную версию Docker Compose.

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2. Примените исполняемые разрешения к двоичному файлу

chmod +x /usr/local/bin/docker-compose

3. Проверьте, прошла ли установка успешно

docker-compose --version

image-20210817140750891

основное использование

Варианты параметров:

-f --file FILE指定Compose模板文件,默认为docker-compose.yml
-p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名
--verbose  输出更多调试信息
-v,-version 打印版本并退出
--log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)

Общие команды:

docker-compose up #启动容器
docker-compose down #关闭并删除容器
docker-compose [start | stop | pause | restart] #启动/停止/暂停/重启 容器 
docker-compose run NAME ping baidu.com #在指定容器运行命令
docker-compose kill #机制停止容器
docker-compose scale #设置服务运行的容器个数
docker-compose ps #列出项目中所有的容器
docker-compose rm #删除容器
docker-compose logs #查看日志
docker-compose bulid #构建项目中的容器
docker-compose push #推送镜像
docker-compose pull #拉取依赖镜像
docker-compose config #查看项目容器配置
docker-compose create #为服务创建容器
docker-compose exec NAME /bin/bash #进入指定容器
docker-compose port NAME 端口号 #显示某个容器端口所映射的公共端口

Файл шаблона для создания Docker

Файл шаблона Compose — это файл YAML, определяющий службы, сети и тома. Путь по умолчанию к файлу шаблона Compose — docker-compose.yml в текущем каталоге.Вы можете использовать .yml или .yaml в качестве расширения файла. Стандартный файл шаблона Docker-Compose должен содержатьversion,services,networksТри основные части, самые важные из нихservicesа такжеnetworksдве части.

Введение параметра

version: Compose в настоящее время имеет три версии: версия 1, версия 2 и версия 3. Compose различает версию 1 и версию 2 (Compose 1.6.0+, Docker Engine 1.10.0+). Версия 2 поддерживает больше команд. Версия 1 будет объявлена ​​устаревшей в будущем.

image: указывает имя изображения или идентификатор изображения службы. Если образ локально не существует, Compose попытается извлечь его.

build: В дополнение к указанному образу служба также может быть основана на Dockerfile для выполнения задачи сборки при ее запуске с помощью up.Метка сборки — build, и можно указать путь к папке, в которой находится Dockerfile. Compose автоматически создаст образ с помощью Dockerfile, а затем использует образ для запуска сервисного контейнера.

context: параметр может быть путем к файлу Dockerfile или URL-адресом ссылки на репозиторий git, когда предоставленное значение является относительным путем, он преобразуется в путь относительно файла компоновки, этот каталог также является контекстом, отправляемым в демон Docker

dockerfile: Используйте файл dockerfile для сборки, необходимо указать путь сборки

commond: Используйте команду, чтобы переопределить команду по умолчанию, выполняемую после запуска контейнера.

container_name: Вы можете настроить имя проекта, имя службы

depends_on: при использовании Compose самым большим преимуществом является то, что команд запуска меньше, но обычно требуется порядок запуска контейнера проекта.Если контейнер запускается непосредственно сверху вниз, он неизбежно не запустится из-за контейнера зависимости. Например, если контейнер приложения запущен, когда контейнер базы данных не запущен, контейнер приложения завершится, поскольку базу данных невозможно найти. Тег depend_on используется для решения проблемы зависимостей контейнеров и последовательности запуска.

ports: порты, которые сопоставляют службы с хостами.

extra_hosts: Метки, которые добавляют имена хостов, добавляют некоторые записи в файл /etc/hosts.

volumes: смонтировать каталог или существующий контейнер томов данных.

dns: Пользовательский DNS-сервер. Может быть значением или списком.

expose: порт открыт, но не сопоставлен с хостом, доступ к нему разрешен только подключенным службам.

net: установка режима сети.

Пример

Ниже показан официальный пример

1. Создайте папку проекта

 mkdir composetest
 cd composetest

2. При написании демо-проекта

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

3. Пишитеrequirements.txtфайл со списком зависимостей

flask
redis

4. ПишитеDockerfileдокумент

# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

5. Пишитеdocker-compose.ymlдокумент

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

6. Запустите проект

docker-compose up -d

image-20210817151557870

7. Тест

Эта демонстрационная программа покажет количество посещений этой страницы

image-20210817151629590

Просмотр журналов контейнера

image-20210817151813724

пройти черезdocker-compose scaleУвеличить количество контейнеров

image-20210817152049423

использованная литература

официальная документация по докеру

docker-compose для начала работы с Docker

Рекомендуемое чтение

Основы программирования оболочки Linux!

Linux sudo и sudoers подробно!

Настройка и настройка параметров ядра Linux TCP (подробно)!

Подробное объяснение Linux RAID, которое вы должны знать для эксплуатации и обслуживания!

Управление службами Linux (подробно)!

Руководство по серверному оборудованию!