Образ Docker на CentOS с php, mysql и apache - PullRequest
0 голосов
/ 30 декабря 2018

Сейчас у нас есть сайт, работающий на php 5.6 в Azure в операционной системе на базе CentOS 7.Каждый раз, когда мы хотим выполнить развертывание нового кода, мы должны делать это с помощью ftp на наш сервер и вручную передавать файлы и папки.Это очень подвержено ошибкам и занимает у нас часы развертывания и отладки впоследствии каждый раз.мы разрабатываем на нашей локальной машине Windows, используя PHP с WAMP.Таким образом, уже существует несоответствие между нашими средами локального хоста и производственной средой.

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

То, чего я хочу достичь, - это путь для меня и моихколлега, чтобы написать наш код и отправить его в наш репозиторий BitBucket, после чего конвейер берет его, создает контейнер докера и развертывает его (автоматически) (это хорошая идея, как насчет активных пользователей во время развертывания нового контейнера?)на наш веб-сайт.

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

  • 1) Я создаю виртуальную машину CentOS с использованием VirtualBox
  • на этой виртуальной машине я устанавливаю docker
  • Я создаю здесь файл docker, где я использую базовый образ php7.3-apache, и поверх него я также установлю mysql.
  • ??Нужно ли мне делать дополнительные вещи, такие как копирование папок с кодом, или это делается с помощью bitbucket ??

Теперь проблема, с которой я сталкиваюсь, заключается в создании этого «контейнера докеров» для моей ситуации.Я понимаю, что это, вероятно, очень распространенный вариант использования Docker, но я прочитал тысячи учебных пособий и посмотрел тонны видео, но я не могу найти ответы на свои самые основные вопросы, и в итоге я застрял и разочаровался в течение нескольких дней / недель.,У меня есть полностью работающий веб-сайт, созданный в CodeIgniter, но ради вопроса я просто хочу иметь рабочую версию Docker-контейнера, содержащего PHP MySQL и Apache.

Я вошел в виртуальную машину CentOS и выполнил следующие команды:

mkdir dockertest
touch index.html (and i placed some text in here)
touch index.php (and i placed a basic echo "hello world" in here)
touch docker-compose.yml
mkdir .docker
cd .docker
touch Dockerfile
touch vhost.conf

Dockerfile выглядит следующим образом:

FROM php:7.3.0-apache-stretch

MAINTAINER Dennis

COPY . /srv/app
COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf

RUN chown -R www-data:www-data /srv/app && a2enmod rewrite

Затем я могу собратьизображение, используя

docker build --file .docker/Dockerfile -t docker-test .

Сейчас я могу запустить контейнер с помощью следующей команды:

docker run --rm -p 8080:80 docker-test

В этот момент я перехожу к моей CentOS VM и пытаюсь сделать curl localhost: 8080, и я получаю следующий HTML:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access on this server. <br />
</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at localhost Port 8080</address>
</body></html>

Так что я предполагаю, что это означает, что сервер Apache работает, но он нигде не видит мои индексные файлы.

Я сильно поражен количеством документации и учебных пособий, доступных для Docker, но все они кажутся мне слишком высокими или нет, которые ориентированы на CentOS 7, PHP, MySQL и Apache вместе взятые.

Вопрос, который меня тоже беспокоит: Преимущество Docker заключается в том, что его можно развернуть в любом месте, а среда точно такая же.Это не вызывает проблем, таких как «это работает на моем локальном хосте».Но как это работает, нужно ли мне и моему коллеге разрабатывать наш код ВНУТРИ контейнера докера?Как это вообще работает?

1 Ответ

0 голосов
/ 31 декабря 2018

Процесс должен выглядеть следующим образом:

  • развиваться: вы и ваши коллеги разрабатывают код, они отправляют его в систему управления версиями (git на bitbucket / github) -> код находится водин доверенный репозиторий

  • build: вы берете этот код и создаете (или несколько) образ (-ы) Docker вместе с ним: на сервере Apache вам необходим код HTML, Javascript.Создайте образ Docker, начиная с образа Apache, который затем выполняет шаг для извлечения кода из репозитория git внутри контейнера.Это ваш сервер переднего плана.

Для части БД вы, вероятно, хотите другой контейнер или даже используете управляемую службу, которая обрабатывает миграции / обновления для вас, поэтому вам нужно только беспокоиться о данных в базе данных,Если вы хотите иметь свой собственный контейнер, убедитесь, что данные находятся в ОБЪЕМЕ, который смонтирован в контейнере, но в противном случае хранится на локальном или сетевом диске (т.е. НЕ внутри контейнера, который может быть уничтожен при любом обновлении)

  • deploy: извлеките образы из реестра по выбору и убедитесь, что контейнеры подключены по мере необходимости (т. Е. Либо на одном и том же хосте и связаны, либо на разных узлах, которые имеют доступ друг к другу через частныйсеть)

Примечания:

Используйте Docker для Windows вместо виртуальной машины и устанавливайте Docker внутри нее.

Хост не имеет значения, это базовый образ в контейнере, который имеет значение, развертываете ли вы на хосте Ubuntu, CentOS или CoreOS, базовый образ Docker для вас важен для установки зависимостей и создания кодаrun.

На этапе сборки вы, вероятно, не захотите извлекать git из образа, если ваш проект является частным репозиторием, потому что для этого вам понадобятся учетные данные внутри образа: скорее вылибо извлеките код из git за пределы изображения и добавьте его к изображению, либо используйте другой (приватный) контейнер, имеющий учетные данные git pull, чтобы извлечь код, выполнить сборку и выгрузить файл сборки, который затем можно ДОБАВИТЬ вотправляемый контейнер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...