Рубрики
Uncategorized

Фьюжн Makefile и Docker

В нашей предыдущей статье мы создали Dockerfile для нашего Mojolicious Application. Там я … Помечено Perl, Docker, DevOps, Tutorial.

В нашем предыдущий Статья Мы создали 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»