Это 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
основное использование
Варианты параметров:
-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
7. Тест
Эта демонстрационная программа покажет количество посещений этой страницы
Просмотр журналов контейнера
пройти черезdocker-compose scale
Увеличить количество контейнеров
использованная литература
официальная документация по докеру
docker-compose для начала работы с Docker
Рекомендуемое чтение
Основы программирования оболочки Linux!
Linux sudo и sudoers подробно!
Настройка и настройка параметров ядра Linux TCP (подробно)!
Подробное объяснение Linux RAID, которое вы должны знать для эксплуатации и обслуживания!