Skip to content

format_docker

lijiaping edited this page Apr 25, 2019 · 1 revision

Docker

App的运行环境推荐由Docker镜像构建,以确保在任何地方运行结果一致。可以用三方编写好的,但是为了增加对整个流程的把控,建议全部自行编写。 使用最多的几个指令为FROM、RUN、COPY、ENV。

FROM

FROM指定了基础镜像的来源,只能有一个。需要注意的是,不能使用tag为latest的镜像。因为无法保障每次latest的镜像都相同,可能会导致无法意料的问题出现。目前有两个基础镜像可用,推荐使用这两个:har.bor/library/alpine:3.7-2.2.1a-2har.bor/library/ubuntu:16.04-2.2.1u-4。这两个镜像提供了性能评估以及进入容器内部调试的能力。区别在于前者基于超精简版Linux发行版Alpine,可以构建出最小的镜像。后者基于ubuntu,使用较为容易。镜像的大小将会影响镜像下载的速度,为了优化成本强烈建议在条件运行的情况下尽量使用基于Alpine的基础镜像。

后续将会基于每种语言推出相应的基础镜像。目前可用的基础镜像有:

  • perl:5.26.1a-1

RUN

RUN指定了构建镜像所需要执行的步骤。每个RUN指令是一层,层数应尽可能少,可以把安装某个软件相关的多个命令用&&连起来减少层数。同时也要避免单层过大,造成上传下载困难。在每层安装软件之后应该rm清理掉安装过程中留下来的临时文件,以期最小化每层的磁盘占用。合理安排每层的顺序,改动频繁的层应放在最后,提高镜像构建的速度。

COPY

用于从构建镜像的宿主机目录中复制文件到镜像中去,不支持绝对路径。请一次性复制到位,否则请在RUN中使用wget从http://10.0.10.96:8123/xxx/xxx下载来替代。

ENV

用于设置环境变量。若软件没有安装在默认系统目录中,建议设置PATH等环境变量,使得在调用软件的时候无需使用绝对路径。

安装perl的例子

FROM har.bor/library/alpine:3.7-tmate # 基础镜像

MAINTAINER [email protected] # 镜像维护人

RUN apk add --update --no-cache perl perl-dev # 安装perl

持续集成.gitlab-ci.yml

为了将镜像构建过程自动化,编写.gitlab-ci.yml可以实现自动构建、测试、上传镜像。生产上使用镜像,一定必须肯定要打tag,确保镜像内容不可变。编写方法可参考.gitlab-ci.yml

现有的镜像:dockerfiles

参考资料:如何编写最佳的Dockerfile

Clone this wiki locally