День 27 самостоятельного изучения Python. Развертывание минималистской производственной среды с использованием сред Windows, Linux и Docker.

День 27 самостоятельного изучения Python. Развертывание минималистской производственной среды с использованием сред Windows, Linux и Docker.


Когда написанный скрипт Python необходимо развернуть на сервере, возможно, вам не захочется устанавливать кучу вспомогательных библиотек, сред редактирования и т. д. Для развертывания лучше всего использовать зеленую минималистическую среду. Большинство людей используют настольную версию системы Windows, но вы также можете использовать для развертывания систему Linux.

Развертывание среды Windows

В среде Windows вы можете создать «зеленую» среду Python для быстрого выполнения сценариев и «зеленого» развертывания.

Создайте зеленую среду Python

Сначала зайдите на официальный сайт Python, чтобы загрузить встроенную версию Python:

адрес загрузки официального сайта Python

Щелкните эту ссылку, чтобы загрузить встраиваемый пакет в соответствии с требуемой версией Python (обратите внимание на архитектуру ЦП).

После распаковки мы создаем в нем несколько файлов для облегчения использования и настройки:

  • Создайте пакетный файл python_env.bat для настройки переменных среды, чтобы избежать необходимости каждый раз вручную устанавливать переменные среды (следует отметить, что python_env.bat размещается вместе с другими распакованными файлами)
@echo off
# 如果此批处理文件没有和python文件在同一目录下,则需要使用DOS命令进入该目录
# cd python
set PYTHON_HOME=%cd%
set PATH=%PYTHON_HOME%;%PYTHON_HOME%\Scripts;%PATH%
@echo on
  • Создайте ярлык, чтобы избежать проблем с ручным запуском командного файла для установки переменных среды каждый раз, когда вам нужно открыть cmd (поместите его в тот же каталог, что и python.bat).После завершения настройки вы можете запустить ярлык и
    Вставьте сюда описание изображения
    проверить ярлык, выполнив следующий скрипт: Является ли Python открытой среды нашей оптимизированной зеленой средой:
Python 
import sys 
print(sys.path)

Затем при необходимости можно дополнительно установить pipy:

https://pypi.org/project/pip/Скачать сget-pip.py

ссылка для скачивания get-pip.py на pypi

Выполните следующую команду, чтобы установить pip

python.exe get-pip.py

Затем вам нужно изменить файл *._pth.
Взяв в качестве примера python3.8.10, измените файл python38._pth, отмените комментарий перед импортом сайта и сохраните его.

python38.zip
.

# Uncomment to run site.main() automatically
import site # 取消这里的注释

могу обновить пип

python.exe -m pip install --upgrade pip

На этом этапе настроена зеленая и оптимизированная среда Python.Открыв ее с помощью созданного нами ярлыка, вы можете установить необходимые библиотеки, как обычную среду Python.

Примечание. Переменные среды действительны только в окне, открытом с помощью ярлыка, поэтому лучше всего использовать это окно для выполнения сценария.

Развертывание среды Linux

Поскольку системного сервера Linux в настоящее время нет, для построения среды Linux используется подсистема win11 + Linux, а для создания виртуальной машины также можно использовать VMware.

Создайте среду Linux

Использование Hyper-V

Чтобы использовать подсистему Linux в Windows 11, необходимо включить Hyper-V и функцию подсистемы Linux.

Откройте 设置->应用->可选功能->更多Windows功能, проверьте Hyper-Vи 适用于Linux的Windows子系统выберите все подпроекты, нажмите «ОК» и перезапустите после установки. Если есть возможность, выделите виртуальной машине еще одно-два ядра ЦП, иначе это повлияет на установку и работу подсистемы Linux.

После завершения перезапуска сначала обновите wsl, в противном случае может быть сообщено об ошибке, wslregisterdistribution завершился с ошибкой: 0x80370109, аналогично этому, есть несколько кодов ошибок.

wsl --обновить

Затем установите дистрибутив Linux, взяв в качестве примера Ubuntu.

wsl --install -d Ubuntu-20.04

В противном случае после завершения установки вам будет предложено создать нового пользователя. Этот пользователь имеет права root и может использовать sudo -i для выполнения ключевых операций.

На этом установка подсистемы Linux завершена.

Развертывание с помощью VMware

Установите VMware и после завершения создайте виртуальную машину. Затем загрузите образ системы и установите систему.

официальный сайт Ubuntu на китайском языке

Следует отметить, что во время установки вам будет предложено выбрать адрес зеркала и изменить его на адрес зеркала Ubuntu Cloud Alibaba.

http://mirrors.aliyun.com/ubuntu

По завершении установки вам будет предложено:

завершение: cmd-install: УСПЕХ: установка команды curtin

Затем вы можете перезапустить.

Развертывание с помощью Docker

Docker — это механизм контейнера приложений с открытым исходным кодом, который позволяет разработчикам упаковывать свои приложения и зависимости в переносимый образ, а затем публиковать его на любом популярном компьютере с операционной системой Linux или Windows, который также можно виртуализировать. Контейнеры полностью используют механизм песочницы и не будут иметь никаких интерфейсов друг с другом.

Контейнеры полностью используют механизм «песочницы» и не имеют никаких интерфейсов друг с другом (аналогично приложениям для iPhone).Что еще более важно, накладные расходы на производительность контейнера чрезвычайно низки.

Проще говоря, докер — это инструмент, который позволяет очень быстро и удобно развернуть необходимую среду. Он обладает характеристиками быстрого развертывания, производительностью, близкой к собственным системам, поддержкой нескольких контейнеров, простотой в использовании и обучении и чрезвычайно высокой безопасностью.

Информацию об установке, развертывании и использовании Docker см.

Учебное пособие для новичков

Что же может сделать для нас докер? Самое простое — настроить среду, например, для запуска нужно настроить различные сервисы, такие как redis, но docker можно настроить очень просто и почти без настройки, и он даже может делиться и синхронизировать данные в этих сервисах. нуждающимся частным бригадам (склад).

принцип докера

Docker включает в себя три основные концепции:

  • Изображение: образ Docker эквивалентен корневой файловой системе. Например, официальный образ ubuntu:16.04 содержит полный набор корневых файловых систем для минимальной системы Ubuntu16.04.
  • Контейнер: Отношения между изображением и контейнером аналогичны классам и экземплярам в объектно-ориентированном программировании. Изображение — это статическое определение, а контейнер — это объект, когда образ запускается. Контейнеры можно создавать, запускать, останавливать, удалять, приостанавливать и т. д.
  • Склад (репозиторий). Склад можно рассматривать как центр управления кодом, используемый для сохранения изображений.

Docker использует модель архитектуры клиент-сервер (C/S) и использует удаленные API для управления и создания контейнеров Docker.

Контейнеры Docker создаются из образов Docker.

концепция иллюстрировать
Docker-образы (Изображения) Образы Docker — это шаблоны, используемые для создания контейнеров Docker, таких как системы Ubuntu.
Докер-контейнер (Контейнер) Контейнер — это приложение или группа приложений, которые работают независимо и являются объектом среды выполнения образа.
Docker-клиент (Клиент) Клиент Docker использует Docker SDK (https://docs.docker.com/develop/sdk/) для взаимодействия с демоном Docker через командную строку или другие инструменты.
Хост Docker (Хост) Физическая или виртуальная машина, используемая для выполнения демона Docker и контейнеров.
Реестр Докера Хранилище Docker используется для сохранения изображений и может пониматься как хранилище кода при управлении кодом. Docker Hub (https://hub.docker.com) предоставляет огромную коллекцию изображений для использования. Реестр Docker может содержать несколько репозиториев; каждый репозиторий может содержать несколько тегов; каждый тег соответствует изображению. Обычно склад содержит изображения разных версий одного и того же программного обеспечения, и для каждой версии программного обеспечения часто используются теги. Мы можем указать, какой версией этого программного обеспечения является образ, в формате <имя хранилища>:<тег>. Если метка не указана, в качестве метки по умолчанию будет использоваться последняя.

Docker в некоторой степени является облегченной виртуальной машиной, но она принципиально отличается от других виртуальных машин ВМ: виртуальные машины ВМ (например, VMware) перезагружают операционную систему, а Docker основан на операционной системе своего хоста. необходимая среда.

Docker в основном состоит из двух частей: сервера и клиента.Клиент отправляет команды на сервер, а сервер их выполняет.

Клиент создает хранилище, сохраняет образ и при необходимости отправляет инструкции на сервер. Сервер запускает образ и генерирует контейнер.

Установить докер

Докер не является операционной системой, и его самого нужно запускать на основе операционной системы. Итак, здесь она разделена на установку под Linux и установку под Windows.

Используйте систему Linux

Ссылка: Установка Docker в Ubuntu18.04.

Используйте инструменты управления пакетами

Вы можете использовать менеджер пакетов для установки Docker в Linux.

apt install docker.io

Запустить и добавить в автозагрузку

systemctl start docker
systemctl enable docker

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

docker -v

Использовать репозиторий докеров

Возможно, вы устанавливаете старую версию Docker с помощью инструмента управления пакетами. Если вам нужно использовать новую версию, вы можете установить ее из репозитория Docker.

раздел установки официальной документации docker

Сначала удалите старый докер

apt remove docker docker-engine docker.io containerd runc

Сначала обновите и установите необходимые сертификаты из репозитория методом HTTPS.

apt update
apt install apt-transport-https ca-certificates curl gnupg lsb-release

Затем добавьте официальный ключ GPG докера.

mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Добавить официальный репозиторий докера

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновите пакет индекса и установите компоненты Docker.

apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Если при выполнении apt updateвы получаете ошибку GPG , вы можете выполнить эту команду

chmod a+r /etc/apt/keyrings/docker.gpg

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

docker -v

Установить из исходного кода

Во-первых, вам необходимо знать конкретную информацию о версии Linux, которую вы используете.

lsb_release -a

Затем загрузите пакет Docker Deb в соответствии с информацией о версии.

официальная библиотека исходного кода docker

Наконец, используйте инструмент dpkg для установки исходного пакета.

После завершения установки измените источник

Docker по умолчанию использует зарубежные источники. Если вы хотите переключиться на отечественные источники, вы можете обратиться к

изменение исходного кода докера

После завершения замены не забудьте перезапустить службу докера, которую можно использовать docker infoдля просмотра соответствующей информации.

Используйте систему Windows

Ссылка: Установка Docker в Windows 10.
Ссылка: Учебное пособие для новичков. Установка Docker Desktop.

Чтобы использовать докер под Windows, вам необходимо включить Hyper-V. Если вы используете систему Windows, включите ее напрямую. Если вы используете систему Windows, установленную VMware, вам необходимо включить виртуализацию в виртуальной машине, а затем включить Гипер-В.

Включите виртуализацию VMware

В настройках ЦП виртуальной машины установите флажок виртуализировать Intel VT-x/EPT или AMD-V/RVI . Если после проверки и входа в виртуальную машину будет предложено, что данная платформа не поддерживает виртуализированный Intel VT-x/EPT , это означает, что виртуализация не полностью отключена на хост-машине.

  1. Убедитесь, что VT включен в BIOS хоста (физической машины).
  2. Проверьте, включена ли виртуализация на этом компьютере, на странице «Диспетчер задач- >Производительность->ЦП».
  3. Проверьте, включены ли на хосте три элемента Hyper-V: Hyper-V, песочница Windows и платформа виртуальных машин. Если он включен, его необходимо отменить.
  4. Откройте Центр безопасности Windows> Безопасность устройства> Изоляция ядра> Целостность памяти и отключите его.
  5. Войдите в CMDbcdedit /set hypervisorlaunchtype off
  6. Перезагрузить компьютер

Таким образом, виртуализацию локального компьютера можно полностью отключить, а VMware включить виртуализацию виртуальной машины.

Включите виртуализацию для Windows

В системе Windows, где должен быть установлен Docker, выберите «Программы» > «Включить функции Windows» > «Hyper-V» и включите его. Он автоматически перезагрузится после установки

Рабочий стол Docker в Windows

Официальный адрес загрузки версии Docker для Windows

После завершения загрузки вы можете установить его.После завершения установки необходимо перезагрузить компьютер.

Следует отметить, что во время установки вы сами выбираете, использовать ли wsl2 вместо Hyper-V. Рекомендуется использовать именно его, но сначала необходимо установить wsl2.

  1. Сначала в Панели управления выберите «Программы и компоненты», затем выберите «Включить или отключить функции Windows», установите флажок «Подсистема Windows для Linux», а затем нажмите «ОК». Компьютер предложит перезагрузить компьютер.
  2. Во многих руководствах будет написано «После перезагрузки получите Ubuntu из Microsoft Store», но на самом деле из-за привычки Microsoft рыть дыры в своих продуктах существует большая вероятность того, что после установки она не запустится нормально. Здесь нам нужно сначала зайти на официальный сайт Microsoft и загрузить «Пакет обновления ядра WSL2 Linux для компьютеров x64».

Чтобы узнать, как установить wsl, вы можете загрузить последний пакет обновления ядра Linux, выполнив действия по ручной установке старой версии.

  1. После завершения установки установите WSL2 в качестве версии по умолчанию в PowerShell.

wsl --set-default-версия 2

  1. После установки и настройки WSL2 установите Ubuntu, и он будет работать нормально.

Если при запуске Docker возникает ошибка, возможно, проблема связана с wsl. Вы можете установить wsl или не использовать wsl (выключите **Использовать механизм на основе WSL 2 в настройках).

Если wsl продолжает сообщать об ошибках и не может быть устранен, вы можете переустановить рабочий стол Docker, отменить « Использовать WSL 2 вместо Hyper-V» , и все будет в порядке без использования wsl.

Использование Docker Desktop

После завершения установки запустите службу докера, и в панели программы появится значок кита . Просто подождите некоторое время, пока Docker Starting не сообщит, что он запустился. Вы можете открыть PowerShell и запустить следующую команду, чтобы проверить, успешно ли она работает:

Docker запустить
версию Docker Hello-World

После успешной операции его можно использовать в обычном режиме.

Изменение исходного кода Docker Desktop

По умолчанию докер использует сторонние источники. Если вам нужно изменить источник, рабочий стол Docker может установить новый источник в настройках и движке Docker:
Вставьте сюда описание изображения

Запустить службу докеров

Проверьте, включен ли докер

systemctl status docker

Запустите службу и добавьте ее в автозагрузку.

systemctl start docker
systemctl enable docker

При необходимости вы можете отключить автоматическое обновление докера.

apt-mark hold docker-ce

Автоматически запускать контейнеры при запуске Docker

В некоторых случаях (перезапуск сервера и т.п.) для перезапуска службы докеров можно использовать политики перезапуска для автоматического запуска необходимых контейнеров. Просто добавьте параметры при создании контейнера --restart=always.

Доступные конфигурации параметра –restart :

  • нет — не перезапускать контейнер при его выходе
  • при сбое — перезапускать контейнер только в том случае, если он завершает работу с ненулевым статусом.
  • всегда — перезапустить контейнер независимо от статуса выхода

Если --restart=always не указан при создании, его можно установить с помощью команды обновления.

docker update --restart=always 容器名称  

Вы также можете указать максимальное количество попыток Docker перезапустить контейнер при использовании политики при сбое. По умолчанию Docker будет пытаться перезапустить контейнер навсегда.

docker run --restart=on-failure:10 redis

При использовании политик перезапуска необходимо обратить внимание на следующие детали:

  1. Политика перезапуска может вступить в силу только после успешного запуска контейнера. «Успешный запуск» здесь означает, что контейнер работал не менее 10 секунд и находился под наблюдением докера. Это сделано для того, чтобы контейнеры, которые не были успешно запущены, попадали в бесконечный цикл перезапуска.
  2. Если вы вручную останавливаете контейнер (чем отличается от предыдущего, явно остановленного), политика перезапуска, установленная контейнером, будет игнорироваться, если только демон Docker не будет перезапущен или контейнер не будет перезапущен вручную. Это позволяет избежать еще одного бесконечного цикла.
  3. Политики перезапуска можно использовать только для контейнеров. Для служб Swarm политики перезапуска имеют неутвержденные конфигурации.

Использование докера

Процесс использования докера

  • Поиск изображений
  • Скачать изображение
  • Запускаем образ и создаем контейнер.На
    этом этапе можно использовать какой-то простой сервисный софт, а какой-то более сложный нужно продолжить.
  • Войдите в контейнер

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

  • версия докера: просмотр информации о конкретной версии.
  • Имя изображения поиска в Docker: поиск определенного изображения.
  • конкретное имя образа docker pull: Скачать изображение
  • Конкретное имя образа запуска Docker: образ запуска
  • Docker images: просмотреть все локальные изображения
  • docker ps: Чтобы просмотреть состояние контейнера, вы можете добавить параметры -a, чтобы показать скрытое (не запущенное), -s, чтобы показать занятое пространство.
  • Система Docker: просмотр информации о системе Docker. Ее необходимо использовать с параметрами. Например, docker system df -vвы можете просмотреть пространство, занимаемое каждым изображением и контейнером.
  • обрезка системы Docker: очистка ненужных ресурсов, включая остановленные контейнеры, неиспользуемые образы, тома, сети и т. д.

Поиск изображений

Поиск информации о программном обеспечении Redis

docker search redis

Или вы можете найти информацию об изображении и загрузить имя с официального сайта докера.

Официальный склад образов Docker

Скачать изображение

Загрузите изображение на основе искомого имени (версии) программного обеспечения.

docker pull redis

Если оно слишком медленное, можно поменять его на бытовое зеркало.

Скорость извлечения Docker — слишком медленное решение (все)

Однако в настоящее время из-за ограничений Docker Hub невозможно получить последний официальный образ после использования ускорителя изображений. Временно удалите конфигурацию ускорителя и напрямую подключитесь к Docker Hub, чтобы получить ее.

Локальное управление изображениями

Изображениями, загруженными локально, можно управлять.

  • Docker images: список локальных изображений
  • docker rmi: удалить один или несколько локальных изображений
  • Тег docker: изменить имя изображения
  • Docker Inspect: получить метаданные контейнера/изображения
  • История Docker: получить информацию об истории изображений.

Для локальных изображений вы можете сохранить их в локальный файл или импортировать из локального файла в изображение.

  • docker save: сохраните изображение как локальный файл. Используйте параметр -o, чтобы определить имя локального файла.
  • экспорт докера: экспортируйте изображение в локальный файл
  • Импорт docker: импортируйте локальные файлы в образ (можно импортировать только тип .tar.gz)
  • docker load: снова загрузить изображение, сохраненное как локальный файл, в локальное изображение (например, удаленное по ошибке).
    Загрузка аналогична импорту. Разница в том, что загрузка будет импортировать иерархическую и историческую информацию, поэтому импортируемые данные будут больше. Разница между сохранением и экспортом одинакова.

Запустите образ и создайте контейнер

Используйте команду run или create для запуска загруженного образа. В комбинации параметров d означает запуск контейнера в фоновом режиме и возврат идентификатора контейнера, i — для интерактивной работы, а t — использование терминала; параметр -- за именем следует имя контейнера (один образ может запускаться несколько раз), затем -p должен сопровождаться ip (если параметр ip отсутствует, значение по умолчанию — 0.0.0.0) и сопоставление портов (формат: хост ( хост) порт: порт контейнера) и, наконец, службу зеркала, которую нужно запустить.

Таким образом, можно создать контейнер, сгенерированный этим образом, а имя контейнера — это имя, указанное в параметре --name. Разница между run и create заключается в том, что create создает новый контейнер, но не запускает его.

docker run -dit --name redis1 -p 6300:6379  redis

Также можно использовать некоторые полезные параметры:

  • -e: установить переменные среды, например `-e MYSQL_ROOT_PASSWORD=root_mysql
  • -P: случайное сопоставление портов, внутренний порт контейнера случайным образом сопоставляется с портом хоста, и -p являются взаимоисключающими.
  • -h: указать имя хоста контейнера

Вы также можете просмотреть информацию о запущенных контейнерах.

docker ps

Вы также можете использовать параметры: -a для отображения всех контейнеров (включая те, которые не запущены), -l для отображения последних созданных контейнеров и -n для вывода списка n последних созданных контейнеров.

Операции над жизненным циклом контейнера

Для уже установленных контейнеров можно выполнить следующие операции:

  • docker start: запустить один или несколько остановленных контейнеров.
  • docker stop: остановите работающий контейнер и поддержите «мягкий выход». Сначала отправьте сигнал SIGTERM, а затем через определенный период времени (10 с) отправьте сигнал SIGKILL. Приложения внутри Docker могут получать сигнал SIGTERM, а затем выполнять некоторую «работу перед выходом», например сохранение состояния, обработку текущих запросов и т. д.
  • docker kill: убить работающий контейнер, отправить сигнал SIGKILL, и приложение закроется напрямую
  • перезапуск докера: перезапустить контейнер
  • docker rm: Чтобы удалить один или несколько контейнеров, вы можете использовать параметр -f для удаления работающего контейнера, -l для удаления сетевого соединения между контейнерами вместо самого контейнера, -v для удаления тома, связанного с контейнером; кроме того, вы можете использовать этот параметр для удаления всех docker rm $(docker ps -a -q)существующих остановленных контейнеров.
  • docker-pause: приостановить все процессы в контейнере.
  • docker unpause: возобновить все процессы в контейнере
  • переименование докера: имя контейнера

Операции с информацией о содержимом контейнера

Для запуска контейнеров вы можете выполнить следующие операции, чтобы просмотреть некоторую информацию.

  • docker logs: получение журналов контейнера.
    Доступные параметры: -f для отслеживания вывода журнала, -t для отображения временной метки, -tail для отображения только последних N журналов контейнера и -since для отображения всех журналов в определенное время. время начала.
  • docker top: просмотр информации о процессах, выполняемых в контейнере, поддержка параметров команды ps.
  • Docker Inspect: получить метаданные контейнера/изображения

Соединение контейнеров

Контейнеры в докере изолированы. Если вы хотите получить доступ, вам нужно сопоставить порт с портом хоста, что затрудняет доступ друг к другу. Сопоставление портов — не единственный способ подключения докера к другому контейнеру. Существует система соединений, которая позволяет соединять несколько контейнеров вместе и обмениваться информацией о соединении.

Сначала создайте новую сеть докера, -d Bridge указывает тип сети как мост, а последняя тестовая сеть — это имя сетевого подключения.

docker network create -d bridge test-net

Затем вы можете добавить два контейнера в сеть и указать сеть для вновь установленного соединения при создании контейнера.

docker run -itd --name test1 --network test-net redis /bin/bash
docker run -itd --name test2 --network test-net redis /bin/bash

Таким образом, два контейнера могут получить доступ друг к другу. Вы можете использовать ping внутри контейнера для сетевого тестирования. Если в самом контейнере нет инструмента ping, вы можете установить его сейчас.

apt-get update
apt install iputils-ping
docker exec -it test1 /bin/bash
ping test2
docker exec -it test2 /bin/bash
ping test1

Некоторые другие операции сети докеров

  • docker network Connect: подключить контейнер к сети
  • отключение сети Docker: отключить контейнерную сеть.
  • docker network ls: список всех сетей
  • обрезка сети docker: удалить все неиспользуемые сети
  • docker network rm: удалить одну или несколько сетей

Войдите в контейнер

Вы можете использовать docker exec для выполнения команд в работающем контейнере.

docker exec redis1 ls

Смысл этой команды — выполнить команду ls в контейнере redis1 (поскольку контейнер создается на основе существующей среды хоста, то есть используемой системы Linux). Вы также можете использовать псевдотерминал для входа в контейнер для операций.

docker exec -it redis1 /bin/bash

Обмен файлами между контейнером и хостом

Вы можете использовать команду docker cpдля копирования файлов Docker на локальный хост-компьютер или отменить операцию. Формат:

контейнер docker cp: путь к файлу в контейнере путь к локальному файлу
docker cp путь к локальному файлу контейнер: путь к файлу в контейнере

Сопоставление портов для уже запущенных контейнеров

Docker может установить сопоставление портов при создании контейнера, но если контейнер уже запущен, есть три способа увеличить сопоставленный порт:

  1. Упакуйте контейнер в образ и снова запустите образ.
    Этот метод очень прост, но если тара относительно большая, упаковка будет неудобна.
  2. Используйте iptableпереадресацию портов, например сопоставьте порт 8000 контейнера с портом 8001 хоста докера.
iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
  1. Измените файл конфигурации докера: /var/lib/docker/containers/[hash_of_the_container]/hostconfig.jsonи config.v2.json.
    [hash_of_the_container] — хеш-код склада, который является идентификатором склада. docker inspect 容器名称Его можно использовать для просмотра. Обратите внимание, что при внесении изменений вам необходимо сначала остановить службу Docker. hostconfig.jsonЕго "PortBindings":{}можно изменить на "PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"8080"}]}, где 80 — порт контейнера, а 8080 — локальный порт. Затем config.v2.jsonдобавьте элемент конфигурации "ExposedPorts":{"80/tcp":{}},и добавьте этот элемент конфигурации "Try": true,перед (если он имеет значение false, измените его на true), чтобы открыть порт 80. Затем перезапустите демон Docker service docker restart. Здесь есть проблема.После перезапуска вы docker ps -aне можете увидеть сопоставление портов с помощью , но вы docker inspect 容器名можете видеть, что элементы конфигурации были успешно изменены и их можно использовать с помощью .

Создать изображение

Если существующий образ не может удовлетворить наши потребности или мы хотим упаковать собственную среду, мы можем обновить образ или создать его с нуля.

Обновить изображение

После создания контейнера внутри контейнера вносятся изменения.Например, используйте команду apt-get update для обновления работающего контейнера. Затем вы можете отправить копию контейнера, чтобы он стал новым изображением.

docker commit -m "has update" -a "user_li" e218edb10161 root/redis:v2
  • -m: представленная информация описания
  • -a: указать автора изображения
  • e218edb10161: Идентификатор контейнера
  • root/redis:v2: укажите имя целевого изображения и тег, который нужно создать.

После отправки вы можете использовать команду docker images для просмотра нового образа или использовать этот новый образ для создания контейнера.

Создать новое изображение

Создание нового образа в основном делится на две части: создание Dockerfile и использование Dockerfile для создания образа.

Создать Docker-файл

Создайте текстовый файл Dockerfile, используемый для сборки образа. Текстовое содержимое содержит инструкции и инструкции, необходимые для сборки образа.

root@linux:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "[email protected]"
RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd user_li
RUN     /bin/echo 'user_li:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

Каждая команда создает новый слой изображения, а префикс каждой команды должен быть в верхнем регистре.

FROM : все настроенные изображения основаны на изображениях FROM. Если они не основаны на каком-либо образе, метод записи следующий: С нуля
MAINTAINER : объявляет информацию об авторе
RUN : используется для выполнения следующей команды командной строки. Может выполнять оболочки (команду командной строки, эквивалентную команде оболочки, выполняемой в терминале) и exec (выполнение исполняемого файла, который может сопровождаться параметрами).

Следует отметить, что каждый раз при выполнении инструкций Dockerfile в докере будет создаваться новый слой. Следовательно, слишком много бессмысленных слоев приведет к слишком сильному расширению изображения. Например:

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN gunzip redis.tar.gz
RUN tar -xvf redis.tar

Приведенное выше выполнение создаст изображение слоя 3. Вы можете использовать &&команду символической ссылки, и после выполнения будет создано только изображение уровня 1.

FROM centos
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && gunzip redis.tar.gz \
    && tar -xvf redis.tar

Вот пример среды разработки:

FROM ubuntu-dev:latest
MAINTAINER disen [email protected]
WORKDIR /usr/src
RUN	apt update \
	&& apt install cron
RUN git clone https://github.com/dabaicai233/v2ex.git
RUN pip3 install scrapy -i https://mirrors.aliyun.com/pypi/simple
WORKDIR /usr/scr/v2ex/v2ex
RUN chmod +x start_spider.sh
RUN crontab crontab.cron
CMD python3

Создать образ

В каталоге, где хранится файл Dockerfile, используйте docker buildдля выполнения действия сборки.

docker build -t redis:v3 .
  • -t: указать имя целевого изображения, которое будет создано.
  • .: Путь, по которому находится файл Dockerfile, который может быть абсолютным путем.Поскольку
    режим работы Docker — C/S. Наша родная машина — C, а движок докера — S. Фактический процесс сборки завершается в движке Docker, поэтому наши локальные файлы в настоящее время нельзя использовать. Для этого необходимо упаковать файлы в указанный каталог на нашем локальном компьютере и предоставить их механизму докера. Если последний параметр не указан, контекстным путем по умолчанию является расположение файла Dockerfile. Примечание . Не помещайте ненужные файлы в контекстный путь, поскольку они будут упакованы и отправлены в механизм Docker вместе. Если файлов слишком много, процесс будет медленным.

Подробное объяснение инструкций Dockerfile.

Подробное объяснение Dockerfile супер полное

Помимо FROM и RUN, файлы Dockerfile также могут использовать следующие инструкции:

КОПИРОВАТЬ

Команда копирования копирует файлы или каталоги из контекстного каталога по указанному пути в контейнере.

Формат:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

[–chown=:]: необязательный параметр, пользователь меняет владельца и группу файла, скопированного в контейнер.
<Исходный путь>: исходный файл или исходный каталог, который может быть подстановочным выражением, и его правила подстановочных знаков должны удовлетворять правилам Go filepath.Match. Например:

COPY hom* /mydir/
COPY hom?.txt /mydir/

<Целевой путь>: указанный путь в контейнере. Этот путь не требуется устанавливать заранее. Если путь не существует, он будет создан автоматически.

ДОБАВЛЯТЬ

Формат использования инструкции ADD аналогичен формату COPY (при тех же требованиях официально рекомендуется COPY). Функции схожи, но есть следующие различия:

  • Преимущества ADD: если <исходный файл> представляет собой файл, сжатый в формате tar, а формат сжатия — gzip, bzip2 и xz, он будет автоматически скопирован и распакован в <путь назначения>.
  • Недостатки ADD: файлы, сжатые tar, невозможно скопировать без распаковки. Это приведет к аннулированию кэша сборки образа, что может замедлить сборку образа. Решение о том, использовать ли его конкретно, можно решить, исходя из того, нужна ли автоматическая декомпрессия.
КМД

Подобно инструкции RUN, она используется для запуска программ, но они запускаются в разные моменты времени:

  • CMD запускается при запуске докера.
  • RUN находится в сборке докера.
    Функция: Укажите программу, которая будет запускаться по умолчанию для запущенного контейнера. Когда программа завершится, контейнер также завершится. Программа, указанная инструкцией CMD, может быть переопределена программой, указанной в параметре командной строки docker run для запуска.
    Примечание . Если в файле Dockerfile содержится несколько инструкций CMD, вступит в силу только последняя.
    Формат:
CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

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

ВХОДНАЯ ТОЧКА

Аналогично команде CMD, но она не будет переопределена командами, указанными в параметрах командной строки запуска Docker, и эти параметры командной строки будут использоваться в качестве параметров программы, указанной командой ENTRYPOINT.
Однако если вы используете параметр --entrypoint при запуске Docker, программа, указанная в директиве ENTRYPOINT, будет перезаписана.
Преимущества : при выполнении запуска Docker вы можете указать параметры, необходимые для операции ENTRYPOINT.
Примечание . Если в файле Dockerfile имеется несколько инструкций ENTRYPOINT, вступит в силу только последняя.
Формат:

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

Его можно использовать с командой CMD: CMD обычно используется для изменения параметров. CMD здесь эквивалентен передаче параметров в ENTRYPOINT. Например:
предположим, что образ nginx:test был создан с помощью Dockerfile:

FROM nginx

ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

1. Запуск без передачи параметров

$ docker run  nginx:test

Следующая команда будет запущена в контейнере по умолчанию для запуска основного процесса.

nginx -c /etc/nginx/nginx.conf

2. Операция передачи параметров

$ docker run  nginx:test -c /etc/nginx/new.conf

Следующая команда будет запущена по умолчанию в контейнере для запуска основного процесса (/etc/nginx/new.conf: при условии, что этот файл уже существует в контейнере)

nginx -c /etc/nginx/new.conf
ЕНВ

Установите переменную среды и определите переменную среды, затем вы сможете использовать эту переменную среды в последующих инструкциях. Формат:

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
АРГ

Параметры сборки такие же, как ENV. Но сфера применения другая. Переменные среды, установленные ARG, действительны только в Dockerfile, то есть они действительны только во время процесса сборки Docker. Эта переменная среды не существует в построенном образе.
Команду сборки docker build можно переопределить с помощью --build-arg <имя параметра>=<значение>.
Формат:

ARG <参数名>[=<默认值>]
ОБЪЕМ

Определите тома анонимных данных. Если вы забудете смонтировать том данных при запуске контейнера, он будет автоматически смонтирован на анонимный том. эффект:

  • Избегайте потери важных данных из-за перезапуска контейнера, что очень опасно.
  • Избегайте контейнеров, которые становятся все больше.

Формат:

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
РАЗОБЛАЧАТЬ

Просто объявите порт. эффект:

  • Помогите пользователям изображений понять защитный порт этой службы изображений, чтобы облегчить сопоставление конфигурации.
  • При использовании случайного сопоставления портов во время выполнения, то есть при использовании docker run -P, порт EXPOSE будет автоматически и случайным образом сопоставлен.
    Формат:
EXPOSE <端口1> [<端口2>...]
РАБОЧИЙ ДИАПАЗОН

Укажите рабочий каталог. Рабочий каталог, указанный с помощью WORKDIR, будет существовать на каждом уровне построенного образа. (Рабочий каталог, указанный в WORKDIR, должен быть создан заранее). В процессе сборки образа с помощью docker build каждая команда RUN представляет собой новый уровень. Всегда будут существовать только каталоги, созданные с помощью WORKDIR.

WORKDIR <工作目录路径>
ПОЛЬЗОВАТЕЛЬ

Используется для указания пользователя и группы пользователей для выполнения последующих команд.Это только переключает пользователя на выполнение последующих команд (пользователь и группа пользователей должны уже существовать заранее).

USER <用户名>[:<用户组>]
ПРОВЕРКА ЗДОРОВЬЯ

Используется для указания программы или инструкции для мониторинга рабочего состояния службы контейнера Docker.

HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
НАСТРОЙКА

Используется для задержки выполнения команд сборки. Проще говоря, команда, указанная с помощью ONBUILD в файле Dockerfile, не будет выполняться во время процесса сборки образа (при условии, что образ представляет собой тестовую сборку). Когда новый файл Dockerfile использует ранее созданный образ ИЗ тестовой сборки и при выполнении сборки Dockerfile нового образа будет выполнена команда, указанная ONBUILD в файле Dockerfile тестовой сборки.

ONBUILD <其它指令>
ЭТИКЕТКА

Инструкция LABEL используется для добавления к изображению некоторых метаданных в виде пар ключ-значение. Синтаксис следующий:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

Например, мы можем добавить автора изображения:

LABEL org.opencontainers.image.authors="lilei"

поддержка библиотеки Python

При развертывании производственной среды сначала необходимо установить библиотеку поддержки. Зависимые библиотеки обычно requirements.txtустанавливаются в соответствии с .

генерироватьrequirements.txt

Обычно есть два пути: заморозить на Python и стороннюю библиотеку pipreqs.

метод заморозки

Выполните команду в каталоге проекта терминала, чтобы сгенерировать ее напрямую.

pip freeze > requirements.txt

Этот метод прост, но не рекомендуется.
Если проект, который вы пишете, написан с использованием виртуальной среды, вы можете использовать этот метод, поскольку этот метод будет генерировать все пакеты для всей вашей среды Python.
Если вы не используете виртуальную среду и используете этот метод, вы обнаружите, что сгенерированные файлы содержат много пакетов, которые вам не нужны.Таким образом, при использовании установленных пакетов зависимостей будет много ненужных пакетов.

пипреки

pipreqs — это сторонняя библиотека. Используя pipreqs, вы можете автоматически получать все компоненты и их версии в текущем проекте и генерировать файл require.txt, что значительно облегчает миграцию проекта и управление пакетами развертывания. По сравнению с прямым использованием команды pip Freeze, вы можете напрямую изолировать создание пакетов от других проектов.

Прежде чем использовать библиотеку, необходимо установить ее.

pip install pipreqs

Затем выполните в каталоге проекта

pipreqs ./ --encoding=utf8 --force

–encoding=utf8: Использовать кодировку utf8
–force: Принудительное выполнение, перезаписать, если файл require.txt существует в сгенерированном каталоге
. /: Путь для создания файла require.txt

Установить зависимые библиотеки

Вы можете установить необходимые вам зависимые библиотеки согласно требованиям.txt

pip install -r requirements.txt

Supongo que te gusta

Origin blog.csdn.net/runsong911/article/details/126994111
Recomendado
Clasificación