1. 编写docker file
  2. docker build --build-arg flink_dist="$FLINK_DIST" -t "$REPO_URL/${IMAGE_NAME}" .
  3. docker push $REPO_URL/kepler/${IMAGE_NAME}

Dockerfile详解

https://yeasy.gitbooks.io/docker_practice/image/build.html

构建docker镜像file应该尽可能精简,否则产生过多中间无用层会导致镜像变的臃肿,每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更

https://yeasy.gitbooks.io/docker_practice/image/commit.html

常见指令

USER

指定执行命令的用户,默认是以root执行,创建的文件都是root属主,可以多次改变属主

  1. USER admin

ADD

将文件加入docker镜像,默认会进行解压

指定多个ARG参数

  1. docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 --build-arg number_of_replicas=2 --no-cache .

常见用法

多层镜像构建:
https://zhuanlan.zhihu.com/p/43319212
https://tonybai.com/2017/11/11/multi-stage-image-build-in-docker/

官网文档

https://docs.docker.com/engine/reference/builder/

Docker buildkit

我们使用docker 构建镜像通常有几种做法,第一种是在容器外先将二进制包构建好,然后再将包Add到镜像中,这样的好处是外面构建的tar包还可以留作其他用途,但是不好的地方是这样还依赖外围的打包的工具,其实Dockerfile中可以From一个maven的基础镜像,然后从基础镜像中直接build源码。
但是这样有个坏处是,每次build的时候都需要下载大量的依赖的第三方的jar,使得build的耗时大大加长。而docker buildkit

Makefile

我们也可以编写一个makefile来帮助项目的测试,构建和发布的管理

编写Makefile注意点

关于什么是build context
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#understand-build-context

env设置环境变量在su之后会丢失的问题

https://github.com/moby/moby/issues/3403