16/09/2018 - DOCKER, LINUX
Bu örnekte Makefile içinde docker compose komutlarını saklayacağız ve onlarla etkileşim kurmak için make
komutunu kullanacağız.
Komutların hepsi aşağıdaki gibidir. TAG
ve ENV
değişkenleri eğer sunucu üzerinde ayarlanmamış ise mecburidir.
İmaj kurulumu.
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.
Container durdurma.
Container yeniden başlatma.
İmaj çekme.
İmaj iletme.
Docker artıklarını temizleme.
Docker Hub login.
.
├── app
│ ├── a.php
│ └── b.php
├── docker
│ ├── docker-compose.override.yml
│ ├── docker-compose.yml
│ ├── .env
│ ├── Makefile
│ └── php
│ └── Dockerfile
└── .gitignore
echo 'Hello a'.PHP_EOL;
echo 'Hello b'.PHP_EOL;
FROM php:7.2-cli-alpine
COPY ./app /app
CMD tail -f /dev/null
ACCOUNT_NAME=inanzzz
COMPOSE_PROJECT_NAME=hello
TAG=latest
version: '3'
services:
php:
volumes:
- ../app:/app:rw
version: '3'
services:
php:
build:
context: ..
dockerfile: ./docker/php/Dockerfile
image: "${ACCOUNT_NAME}/${COMPOSE_PROJECT_NAME}_php:${TAG}"
hostname: php
working_dir: /app
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)