Docker

基于Dockerfile自定义构建应用程序镜像

一、前言

现在容器化已成为大趋势,把程序依赖的编译环境通过容器来部署能够解决在不同系统上部署应用的问题,同时也可以把编译打包好的程序文件放置在容器中,常见的应用程序有java、python、go、php、node等,运维肯定会涉足很多各种不同的环境部署,这里就通过以centos7为基础镜像来自定义构建应用镜像,同时以实际的代码例子来进行打包构建

二、开始

2.1.go环境

编写go环境Dockerfile
cat Dockerfile

FROM centos:7
MAINTAINER linuxwt <tengwanginit@gmail.com>

######更换163源######
RUN yum -y install wget \
gcc \
&& wget http://mirrors.163.com/.help/CentOS7-Base-163.repo \
&& mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak \
&& mv -f CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo \
&& yum makecache

#####安装go环境####
RUN mkdir -p /go/src /go/bin
ADD go1.13.1.linux-amd64.tar.gz /usr/local/   # 这里需要Dockerfile所在目录有go二进制包 

####设置go环境变量#####
ENV GOROOT /usr/local/go   ## go编译器目录
ENV GOPATH /go     #### go项目目录
ENV PATH $GOROOT/bin:$GOPATH/bin:$PATH

docker build -t golang:1.13-centos7 .
这样就生成了需要的go编译环境

下面是一个编译打包的例子
首先看下源码文件
03go1
这里有一个Dockerfile
cat Dockerfile

FROM golang:1.13-centos7 as build-stage
ENV GOPROXY=https://goproxy.cn
WORKDIR /go/src/dockerloader
COPY . .
RUN go mod tidy && go build -o dockerloader .
#####
FROM centos:7

ENV TZ=Asia/Shanghai

COPY --from=build-stage /go/src/dockerloader .
CMD ["./dockerloader"]

上面是一个多指令FROM的Dockerfile,目的是将当前的代码编译然后将编译得到的可执行文件放到另外一个镜像中形成需要的应用镜像,这里可以实现编译环境与执行环境分离
docker build -t dockerloader:1.2 .

支付宝扫码打赏 微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章

linuxwt's Picture
linuxwt

我叫王腾,来自武汉,2016年毕业后在上海做了一年helpdesk,自学了linux后回武汉从事系统运维的工作,从2017年开始写博客记录自己的学习工作,现在正在进行数据迁移到此博客,目前就职于中国移动设计院有限公司,个人的座右铭是:逃脱舒适区才能在闲暇的时候惬意的玩耍。

武汉光谷 https://linuxwt.com

Subscribe to 今晚打老虎

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!

Comments