Сейчас у нас есть сайт, работающий на 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 заключается в том, что его можно развернуть в любом месте, а среда точно такая же.Это не вызывает проблем, таких как «это работает на моем локальном хосте».Но как это работает, нужно ли мне и моему коллеге разрабатывать наш код ВНУТРИ контейнера докера?Как это вообще работает?