在这个例子中,我们将在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)