Bu örnekte Makefile içinde docker compose komutlarını saklayacağız ve onlarla etkileşim kurmak için make komutunu kullanacağız.


Mevcut komutlar


Komutların hepsi aşağıdaki gibidir. TAG ve ENV değişkenleri eğer sunucu üzerinde ayarlanmamış ise mecburidir.


make build TAG=latest ENV=dev


İmaj kurulumu.


make start TAG=latest ENV=dev


Container başlatma. test ve dev ortamlarında uygulama ana işletim sisteminden ulaşılabilir vaziyettedir. prod ve stag ortamlarında uygulama container içine kopyalanacak bu nedenle ana işletim sisteminden ulaşılabilir vaziyette olmayacaktır.


make stop TAG=latest ENV=dev


Container durdurma.


make restart TAG=latest ENV=dev


Container yeniden başlatma.


make pull TAG=latest ENV=dev


İmaj çekme.


make push TAG=latest ENV=dev


İmaj iletme.


make clean TAG=latest ENV=dev


Docker artıklarını temizleme.


make login TAG=latest ENV=dev DOCKER_USER=username DOCKER_PASS=password


Docker Hub login.


Yapı


.
├── app
│ ├── a.php
│ └── b.php
├── docker
│ ├── docker-compose.override.yml
│ ├── docker-compose.yml
│ ├── .env
│ ├── Makefile
│ └── php
│ └── Dockerfile
└── .gitignore

Dosyalar


a.php


echo 'Hello a'.PHP_EOL;

b.php


echo 'Hello b'.PHP_EOL;

Dockerfile


FROM php:7.2-cli-alpine

COPY ./app /app

CMD tail -f /dev/null

.env


ACCOUNT_NAME=inanzzz
COMPOSE_PROJECT_NAME=hello
TAG=latest

docker-compose.override.yml


version: '3'

services:

php:
volumes:
- ../app:/app:rw

docker-compose.yml


version: '3'

services:

php:
build:
context: ..
dockerfile: ./docker/php/Dockerfile
image: "${ACCOUNT_NAME}/${COMPOSE_PROJECT_NAME}_php:${TAG}"
hostname: php
working_dir: /app

Makefile


ifndef TAG
$(error The TAG variable is missing.)
endif

ifndef ENV
$(error The ENV variable is missing.)
endif

ifeq ($(filter $(ENV),test dev stag prod),)
$(error The ENV variable is invalid.)
endif

ifeq (,$(filter $(ENV),test dev))
COMPOSE_FILE_PATH := -f docker-compose.yml
endif


IMAGE := inanzzz/hello_php


build:
$(info Make: Building "$(ENV)" environment images.)
@TAG=$(TAG) docker-compose build --no-cache
@make -s clean

start:
$(info Make: Starting "$(ENV)" environment containers.)
@TAG=$(TAG) docker-compose $(COMPOSE_FILE_PATH) up -d

stop:
$(info Make: Stopping "$(ENV)" environment containers.)
@docker-compose stop

restart:
$(info Make: Restarting "$(ENV)" environment containers.)
@make -s stop
@make -s start

push:
$(info Make: Pushing "$(TAG)" tagged image.)
@docker push $(IMAGE):$(TAG)

pull:
$(info Make: Pulling "$(TAG)" tagged image.)
@docker pull $(IMAGE):$(TAG)

clean:
@docker system prune --volumes --force

login:
$(info Make: Login to Docker Hub.)
@docker login -u $(DOCKER_USER) -p $(DOCKER_PASS)