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 してしまうことがあるのでこっちかなぁ