В нашем предыдущий Статья Мы создали Dockerfile для наших Mojolicious применение. В туда я упомянул, что мы должны запустить несколько команду докера, и когда мы рассмотрим ее в разной среде, мы должны заботиться о различных перестановках и комбинациях. Что если мы сможем автоматизировать его больше. Что, если мы сможем абстрактным сложностью и как пользователь, мне просто нужно запустить минимальную команду, чтобы она работала. Вот приходит makefile. Мы будем использовать это, чтобы сделать наш процесс более проще. Для Windows вы можете использовать gmake.exe
Утилита вместо сделать
Отказ Это поставляется с клубникой Perl. Давайте создадим файл make в mojo_reac_app/makefile.
DOCKER_TAG ?= mojo_react_app:development NO_CACHE ?= false PULL ?= false BUILD_TYPE ?= development CONTAINER_NAME ?= mojo_react_app HTTPS_OUT_PORT ?= 443 HTTPS_IN_PORT ?= 443 HTTP_OUT_PORT ?= 80 HTTP_IN_PORT ?= 80 DOCKER_REPO ?=ADDRESS ?= 0.0.0.0 DOCKER_CFG = .DEFAULT_GOAL := help build: # Build the dockerfile docker build --pull=${PULL} --no-cache=$(NO_CACHE) -t $(DOCKER_TAG) . create: # Create the container and copy the certificates echo 'Creating container for ${ADDRESS}' docker create --name ${CONTAINER_NAME}_${BUILD_TYPE} -t \ -p ${ADDRESS}:$(HTTPS_OUT_PORT):$(HTTPS_IN_PORT) -p ${ADDRESS}:$(HTTP_OUT_PORT):$(HTTP_IN_PORT) --env mode=${BUILD_TYPE} \ ${DOCKER_TAG} docker cp ${DOCKER_CFG}/mojo_react_app/apache-certificate/apache_certificate_${BUILD_TYPE}.crt ${CONTAINER_NAME}_${BUILD_TYPE}:/etc/ssl/certs/server.crt docker cp ${DOCKER_CFG}/mojo_react_app/apache-certificate/apache_certificate_${BUILD_TYPE}.key ${CONTAINER_NAME}_${BUILD_TYPE}:/etc/ssl/private/server.key start: # Start a container docker start ${CONTAINER_NAME}_${BUILD_TYPE} run: # Create and start the container make create -e ADDRESS=${ADDRESS} HTTPS_OUT_PORT=${HTTPS_OUT_PORT} HTTPS_IN_PORT=${HTTPS_IN_PORT} BUILD_TYPE=${BUILD_TYPE} DOCKER_TAG=${DOCKER_TAG} make start -e BUILD_TYPE=${BUILD_TYPE} make show stop: # Stop a running container docker stop ${CONTAINER_NAME}_${BUILD_TYPE}; clean_container: # remove previous container docker rm -f ${CONTAINER_NAME}_${BUILD_TYPE} 2>/dev/null \ && echo 'Container for "${CONTAINER_NAME}_${BUILD_TYPE}" removed.' \ || echo 'Container for "${CONTAINER_NAME}_${BUILD_TYPE}" already removed or not found.' clean_image: # remove created image docker rmi ${DOCKER_TAG} 2>/dev/null \ && echo 'Image(s) for "${DOCKER_TAG}" removed.' \ || echo 'Image(s) for "${DOCKER_TAG}" already removed or not found.' dev: make build -e PULL=${PULL} NO_CACHE=${NO_CACHE} make clean_container make create make start make show stag: $(eval override BUILD_TYPE=staging) $(eval override DOCKER_TAG=${CONTAINER_NAME}:${BUILD_TYPE}) # This will return only the IP address associated with the domain name ans assign it to ADDRESS $(eval override ADDRESS=$(shell dig +short )) make build -e PULL=true NO_CACHE=true DOCKER_TAG=${DOCKER_TAG} make clean_container -e BUILD_TYPE=${BUILD_TYPE} make create -e ADDRESS=${ADDRESS} BUILD_TYPE=${BUILD_TYPE} DOCKER_TAG=${DOCKER_TAG} make start -e BUILD_TYPE=${BUILD_TYPE} make show prod: $(eval override BUILD_TYPE=production) $(eval override DOCKER_TAG = ${CONTAINER_NAME}:${BUILD_TYPE}) # This will return only the IP address associated with the domain name ans assign it to ADDRESS $(eval override ADDRESS=$(shell dig +short $(DOCKER_TAG)' @echo ' stag run docker --container-- in staging mode' @echo ' prod run docker --container-- in production mode' @echo ' login run as service and login --container--' @echo ' clean_image remove docker --image-- ' @echo '' @echo 'Extra arguments:' @echo 'CONTAINER_NAME=: make clean_container -e CONTAINER_NAME=my_app (no need to provide this param, it will be set by default)' @echo 'BUILD_TYPE=: make clean_container -e CONTAINER_NAME=my_app BUILD_TYPE=staging (whether the build type is 'development', 'staging' or 'production')' @echo 'DOCKER_TAG=: make build -e DOCKER_TAG=my_app:staging' @echo 'HTTPS_OUT_PORT=: make create -e HTTPS_IN_PORT=8080 (port from which the request will come- outside world)' @echo 'HTTPS_IN_PORT=: make create -e HTTPS_IN_PORT=443 (port to which the request will be forwarded)'
Я знаю его подавляющее. Давайте пройдем каждый из них.
- Первоначальные 12 строк являются параметрами по умолчанию. Если вы не будете предоставлять никакого параметра, это примет эти аргументы. По умолчанию все в
Развитие
режим. Вам придется перезаписать это для разных режимов.
DOCKER_TAG => Name of your app with the env name (e.g. mojo_react_app:development) NO_CACHE => Whether to start the build from scratch (true|false). Default - false PULL => Whether to pull a newer version of the image (true|false). Default - false BUILD_TYPE => Build environment (development|staging|production). Default - development CONTAINER_NAME => Name of the container (e.g. mojo_react_app) HTTPS_OUT_PORT => HTTPS host port visible to outside world while publishing the container(443) HTTPS_IN_PORT => HTTPS container port on which traffic will be coming inside the container(443) HTTP_OUT_PORT => HTTP host port visible to outside world while publishing the container(80) HTTP_IN_PORT => HTTP container port on which traffic will be coming inside the container(80) DOCKER_REPO => URL of the docker repo where you want to push or pull image. ADDRESS => IP address of the container from where the outside word can access it. Default - 0.0.0.0 DOCKER_CFG =? Path to docker config files on host machine. This will contain the apache certificate and will be private to you.
построить
построит ваш dockerfileСоздать
Создаю контейнер и скопируйте сертификаты ApacheНачать
начну контейнерБеги
создаст и начну контейнер. Он внутренне позвонитСоздать
иНачать
команда.Стоп
остановлю беговой контейнер.Clean_container
Удалите/удалите удалить предыдущий контейнер, если существовать.Clean_Image.image.
удаляет/удалить созданное изображение, если существует.Показать
покажет информацию о запущенном контейнере.Восстановить
восстановит докерфила. Это просто позвонитClean_container
ипостроить
изображение снова.вверх
запустит контейнер на данном порту. Это всегда будет тянуть новое изображение.Вход
войдет в контейнер. Используя это, вы можете увидеть журналы трафика и что происходит внутри контейнера.Выпуск
толкать
тянуть
Тег
— Эти команды, которые вы будете использовать, когда вы хотите создать тег и нажать на URL-адрес Docker Reppo (где-то, где вы можете получить доступ к нему И вам не нужно создавать изображение снова). Это горстка в развертывании Дженкинса, в противном случае в обычном разработке работает не так важно и не будет использоваться многое.Помогите
даст вам информацию о другом парамене и что они делают.- Теперь 3 важных команда, которые мы будем использовать чаще
make dev make stag make prod
dev
написано таким образом, что вам не нужно беспокоиться о вашем контейнере и параметрах. Просто обновите значение по умолчанию с вашим конкретным значением проекта один раз, и ваша среда Dev будет готова в кратчайшие сроки. Он построит контейнер, создает его и запустить его с помощью одной команды.
make dev
Запустите эту команду. Вот скриншот в разной точке времени для этой команды. Впервые эта команда займет несколько минут, но последующий прогон будет завершен в течение нескольких секунд. Я подчеркнул другой раздел для лучшего понимания. Вы можете получить доступ к вашему приложению на https://localhost/
Эта команда вы будете работать, когда вы хотите развернуть ваше приложение в постановке. Если вы посмотрите внимательно, мы переопределяем конфигурацию по умолчанию для постановки в начальных нескольких строках.
$(eval override BUILD_TYPE=staging) $(eval override DOCKER_TAG=${CONTAINER_NAME}:${BUILD_TYPE}) # This will return only the IP address associated with the domain name ans assign it to ADDRESS $(eval override ADDRESS=$(shell dig +short))
4-й строки — это то, где вы должны внести изменения в соответствии с вашими требованиями. Мы переопределяем значение по умолчанию адреса (0,0.0.0) с вашим доменом имени постановки среды. Мы используем копать
Утилита для генерации IP-адреса от этого доменного имени и назначение его адреса. Просто беги
make stag
И вы можете получить доступ к вашей промежуточной среде. Например. https://mojo-reaact-app-staging.com/ или https://постановка-IP- добавлять/
Эта команда вы будете работать, когда вы хотите развернуть ваше приложение в производственной среде. Опять же, вы можете видеть, что мы перекрываем конфигурацию по умолчанию для производства в начальных нескольких строках.
$(eval override BUILD_TYPE=production) $(eval override DOCKER_TAG = ${CONTAINER_NAME}:${BUILD_TYPE}) # This will return only the IP address associated with the domain name ans assign it to ADDRESS $(eval override ADDRESS=$(shell dig +short
Здесь снова в 4-м линиях, где вы должны внести изменения в соответствии с вашими требованиями. Обновите его к вашему имени хоста средней среды. Мы используем копать
Утилита для генерации IP-адреса от этого доменного имени и назначение его адреса. Просто беги
make prod
И вы можете получить доступ к вашей промежуточной среде. Например. https://mojo-react-app.com/ или https://production-ip- добавлять/
make stop
По умолчанию он остановит контейнер Dev. Пройти другой параметр для stag или prod env.
make login
Опять же, он будет войти в dev один по умолчанию. Вы можете передать парам, чтобы переопределить это поведение.
Этот Makefile — это просто обертка вокруг разных команд докера. Особенно во время развития вы можете включить живую перезагрузку И ваши изменения в хосте будут доступны также в контейнере Docker. Больше информации здесь Отказ Вы можете использовать его для любого докерафила. Здесь я использую мозговое приложение. Но тот же Makefile можно использовать для приложения Django или любого другого.
Я надеюсь, что это полезно для вас и сделать вашу жизнь более гладкой. Makefile также доступен на гадость
Перл лук логотип взята из здесь Mojolicious Logo, взятый из здесь Докерный логотип взяты из здесь GNU логотип взята из здесь
Оригинал: «https://dev.to/raigaurav/a-fusion-of-makefile-and-docker-45an»