一个带有本地docker命令的makefile例子

432 阅读1分钟

在这个例子中,我们将在Makefile中保留原生的docker命令,并使用make 命令与它们进行交互。

可用的命令

所有的命令都列在下面。TAG 变量是强制性的,除非它是在服务器级别设置的。

make build TAG=latest

构建一个镜像,这将把应用程序植入镜像

make tag TAG=latest

标记一个图像

make start TAG=latest

启动一个容器

make stop TAG=latest

停止一个容器

make restart TAG=latest

重新启动一个容器

make pull TAG=latest

拉出一个镜像

make push TAG=latest

推送一个镜像

make clean TAG=latest

清除所有docker工件

make login TAG=latest DOCKER_USER=username DOCKER_PASS=password

登录Docker Hub

结构

.
├── app
│   ├── a.php
│   └── b.php
├── docker
│   ├── Makefile
│   └── php
│       └── Dockerfile
└── .gitignore

文件

a.php

echo 'Hello a'.PHP_EOL;

b.php

echo 'Hello b'.PHP_EOL;

Docker文件

FROM php:7.2-cli-alpine

COPY ./app /app

CMD tail -f /dev/null

制作文件

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

ACCOUNT := inanzzz
SERVICE := hello_php
IMAGE := $(ACCOUNT)/$(SERVICE)


build:
	$(info Make: Building "$(TAG)" tagged images.)
	@docker build -t $(IMAGE):$(TAG) -f php/Dockerfile ..
	@make -s tag
	@make -s clean

tag:
	$(info Make: Tagging image with "$(TAG)".)
	@docker tag $(IMAGE):latest $(IMAGE):$(TAG)

start:
	$(info Make: Starting "$(TAG)" tagged container.)
	@docker run -dit --name $(SERVICE) $(IMAGE):$(TAG)

stop:
	$(info Make: Stopping "$(TAG)" tagged container.)
	@docker stop $(SERVICE)
	@docker rm $(SERVICE)

restart:
	$(info Make: Restarting "$(TAG)" tagged container.)
	@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)