关于后端:Dockerfile-实战

40次阅读

共计 1171 个字符,预计需要花费 3 分钟才能阅读完成。

前沿

最近我的项目都应用容器部署,明天咱们来讲讲如何应用 Dockerfile 来部署我的项目

介绍

什么是 Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容蕴含了一条条构建镜像所需的指令和阐明

罕用指令

  • FROM (基于什么的镜像)
  • WORKDIR (指定 shell 语句运行在那个门路下)
  • COPY(将宿主机的文件拷贝到某个门路下)
  • RUN (运行 shell 语句,只有构建就会运行,如 echo 123 >> 1.txt)
  • CMD (指定镜像启动运行的脚本,只有容器真正运行的时候才会运行的脚本,执行后容器的生命周期即完结,且个别为阻塞式语句,如 tail)
  • ENTRYPOINT (和 CMD 相似,区别在于:ENTRYPOINT 非 json 数组模式 则以 ENTRYPOINT 为准(CMD 有效),如果 ENTRYPOINT 和 CMD 都是 json 数组 则 ENTRYPOINT+CMD 拼接成 shell)
  • EXPOSE(裸露镜像指定的端口号)
  • VOLUME(指定映射文件)
  • ENV(指定 docker 的环境变量,运行时始终有效)
  • ARG(构建参数,运行时有效,能够构建时长期批改变量)
  • LABEL(指定元数据,便于找到 docker)
  • ONBUILD (以后镜像构建的时候不会执行,基于以后镜像去构建的时候才会执行)
  • STOPSIGNAL(指定容器用什么信号,个别指定信号名)
  • HEALTHCHECK(查看容器的衰弱状态)
  • SHELL(指定 linux 为 /bin/sh , windows 为 cmd)

实战

举个例子,咱们有一个 golang 的我的项目,每个环境须要读取不同的配置文件。那咱们应该如何构建这个镜像呢?

咱们能够采纳分阶段的构建办法,这样能够把一些编译之类的工作放在第一个 from 的镜像里,间接把编译后果 copy 到第二个 from 的镜像中,从而缩小最终的镜像大小。

查看咱们的目录构造

etc目录下咱们放的是配置文件。能够依据环境来抉择

咱们来编写 Dockerfile 文件

FROM    golang:1.15-alpine as builder
ARG app_env
COPY . /app
WORKDIR  /app
RUN go build && \
    cp etc/test.yaml.${app_env} etc/test.yaml

FROM alpine:3.12.4
RUN mkdir -p /app/etc
COPY --from=builder /app/go-demo /app/go-demo
COPY --from=builder /app/etc/ /app/etc/
WORKDIR  /app
ENTRYPOINT /app/go-demo

而后咱们运行

docker build -t go-demo --build-arg app_env=dev .

docker run -d go-demo

这样咱们的容器就构建实现了

致谢

感激你看完这篇文章,有什么不对的中央欢送指出,谢谢🙏

正文完
 0