Автор оригинала: David Wong.
Цели для этой проблемы: На основе entos 7.6 инкапсулируйте готовое зеркало, которое можно использовать для запуска PHP-проектов В этой статье не обсуждается грамматика файлов dockerfile, и предполагается, что вы знаете базовые знания операционной системы Unix и имеете операционную среду, подобную Unix (включая, но не ограничиваясь, физическую машину, подобную Mac или Linux, виртуальную машину, подобную Unix, компьютер Windows MinGW или CygWin), и что вы понимаете основные операции docker и обладаете определенной степенью способности к чтению документов.
Мертвая работа
Создание рабочего каталога
mkdir ~/docker-learn cd ~/docker-learn
Создать файл настройки
touch Dockerfile
Затем скопируйте ваш обычный файл nginx.conf в рабочий каталог
cp xxx/nginx.conf nginx.conf
Упаковочное Базовое Зеркало
Отредактируйте файл настройки мы создали
Основное содержание
Объявите, что это изображение наследуется от последней версии CentOS
FROM centos
Установить nginx
Создать исходный файл nginx
Поскольку в репозитории CentOS нет nginx, нам необходимо самостоятельно обновить источник добавления nginx в docker. Скопируйте содержимое источника RHEL в nginx.org в файл nginx.repo
Вы также можете создать nginx. выполните локальное репо, выполнив следующие команды
Напишите дубликат nginx. инструкция по репо в образ docker
Установите nginx с помощью Yum и установите его для загрузки
Установите PHP
Исходный код CentOS по умолчанию имеет низкую версию PHP и связанных с ним пакетов, нам нужно заменить версию какого-то нового источника. Эта статья Реми зеркало с открытым исходным кодом
Установите исходный код Remi
Используйте Yum для установки PHP и связанных с ним пакетов и установки их для загрузки
Уборка
Как мы все знаем, если вы хотите разместить его в Интернете, чем меньше зеркало, тем лучше. Docker Yum будет генерировать много кэшей, поэтому необходимо выполнить некоторые работы по очистке.
RUN yum clean headers &&
yum clean packages &&
yum clean metadata &&
rm -rf /usr/share/manОбъявить точки входа зеркальной среды выполнения
То есть первая команда, выполняемая средой выполнения контейнера, если ее в ней нет, вполне вероятно, что некоторые привилегированные команды, такие как chkconfig, не будут выполняться.
ENTRYPOINT ["/sbin/init"]
Объединить файл настройки
Каждая инструкция в файле dockerfile генерирует один слой зеркал, который увеличит размер наших зеркал. Обычный способ-объединить как можно больше инструкций в один заказ, что может эффективно уменьшить размер зеркального изображения.
FROM centos
# Duplicate two repos
COPY conf/tsinghua-base.repo /etc/yum.repos.d/CentOS-Base.repo
COPY conf/nginx.repo /etc/yum.repos.d/nginx.repo
# Installation components and related packages
RUN yum makecache &&
yum -y install nginx &&
chkconfig nginx on &&
yum install -y epel-release &&
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm &&
yum update -y &&
yum install -y --enablerepo=remi --enablerepo=remi-php72
php
php-openssl
php-curl
php-bcmath
php-devel
php-mbstring
php-mcrypt
php-mysqlnd
php-pdo
php-gd
php-xml
php-opcache
php-fpm &&
chkconfig php-fpm on &&
yum clean headers &&
yum clean packages &&
yum clean metadata &&
rm -rf /usr/share/man
# Declare entry points
ENTRYPOINT ["/sbin/init"]Проверка доступности изображений
Строительные Зеркала
Стоит отметить, что официальное репо nginx не очень стабильно. Это может привести к ошибкам во время выполнения. Как правило, удается повторить попытку несколько раз. Если есть другие типы ошибок, проверьте среду и файл настройки на наличие каких-либо проблем
Контейнер с правами доступа для запуска фонового запуска вернет идентификатор
При использовании параметра — privileged контейнер будет иметь реальные привилегии суперпользователя, в противном случае у него будут только локальные привилегии общего пользователя. Эта опция требуется только в том случае, если в контейнере выполняются определенные специальные операции (например, systemctl).
Проверьте состояние работы зеркала
Если возвращаемый результат похож на этот, то наша операция верна.
Если для запуска изображения используется сопоставление портов, вы даже можете увидеть страницу приветствия nginx по умолчанию в своем локальном браузере
Нажмите Зеркало на контейнерную службу Aliyun
- Зарегистрировать пространство имен Aliyun
Войдите в зеркальную консоль Aliyun. Войдите в зеркальную консоль Aliyun.
Интерфейс выглядит примерно так.
- Использование Зеркального Ускорителя
Нажмите на зеркальный ускоритель в левом нижнем углу на https://cr.console.aliyun.com/cn-zhangjiakou/instances/mirrors и вы увидите свою собственную ссылку на ускорение.
Найдите свою операционную систему и выполняйте ее одну за другой. В этой статье используется версия Ubuntu. Так что казнь прошла гладко, без каких-либо исключений.
- Войдите на склад Aliyun docker
Sudo docker login -- username = your Ali Cloud username registry. CN - zhangjiakou. aliyuncs. com Password: Your Aliyun password Login Succeeded
- Создайте пространство имен
Щелкните пространство имен слева, нажмите Создать пространство имен и введите свое имя пространства имен
Пространства имен можно понимать как организацию, к которой принадлежит зеркало, например, полное имя CentOS image docker.io/centos, докер.io-это пространство имен изображения CentOS, но в docker существует несколько типов изображений CentOS.пространство имен ввода-вывода.
Публичное и частное относятся к тому, могут ли зеркальные изображения быть просмотрены общественностью на зеркальном рынке Aliyun и могут ли они быть получены без каких-либо привилегий.
- Создание складов
Только что мы создали пространство имен, поэтому следующим шагом будет создание хранилища.
Репозиторий можно понимать как имя пакета, созданного организацией, например: полное имя образа CentOS docker.io/centos, CentOS является хранилищем docker.io (программное обеспечение), а программное обеспечение CentOS может иметь множество версий.
Перейти к https://cr.console.aliyun.com/cn-zhangjiakou/instances/repositories страница склада и нажмите на новый склад.
Только что был создан выбор пространства имен, и краткое описание является зеркальным введением.
Нажмите кнопку Далее, чтобы выбрать локальное хранилище для источника
После нажатия кнопки Создать зеркальное хранилище вы найдете на странице дополнительную строку данных, указывающую на то, что создание прошло успешно.
Наведите курсор мыши на тот же значок, что и при загрузке, чтобы увидеть эксклюзивный адрес склада
- Измените имя зеркала
Мы собираемся поместить зеркало, которое мы только что построили, под названием first-build, на склад Aliyun. Во-первых, мы им воспользуемся. изображения докера | первая сборка grep Найдите его идентификатор зеркала. Затем мы изменим имя зеркала, чтобы оно соответствовало формату имени зеркала стороннего репозитория docker.
Сторонний Зеркальный Склад Формат Зеркального имени: Адрес склада/Организация/Название Зеркала: Номер Зеркальной Версии
Возьмем в качестве примера Aliyun: адрес склада Aliyun/пространство имен/название склада: версия реестра.cn-чжанцзякоу.aliyuncs.com/leasn-docker/learn-docker:1
Затем выполните следующие команды для изменения:
docker tag 3482e8529a90 registry.cn-zhangjiakou.aliyuncs.com/leasn-docker/learn-docker:1
Повторное использование образы докеров | первая сборка grep Я не могу его найти, потому что его название изменилось.
- Нажимное зеркало
sudo docker push registry.cn-zhangjiakou.aliyuncs.com/leasn-docker/learn-docker
Когда все силы иссякнут, мы найдем дополнительную версию на складе Aliyun.
До сих пор зеркало успешно продвигалось. Мы можем использовать наше зеркало по всему миру, основываясь на поддержке Алиюна.
Приветствую Алиюна за его самоотверженную преданность делу с открытым исходным кодом
Зеркало Работающего проекта Упаковки
Теперь мы собираемся изучить, как позволить зеркалу управлять нашим собственным проектом.
На этот раз мы можем нажать на зеркальное отражение Алиюна.
Скопируйте наш подготовленный файл nginx.conf в зеркало
Полный текст nginx.conf
Скопируйте исходный код разработки в зеркало
Создайте свой проект в текущем каталоге и сделайте вид, что в нашем проекте есть только один файл, который находится внутри./проект
Скопируйте наш проект в зеркало и взвесьте запущенный каталог
Полный текст файла Dockerfile
Создайте зеркало и используйте сопоставление портов для запуска нашего контейнера
Если ничего неожиданного не произойдет, мы уже можем увидеть phpinfo () в 127.0.0.1:8080 локально.
Теперь, когда phpinfo увидел это, я не буду останавливаться на том, как запустить весь проект.
Стоит отметить, что новые версии подталкиваются к
Использование docker-compose для организации изображений
Compose-это инструмент для определения и запуска многоконтейнерных приложений Docker. Используя Compose, вы можете настроить службы вашего приложения с помощью файлов YAML. Затем с помощью одной команды вы можете создать и запустить все службы из конфигурации
Приложение использует sudo apt установить докер-составить установить
Настройка структуры каталогов
Добавьте слой каталога за пределами нашего текущего рабочего каталога примерно следующим образом: Рабочий каталог > docker-learn (предыдущий рабочий каталог) и docker-compose.yaml
Древовидная структура каталога:
- Редактировать Редактировать
Docker-compose содержит множество инструкций и написан на языке yaml. Можно понять, что параметры команд запуска, выполняемых в командной строке, записываются в файл и запускаются согласованно единым инструментом.
Main Directives:
Информация о версии версии, я не знаю, почему это должно быть 3
version: 3
Службы должны составить список услуг. На этот раз мы в основном пишем сервис под названием docker-learns.
services:
- Полный текст docker-compose.yml
version: '3'
services:
# Service name
docker-learn:
# Does the service start with privileges -- privileged
privileged: true
# Construction
build:
# Construction上下文 即: docker build ./docker-learn
context: ./docker-learn
# Port mapping, i.e. -p 80:80
ports:
- 80:80
# Exposed ports, equivalent to Dockerfile EXPOSE instructions
# The EXPOSE instruction only states the port that the container should open, but it does not actually open it!
# This option really works when docker run-it-P (capitalized)
expose:
- 80
# Directory mapping, equivalent to docker run-v
# volumes:
# - ./logs/php-fpm:/var/log/php-fpm
# - ./logs/nginx:/var/log/nginxЗапустите изображение с помощью docker-создать
Закройте другие запущенные контейнеры, чтобы избежать конфликтов с контейнерами, которые мы собираемся запустить
Начальное Зеркало
Отдельный запуск запускает все контейнеры, определенные в службах, без использования имени службы. Если в службах несколько служб, вы можете использовать имя службы up для отдельного обновления контейнера службы По умолчанию up запустит контейнер с скомпилированным изображением файла Dockerfile в контексте сборки: – – сборка вынуждена повторно скомпилировать изображение с помощью файла Dockerfile для перезапуска. Однако при сборке все равно будет использоваться кэш существующего слоя изображения. Принудительное воссоздание полностью перекомпилирует без использования зеркального слоя кэширование
Если аналогичное приглашение появится для уже используемого адреса bind:, повторите попытку для связанного порта в портах
Мы обнаружили, что мы все еще можем видеть phpinfo в 127.0.0.1:8080
Доступ к Дженкинсу для непрерывной интеграции
Обновление
Доступ к kubernetes
Обновление
Оригинал: “https://developpaper.com/automated-construction-and-continuous-integration-and-deployment-delivery-of-practical-engineering-source-based-on-docker-gogs-jenkins-and-kubernetes/”