Docker的Makefile可以用以下方式进行解释:
docker命令
docker命令选项很长,而且需要反复使用。如果不指定容器名称等参数,将会创建出越来越多不知名的容器…
在某个地方看到了使用Makefile的代码,照葫芦画瓢地加进去,最终变成了现在这样的形式。
执行命令 (shí mǎ)
尽管所有内容都是用Docker命令编写的,但几乎不需要指定参数,而且即使是不同的镜像,命令也是统一的,这一点很好。特别是docker run命令,由于参数很长,所以打得很短,非常方便。
形象建立
$ make build
启动容器
无需输入长参数非常方便。
$ make start
容器重新启动
我會先删除当前剩余的容器,然后重新启动。
在构建容器时,会不断重复构建和重启的过程。
$ make restart
请不要使用镜像和容器删除。
在删除不需要的镜像和容器之前,请注意如果当前有正在运行的容器,则删除容器会出现错误,因为没有使用-f选项。最好在所有容器停止时进行操作。
$ make clean
其他
除了指定了$(NAME)外,还有其他停止日志附件,几乎都是原样的。
生成一个Makefile模板
NAME=xxx
VERSION=xxx
build:
docker build -t $(NAME):$(VERSION) .
restart: stop start
start:
docker run -itd \
-p xxx:xxx \
-v xxx:xxx \
--name $(NAME) \
$(NAME):$(VERSION) bash
contener=`docker ps -a -q`
image=`docker images | awk '/^<none>/ { print $$3 }'`
clean:
@if [ "$(image)" != "" ] ; then \
docker rmi $(image); \
fi
@if [ "$(contener)" != "" ] ; then \
docker rm $(contener); \
fi
stop:
docker rm -f $(NAME)
attach:
docker exec -it $(NAME) /bin/bash
logs:
docker logs $(NAME)
更新
- attachを本当のattachから exec に変更。<ctrl+p> <ctrl+q> で抜けるのはいいけど、間違えて exit してしまうことがあるのでこっちかなぁ