dockerfile结合go应用程序的简单应用代码示例-kb88凯时官网登录

来自:网络
时间:2024-06-08
阅读:

dockerfile是什么

dockerfile是一种用于定义和构建docker镜像的文本文件。它包含一系列指令和配置,用于构建一个可运行的docker容器。

在dockerfile中,您可以定义从哪个基础镜像开始构建、复制文件、设置环境变量、运行命令等操作。每个指令都代表一个步骤,按顺序执行,从而构建出一个完整的docker镜像。

go build

go build是go语言的一个命令,用于将go源代码编译成可执行文件或库。

示例

from golang:1.20 as builder
workdir /source
copy . /source
run go build -o app .
from ubuntu:noble
copy --from=builder /source/app /app
run chmod  x /app
env app_name="app"
env app_version="v0.0.1"
cmd ["/app"]

示例的dockfile包含了docker多阶段构建,第一个用于构建go应用程序,另一个用于最终的容器镜像。

第一阶段:构建go应用程序

from golang:1.20 as builder
workdir /source
copy . /source
run go build -o app .

首先,使用golang:1.20作为基础镜像命名为builder,接着将工作目录设置为/source,然后将宿主机的当前目录中的所有文件复制到容器的/source目录下,接着执行go build命令,将go源码编译为名为app的可执行文件。

第二阶段:构建运行应用程序的最终容器

from ubuntu:noble
copy --from=builder /source/app /app
run chmod  x /app
env app_name="app"
env app_version="v0.0.1"
cmd ["/app"]

首先,使用ubuntu:noble作为基础镜像最终的容器镜像,接着将第一阶段(builder阶段)的/source/app文件复制到容器的/app目录,然后运行chmod x /app/app添加可执行权限,然后使用env设置了一系列环境变量,最后通过cmd指定了容器启动时要执行的命令,即运行/app可执行文件。

示例的dockerfile使用了多阶段的构建的方式,首先在一个专门用于构建的构建容器中编译应用程序,然后再将编译好的可执行文件复制到最终的容器镜像中,这种方式可以减小最终镜像的大小,因为这种最终得到的docker镜像只会包含最终容器和可执行文件,而没有编译该可执行文件需要的编译环境。

思路

使用dockerfile来构建此类应用程序简单的思路大致就是使用两个构建阶段,第一个阶段的目的就是编译该应用程序,第二阶段就是将该应用程序复制到最终容器中。

其中第一阶段的步骤大致是,选定基础镜像,指定工作目录,将宿主机的源代码复制到容器的工作目录中,然后执行编译得到可执行文件。

第二阶段的步骤大致是,选定最终容器的镜像,然后将第一阶段编译出的可执行文件复制到现容器中,设置环境变量,定义运行命令。

示例这里是go的应用程序,java的应用程序同理:第一阶段选定java的构建环境,如from:java,然后将java源码构建为jar包,接着在第二阶段指定jar文件运行需要的环境,最后执行jar应用程序。

常见命令

dockfile指令描述
from指定基础镜像,作为后续指令的基础
workdir设置后续指令的工作目录
run在构建过程中执行的命令
copy将宿主机文件或目录复制到镜像中
env设置容器内部的环境变量
cmd指定容器运行时的默认命令(可以被覆盖)
entrypoint指定容器运行时的主要命令(不可以被覆盖,必须执行)

注意事项

build

编写好dockerfile后,使用

docker build -t  .
## -t 指定创建的目标镜像名

build镜像。

run

可以使用

docker run 

以容器的方式运行镜像

或者使用docker-compose来运行镜像。

始终牢记,docker的镜像无论如何都是运行在容器当中的,所以可以执行

docker run -it  bash

以容器的方式运行镜像,上述方法能够在编写dockerfile的时候方便以容器的方式运行镜像并且观察镜像的环境,从而检查dockerfile编写是否存在问题。

总结

返回顶部
顶部
网站地图